Tudo começou com uma brincadeira na empresa anterior que eu trabalhava. Um amigo engenheiro assinava os documentos apondo uma figura com a sua assinatura no final do mesmo. Argumentei com ele que aquilo era facilmente fraudável, no que retrucou-me com um muxoxo: isto é impossível por que uso o sistema de senha do MS Word.
Ato seguinte mudei um documento que ele tinha redigido. Fiz uma petição para o advogado dele dando todos os bens do casal e deixando 50% de seu salário para a esposa que estava na época pedindo divórcio. Ele ficou branco quando viu no papel impresso, a petição seguida de sua vistosa assinatura. Perguntou-me então, como era que se fazia para assinar documentos digitais. E para surpresa dele, disse-lhe que não sabia mas iria dar uma olhada para ver o que achava.
Rapidamente achei o sistema gnupg que é uma adaptação do sistema de criptografia comercial pgp para o linux. Todavia, não encontrava um jeito decente de assinar o documento. Até que uma idéia simples ocorreu-me: no lugar da assinatura basta colocar o nome do arquivo de assinatura gerado pelo gnupg. Parece simples, mas não me parecia tão óbvio na época. Na verdade, o truque está em predizer o nome do arquivo de assinatura. è isto que eu vou explicar a seguir.
Instalação do gnupg
As instruções de instalação foram retiradas do tutorial, https://help.ubuntu.com/community/GnuPrivacyGuardHowto Todos os créditos são do autor da página.
Primeiro você terá de instalar gnupg na sua máquina. Se você é usuário de Windows eu não posso ajudar muito. Mas, é só procurar na internet que você encontrará algum programa que trabalhe com o pgp. Você terá de pagar, mas isto não tem problema para os usuários de Windows. É uma turma estribada. Mas, não se preocupe a sistemática explanada por aqui servirá para você também. Já se você tem um console linux à disposição a coisa é mais direta. Se a distribuição for Debian ou Ubuntu basta digitar:
:$ sudo apt-get install gnupg
Depois de instalado você terá que gerar sua chave criptográfica para que o sistema possa assinar o documento. Para isto basta digitar,
:$ gpg --gen-key
Você será convidado a escolher um tipo de codificação. A opção padrão é (1) e se você não quiser ser muito diferente é só dar enter e prosseguir.
Please select what kind of key you want:
(1) DSA and Elgamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
O tamanho da chave será pedido. A opção padrão de 2048 é uma boa pedida,
What keysize do you want? (2048)
Em seguida será pedido um tempo de validade. Se você quiser colocar três anos digite 3y. A opção padrão 0 significa que a chave valerá infinitamente. Neste caso, não esqueça de fazer um certificado de revogação. Ele servirá para que você revogue a sua chave, caso alguém se apodere dela sem o seu consentimento. Se você quiser aceitar o valor padrão basta digitar y e prosseguir,
Key is valid for? (0)
Neste momento, aparecerá uma janela com as informações que você repassou ao programa. Se estiver tudo certo clique em o para prsseguir,
You need a user ID to identify your key;
the software constructs the user ID from the Real Name, Comment and
Email Address in this form: "Heinrich Heine (Der Dichter)
" Real name: Dennis Kaarsemaker
Email address:
Comment: Tutorial key You selected this USER-ID: "Dennis Kaarsemaker (Tutorial key)
Neste ponto será pedida uma frase para servir como senha. Use frase desconexas como, a baleia azul muge no campo. É melhor que uma senha simples, por que o programa irá usá-la como referência para a codificação da chave.
You need a Passphrase to protect your secret key.
A sua chave será gerada. Um quadro assim aparecerá em seu display,
gpg: key D8FC66D2 marked as ultimately trusted public and secret key created and signed.
O identificador da chave é D8FC66D2 (o que você gerar será diferente). Será uma boa idéia disponibilizar a sua chave para todos os prgramas que usam o gpg. Para isto basta copiar a linha abaixo no seua arquivo ~/.bashrc,
export GPGKEY=D8FC66D2
Reinicie o agente gpg e indique o seu ~/.bashrc como fonte,
Pronto, o seu sistema está em ordem para assinar documentos.
Assinando Documentos
Redija um documento no Oppenoffice ou no MS Word. Salve com o nome teste_assinatura.odt para o Oppenoffice, por exemplo. No final do documento coloque seu nome e na linha abaixo coloque o nome do arquivo de assinatura teste_assinatura.odt.asc. O documento assinado deverá ficar com parecido com este exemplo. Descompacte o arquivo e abra o documento original carta_guim_rosa.pdf. Este é o truque: o sistema de assinatura sempre gerará o arquivo de assinatura com a extensão .asc. Dado que você sabe a priori o nome do seu arquivo, você também saberá a priori o nome do arquivo de assinatura você poderá apor o nome do arquivo de assinatura .asc no seu documento como se fosse a sua assinatura. Desta forma nós poderemos emular a assinatura feita com caneta. Vamos agora para a parte operacional. Para gerar a assinatura digite a linha,
:$ gpg -b -a carta_guim_rosa.pdf
A opção -b instrui o gpg para gerar um arquivo de assinatura separado. A opção-a instrui o gpg para gerar um arquivo do tipo ASCII com armadura. A operação gerará o arquivo de assinatura abaixo, para o arquivo de exemplo que está junto no arquivo compactado que você baixou.
Eu aconselho a compactar os dois arquivos para depois armazená-los. Assim se você necessitar enviar o arquivo assinado não precisará procurar em seu computador.
Verificando a Assinatura de um Documento
Para verificar uma assinatura você deverá ter a chave pública de quem assinou o arquivo. Por favor, procure na internet explicações do que significa chave pública, ou melhor, como funciona o sistema de codificação pgp. No caso presente, vou disponibilizar a minha chave pública para que você possa verificar o documento que assinei como exemplo para esta nota. Para obtê-la digite o comando seguinte estando na internet (o comando buscará minha chave publica no servidor de chaves do Ubuntu),
Pronto, a minha chave já está incluída no seu chaveiro.
Baixe o arquivo carta_guim_rosa.pdf.tar.gz. Descompacte-o, colocando os dois arquivos que estão nele no mesmo diretório e digite a linha,
:$ gpg --verify carta_guim_rosa.pdf.asc
Você obterá uma saída como esta,
gpg: Assinatura feita Ter 11 Dez 2007 15:45:57 BRT usando DSA chave ID 35813CCF
gpg: Assinatura correta de "Emilio Luciano de Miranda e Silva (Eng Senior) "
Agora retire o arquivo carta_guim_rosa.pdf para outro diretório. Faça de novo a verificação e você obterá a seguinte saída,
gpg: nenhum dado assinado gpg: can't hash datafile: erro na abertura de arquivo
O sistema não encontrando o arquivo original assinado não reconheceu a assinatura. Agora vou ao passo seguinte. Modificarei o arquivo carta_guim_rosa.pdf assinado, colocando o meu nome completo no final, sem abreviações. Se pedirmos a verificação obteremos,
gpg: Assinatura feita Ter 11 Dez 2007 15:45:57 BRT usando DSA chave ID 35813CCF
gpg: Assimanatura ERRADA de "Emilio Luciano de Miranda e Silva (Eng Senior) "
Então, chegamos ao ponto. Compare os dois arquivos pdf, o original que está compactado no arquivo tar e o outro que foi modificado. Temos um sistema que emula a assinatura em papel. Talvez com um grau de segurança maior pois além de verificar que o arquivo foi assinado por quem o declarou, ele verifica também a integridade do mesmo. Este método pode ser aplicado com qualquer tipo de arquivo independente de seu formato.
Finalmente, quais são as restrições deste método? É a insegurança que pode existir na hora de nós pegarmos a chave pública das pessoas. Se você pegar uma chave pública minha hoje que seja diferente da 35813CCF que estou declarando aqui, pode ter certeza de que eu não assinei nenhum documento com ela. Então, só adicione chaves no seu chaveiro quando tiveres certeza da origem dela. Desconfiou não adicione. Fale com a pessoa, peça de novo, confira o identificador pois toda a segurança do sistema reside neste ponto.
Inclui uma seção acervo no site. São livros e outras publicações que distribuo aqui pois, ou são de minha autoria, ou têm permisão de distribuição livre. Na maioria são livros antigos que diagramei para ler ou mesmo que fiz cópia para preservação. O primeiro da série é "Capítulos da História Colonial" de Capistrano de Abreu. Outros estão no "prelo".