O GNU Privacy Guard é uma implementação de código aberto do OpenPGP, um protocolo de criptografia. Ele serve para, dentre outras coisas, assinar ou encriptar um documento, como um texto ou um email. Ao assinar, você envia a mensagem intacta (sem criptografia), mas com uma assinatura que permite ao destinatário verificar que foi realmente você quem a enviou; já a mensagem encriptada é completamente ilegível a um ser humano (e requer muito poder computacional – anos de processamento – para ser lida por um computador que não tenha a chave correspondente).
O processo de criptografia com o GPG funciona com um par de chaves, chamados de chave pública e chave privada. Existem basicamente duas possibilidades: você pode assinar uma mensagem, o que permite que qualquer pessoa que tenha a sua chave pública possa verificar que foi realmente você quem enviou, ou você pode cifrar a mensagem utilizando a chave pública de alguém, o que permite que somente o destinatário, que possua a chave privada que combina com a chave pública que você utilizou para criar a mensagem consiga lê-la. Em outras palavras, não é possível enviar uma mesma mensagem cifrada para mais de um destinatário, pois as chaves são pessoais, cada pessoa terá uma chave diferente.
As chaves públicas podem ser disponibilizadas em servidores públicos de chaves – numa lista de email, se todos os participantes usarem assinaturas GPG, é possível verificar a autenticidade da origem das mensagens, por exemplo – ou, para uma segurança absoluta, ser entregue de mão em mão fisicamente – por exemplo, duas pessoas que queiram trocar mensagens secretas na internet, podem marcar de trocarem suas chaves públicas entre si e mandarem mensagens criptografadas, dessa forma ninguém conseguirá descobrir o conteúdo dos emails ainda que as mensagens sejam interceptadas. Geralmente o que costuma acontecer é uma mistura das duas técnicas – você baixa a chave pública da pessoa de um servidor público e caso encontre com ela pessoalmente, pode marcar a chave dela como razoavelmente confiável (você confirmou os dados por telefone, por exemplo) ou plenamente confiável (você a conhece pessoalmente ou confirmou os dados com um documento de identificação da pessoa, por exemplo). Desta forma, se você confia plenamente na chave de José, ele confia na de Maria e ela na de Joaquim, por conseguinte as chaves de José, Maria e Joaquim são confiáveis.
Apenas como um exemplo, vejamos como ficam os seguintes exemplos assinados com a minha chave:
Mensagem original:
Olá! Este é um teste do GnuPG e o FireGPG no meu GMail.
A mensagem assinada fica assim:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Olá! Este é um teste do GnuPG e o FireGPG no meu GMail.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Use GnuPG with Firefox : http://getfiregpg.org (Version: 0.7.5)
iEYEARECAAYFAkn+aa0ACgkQN8/PzL0GXew+6wCeJNBdTSAcXc3DnEmnnns1kREt
r1oAn0Ba2HVRe/sCM6qO1l9Sq7PWv+tu
=/pXZ
-----END PGP SIGNATURE-----
Note que há um bloco de assinatura, mas a mensagem ainda é legível. Agora vamos comparar com a mesma mensagem cifrada para a minha chave pública:
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Use GnuPG with Firefox : http://getfiregpg.org (Version: 0.7.5)
hQIOAz2cbYt84VD6EAgAuSORNt9tgYWco0np2U4xzjwjf6bjBhiwi1K6Kvzzg9JE
J2KB8TJYda/svW9PgB2EUeR91NW0r45V6oUTbTtiftCqSzAZLBvNzEpBW9aWxZkH
qmcMFVqUSWqbYuF+W4rLQEft79X0pckrbjTFRjzpdKSoVfUybkkjtqOwMntlFeSY
XPVZT0DY6QZfLh8VAlr4jyjCnqKCImhUGEhSzpGzrc5S9XKMrv7fR0gzqb1WJ/GH
rnluPA9OUwOfasjLV4Yfli9rvnPhIkgrRwL7gTWrXYHPnP3+LIXAJyd5ZD9wi9ll
HI8+xBuvYaMt1aucJwuRA7AHvMM/+AIjArAFBgJdIAgAuOE5oSexamX0bXvrQInc
4WuV/ug+PCUDaILKV3+Vx7Wbz6byh8XAsFjaLifEpihNWSYLI3G8l2E9/lY3+OPs
IUVkNwU7T3cn4VSmrtxfH2vOJuwvJSlM8oM/TMZ7jlmihO82esV6FJveix2yTe5c
J9uaBvnM66WrAqkprN8XXvNIlSuUKqAYhOcahd9vWA9xB7NZi7HMrot8tbbegJDP
1bY8sSEx7TDyLTF+oZGgwwMeJzX1LVImP9H63SuF91+KC+I7JPUwC/BjW5x4dcbL
qbcpl8+oelF3wA/d1HfTtlPsazP3QZKMFQYT+i5s07bobcZtIbxKiYL5agg+A79f
9tJxAfPoCvq/xEckbPQDRa3AXMLbVIxxfZ+3YIZSyisA3uMjcWK27thM9K59jFW1
2hesy+sXoV/nQYAQtOUNWs6mJ5KyAnCqwp8jnKz5dIDWvV3anmryYPHvUbY7xJnE
YsG71uZBBvCMNd8y9RnvqdD5bIA=
=+b47
-----END PGP MESSAGE-----
Criando a chave
No Ubuntu, abra o Seahorse, o gerenciador de senhas em Aplicativos > Acessórios > Senhas e chaves de criptografia, vá no menu Arquivo > Novo…, escolha Chave PGP e clique em Continuar.
Entre com seu nome completo e endereço de email. Em Opções avançadas de chave, é possível escolher outras configurações como a data de expiração da chave, caso você queira criar uma chave provisória. Após clicar em Criar, você deverá inserir uma frase secreta, se possível com uma combinação aleatória de caracteres maiúsculos e minúsculos, acentos, números, símbolos etc. Após algum tempo (pode demorar caso o seu computador seja lento), a chave será criada.
Você pode exportar a chave pública clicando com o botão direito no seu nome e em Exportar. Essa chave poderá ser enviada para alguém manualmente, ou ser enviada para um servidor público de chaves através da opção Remoto > Sincronizar e publicar chaves… do menu. Para exportar a chave privada (a qual você não deve passar para ninguém, lembre-se!) clique com o botão direito no seu nome e em Propriedades, aba Detalhes, botão Exportar. Recomenda-se guardar a chave privada num dispositivo de backup, como um HD externo, um pendrive ou um CD, preferencialmente um que você deixe em casa, não ande com ele todo dia. Para importar a chave privada, em outro computador seu, utilize a opção Arquivo > Importar. É possível adicionar outros emails (pessoal, acadêmico…) à sua assinatura, na aba Nomes e assinaturas da janela de propriedades da assinatura.
Utilizando a chave para mandar emails
Apesar de ser possível encriptar ou assinar textos manualmente na linha de comando, é muito mais prático usar uma extensão de Firefox se você usa emails online. Para isso, instale o FireGPG. Ele automaticamente detecta a sua chave GPG instalada, e permite assinar e criptografar mensagens (e anexos) de forma direta (por exemplo, se for uma assinatura, com os caracteres criptografados diretamente no email) ou através de uma assinatura em anexo (arquivo com extensão asc). Ele também decodifica mensagens que você receba de outras pessoas, bem como permite buscar automaticamente por chaves que você por ventura ainda não tenha. Para assinar uma mensagem, digite a mensagem normalmente no seu webmail, e então selecione o texto desejado e vá na opção Ferramentas > FireGPG > Assinar. Analogamente, há a opção de Cifrar. Em Ferramentas > FireGPG > Opções é possível ativar opções para sempre cifrar e/ou assinar as mensagens no GMail por exemplo. A utilização da criptografia com dessa forma é bastante facilitada e conveniente.