Pular para o conteúdo
PDFLove

como funciona a criptografia de pdf

Como funciona a proteção por senha de um PDF

Um PDF pode carregar duas senhas, e só uma delas criptografa alguma coisa. A outra é um pedido que se confia que os leitores honrem — e é exatamente por isso que ela pode ser retirada.

01

Uma chave, duas portas

Quando um PDF é criptografado, uma chave de criptografia de arquivo aleatória é gerada. Essa chave é o que protege o conteúdo de verdade, e ela nunca é guardada dentro do arquivo.

O que é guardado são duas cópias criptografadas dela, nas entradas `/O` e `/U` do dicionário de criptografia. A senha de usuário abre uma; a senha de proprietário abre a outra. Forneça qualquer uma das duas e você chega à mesma chave do arquivo — que é o detalhe crucial que quase ninguém conhece, e a fonte de quase toda a confusão sobre o que proteção significa aqui.

Os bits de permissão — pode imprimir, pode copiar, pode modificar — são guardados no dicionário de criptografia como um inteiro simples. Não são impostos por criptografia. São uma declaração de intenção que um leitor conforme concorda em respeitar.

02

Por que remover uma senha de proprietário não é quebrar nada

Quase todo PDF que restringe impressão ou cópia não tem senha de usuário nenhuma. O arquivo abre na hora em qualquer leitor porque a senha de usuário é a cadeia vazia — e a cadeia vazia deriva a chave do arquivo.

Então uma ferramenta que remove restrições não está atacando a criptografia. Ela descriptografa o arquivo exatamente como o seu leitor faz, com a senha vazia, e escreve uma cópia sem os sinalizadores de permissão ligados. O conteúdo nunca esteve escondido de quem o abrisse; o arquivo apenas pedia aos leitores que não permitissem certas ações.

Isso é uma decisão de projeto deliberada, e não uma falha, e a especificação é franca a respeito. Permissões existem para expressar intenção a software cooperativo. Qualquer programa disposto a ignorar os sinalizadores — e qualquer programa capaz de exibir a página pode, já que ele já descriptografou o conteúdo para renderizar — passa ao largo delas.

Senha de usuário
Criptografia de verdade. Sem ela os fluxos são texto cifrado e nada consegue renderizar o arquivo. Não é removível sem a senha.
Senha de proprietário
Define os sinalizadores de permissão. O conteúdo já é descriptografável com a senha de usuário vazia, então remover é uma reescrita, não um ataque.
As duas definidas
Você precisa da senha de usuário só para abrir. Uma vez aberto, as restrições são tão removíveis quanto sempre foram.
Nenhuma
Não há dicionário de criptografia. Não há nada a remover.

03

O que é criptografado de verdade, e como

Não o arquivo inteiro. A estrutura de objetos, a árvore de páginas e a tabela de referências cruzadas continuam legíveis — um leitor precisa navegar pelo documento antes de conseguir descriptografar qualquer coisa. O que é criptografado é o conteúdo: os dados dos fluxos e as cadeias.

Cada objeto ganha a própria chave, derivada de aplicar um resumo à chave do arquivo junto com o número e a geração daquele objeto. É por isso que duas imagens idênticas no mesmo arquivo criptografam para bytes diferentes, e é por isso também que um objeto criptografado não pode ser renumerado — o número faz parte da chave dele. Ferramentas de juntar e dividir precisam descriptografar antes de copiar qualquer coisa.

04

Os algoritmos, e quais ainda significam alguma coisa

O gestor de segurança foi revisado várias vezes, e a versão que um arquivo carrega determina quanto vale a senha dele.

RC4 de 40 bits (PDF 1.1)
Praticamente nenhuma proteção. O espaço de chaves é pequeno o bastante para ser varrido inteiro em hardware comum.
RC4 de 128 bits (PDF 1.4)
Chave mais longa, mas o RC4 já não é considerado sólido e a derivação de chave são poucas rodadas de MD5 — barato de atacar chutando senhas.
AES-128 (PDF 1.6)
Uma cifra sólida. A fraqueza que resta é a derivação de chave rápida.
AES-256, revisão 6 (PDF 2.0)
O padrão atual. Derivação de chave deliberadamente cara, então chutar senhas é lento. Aqui uma senha forte é forte de verdade.

05

O que isso significa para como você usa

Se o documento não pode ser lido pela pessoa errada, defina uma senha de usuário, use um nível de criptografia moderno e mande a senha por um canal diferente do documento. Uma senha enviada por e-mail no mesmo thread do arquivo não protege de nada.

Se você só quer desencorajar cópia ou impressão casual, uma senha de proprietário faz isso e nada além. É um aviso de cortesia com força real entre software cooperativo e nenhuma força fora disso. Tratar aquilo como segurança é o erro que vale evitar — quem estiver motivado o bastante para querer o texto pode selecioná-lo num leitor que ignore os sinalizadores, ou rodar OCR sobre uma captura de tela.

E quando um documento de fato não pode ser editado, em vez de não poder ser lido, achatar costuma ser o instrumento melhor. Ele funde as anotações e os campos de formulário na página, então não sobra nada com que interagir, e não depende de ninguém honrar um sinalizador.

Perguntas

Perguntas relacionadas

Se uma ferramenta consegue remover a senha, a criptografia de PDF é inútil?

Só a de permissões é removível, e aquilo nunca foi criptografia. Uma senha de usuário é AES de verdade sobre o conteúdo — nenhuma ferramenta consegue removê-la sem a senha, porque os fluxos são texto cifrado e não há nada para ler.

É legal remover restrições de um PDF?

Para um documento que é seu ou que você tem direito de usar, em geral sim — você está reescrevendo o próprio arquivo. Remover a proteção para redistribuir o trabalho de outra pessoa é outra coisa e depende de direito autoral, não do que a ferramenta consegue fazer.

Que nível de criptografia devo escolher?

AES-256, a menos que você precise dar suporte a software anterior a mais ou menos 2017. Os modos RC4 antigos existem só por compatibilidade e nenhum deles deve ser levado a sério hoje.

Por que consigo abrir um PDF que diz que a impressão não é permitida?

Porque abrir e imprimir são governados por mecanismos diferentes. Abrir precisa da senha de usuário, que nesse arquivo está vazia. Imprimir é controlado por um sinalizador que o seu leitor escolheu honrar.