by (C) João Eriberto Mota Filho <eriberto (a) eriberto pro br>
Artigo criado em: 15 de abril de 2007.
Última atualização: veja o rodapé desta página.
Tiny URL ou bit.ly: http://bit.ly/GNUPG
Este artigo é um tutorial para as pessoas que desejam conhecer e utilizar o GPG.
O PGP (Pretty Good Privacy) e o GnuPG (GNU Privacy Guard ou GPG)
O Pretty Good Privacy (Privacidade Muito Boa) é um sistema de criptografia assimétrica e assinatura digital, desenvolvido em 1991 por Philip Zimmermann. No início, o PGP possuia restrições quanto ao uso. Assim sendo, o Projeto GNU desenvolveu o GnuPG (GNU Privacy Guard), que é totalmente compatível com o PGP. O GnuPG segue as especificações do protocolo OpenPGP, definido pela RFC 2440.
O site do PGP é o http://www.pgp.com. O site do GnuPG (GPG) é o http://www.gnupg.org.
Instalação no Debian GNU/Linux
O GnuPG poderá ser instalado com o comando:
# apt-get install gnupg
O chaveiro digital
O chaveiro digital de um usuário é a reunião de todas as chaves de interesse de tal usuário. Esse chaveiro, geralmente, contém o par de chaves do usuário e as chaves públicas de outros usuários. O chaveiro digital de cada usuário fica armazenado em ~/.gnupg e pode ser visto com o comando:
$ gpg --list-keys
É possível que um usuário tenha mais de uma chave, principalmente se as mesmas tiverem tamanhos diferentes (em bits). A diferença poderá ser vista no ID das mesmas.
A criação e a manipulação das chaves
Criação das chaves
Para criar um par de chaves (pública e privada), utilize o comando:
$ gpg --gen-key
Observações importantes:
- Ao criar as chaves, escolha a opção DSA and Elgamal. Essa opção irá permitir a assinatura e a criptografia de mensagens, arquivos etc.
- Opte pela não expiração das chaves para que ela seja "eterna". Chaves pessoais, geralmente, não são criadas com prazo de validade. No entanto, se preferir, insira uma data de expiração. Essa data poderá ser modificada de tempos em tempos na própria chave.
- O item Comment poderá ser deixado em branco mas, geralmente, é preenchido com um nickname que você use no mundo virtual.
- Não utilize acentos ao inserir o seu nome.
- Ao criar o par de chaves, será pedida uma passphrase (frase senha). Não utilize uma senha comum, com 6 ou 8 caracteres. Use uma frase retirada de uma música ou expressão que seja fácil de lembrar. A passphrase poderá ser alterada posteriormente.
- Ainda, em qualquer processo de criptografia assimétrica, a utilização da chave privada sempre irá requerer o uso de uma passphrase.
Listando as chaves existentes no chaveiro
Para listar as chaves, utilize o comando:
$ gpg --list-keys
Listando as assinaturas existentes em uma chave
Para listar as assinaturas existentes em uma chave, utilize o comando:
$ gpg --list-sigs <nr_da_chave>
Exemplo:
$ gpg --list-sigs 8C45C1CC
Exportando e importando chaves localmente
Os comandos a seguir serão utilizados apenas localmente. Para obter ou colocar chaves em servidores públicos na Internet, veja o item Servidores públicos de chaves na Internet.
Para exportar a sua chave pública como asc (para disponibilizar na Internet, por exemplo), utilize o comando:
$ gpg -a --export <nr_da_chave> > arq.asc
Para exportar a sua chave privada (cuidado! perigo!) como asc, utilize o comando:
$ gpg -a --export-secret-keys <nr_da_chave> > arq.key
Para importar uma chave para o seu chaveiro, utilize o comando:
$ gpg --import <arquivo_que_contém_a_chave>
Remoção de chaves do chaveiro
Para remover uma chave pública do chaveiro:
$ gpg --delete-keys <nr da chave>
Para remover uma chave privada do chaveiro:
$ gpg --delete-secret-keys <nr da chave>
Revogação de chaves
Para revogar uma chave:
$ gpg --gen-revoke <nr da chave> > <nr da chave>-revcert.asc
Alteração da passphrase de uma chave
Para alterar a frase senha de uma chave, utilize o comando:
$ gpg --edit-key <nr da chave> password
password é uma palavra que faz parte do comando e não representa uma string a ser substituída pela senha a ser utilizada. |
Para sair do ambiente de edição e salvar as alterações, digite “quit”.
Assinatura de uma chave pública alheia
Para assinar uma chave pública de outra pessoa, utilize o comando:
$ gpg --sign-key <nr da chave>
Caso você possua duas chaves e deseje especificar a chave que realizará a assinatura, utilize o comando:
$ gpg --sign-key <nr da chave>
Lembre-se de que o PGP (GPG) baseia-se em uma relação de confiança. Quanto mais assinaturas na sua chave, maior será o relação de confiança. |
Listar assinaturas em chaves
Para listar as chaves, mostrando as assinaturas de cada chave, utilize o comando:
$ gpg --list-sigs
Listar os fingerprints em chaves
Para listar as impressões digitais de cada chave (fingerprint):
$ gpg --fingerprint
Adição e remoção de identidades (uid) nas chaves
Para adicionar uma nova identidade (nome e e-mail) a uma chave pré-existente, realize os seguintes procedimentos:
- Execute o comando $ gpg --edit-key <nr_da_chave>.
- No prompt de comando, digite adduid e pressione ENTER.
- Forneça as informações solicitadas.
- Saia do ambiente de edição com quit.
Para remover uma identidade extra inserida em uma chave, realize os seguintes procedimentos:
- Execute o comando $ gpg --edit-key <nr_da_chave>.
- No prompt de comando, digite list e pressione ENTER.
- Na frente de cada nome e e-mail será mostrado um número entre parênteses. Digite uid nr, onde nr deverá ser substituído pelo número que representa a identidade a ser eliminada. Pressione o ENTER para confirmar.
- Digite deluid e pressione o ENTER para eliminar a identidade.
- Saia do ambiente de edição com quit.
Determinando a identidade primária de uma chave
Caso você adicione identidades (uid) a uma chave, você poderá querer estabelecer qual delas será a primária. Para tanto:
- Execute o comando $ gpg --edit-key <nr_da_chave>.
- No prompt de comando, digite list e pressione ENTER.
- Na frente de cada nome e e-mail será mostrado um número entre parênteses. Digite uid nr, onde nr deverá ser substituído pelo número que representa a identidade a ser tornada primária. Pressione o ENTER para confirmar.
- Digite primary e pressione o ENTER. Será pedida a senha da atual identidade primária.
- Saia do ambiente de edição com quit.
A identidade primária sempre será a primeira exibida dentro do ambiente de edição. Imediatamente antes do nome completo do dono, será mostrado um caractere ponto. |
Inserindo a sua foto na sua chave
A sua foto poderá ser inserida na sua chave. Isso, apesar de dispensável, ajudará na sua identificação. Siga os seguintes procedimentos:
- Crie uma foto JPG com até 288x240 pixels. Faça com que essa foto tenha, no máximo, 4 KB de tamanho. No meu caso, criei a foto em tons de cinza e com 155x140. No total, ela tem 2.4 KB. Veja a seguir:
O GPG só admite imagens JPG. Essa imagem não precisará estar com uma excepcional resolução. |
- A seguir, edite a sua chave com o comando:
$ gpg --edit-key <ID_da_sua_chave>
- Digite addphoto e ENTER.
- Informe o nome da foto. Poderá aparecer a seguinte mensagem:
gpg: no photo viewer set gpg: unable to display photo ID! Is this photo correct (y/N/q)?
- Digite y e ENTER para responder a mensagem anterior. Será pedida a sua senha da chave privada.
Repare que a foto, na verdade, é uma nova ID dentro da chave. É como uma subchave. |
- Digite quit e ENTER para sair.
Outras possibilidades
Para ver outras possibilidades de uso do comando gpg, utilize os comandos:
$ gpg --help $ man gpg
Servidores de chaves públicas na Internet
Há vários servidores de chaves públicas na Internet. A maioria dos grandes servidores sincronizam chaves entre si. Cinco bons exemplos de servidores são:
Para ver a relação dos servidores existentes, consulte o endereço http://sks-keyservers.net/status. |
Para encontrar outros servidores públicos, procure no Google por pgp public servers.
Para inserir uma chave em um servidor público, basta acessar o site do servidor (caso exista) e inserir a chave. Exemplo: http://pgp.mit.edu. Também é possível enviar a chave por intermédio de um comando. Exemplo:
$ gpg --keyserver subkeys.pgp.net --send-key <nr_da_chave>
Para buscar uma chave, utilize o comando:
$ gpg --keyserver <servidor> --recv-key <nr_da_chave>
Exemplo: para buscar a minha chave, utilize o comando:
$ gpg --keyserver subkeys.pgp.net --recv-key 8C45C1CC
É possível procurar chaves na Internet utilizando o Google. Exemplo de pesquisa: pgp pub fulano. Outra possibilidade é a de procurar por chaves dentro de um servidor, utilizando a sintaxe:
$ gpg --keyserver <servidor> --search-keys <nome ou e-mail ou domínio>
Exemplos:
$ gpg --keyserver subkeys.pgp.net --search-keys Eriberto $ gpg --keyserver subkeys.pgp.net --search-keys eriberto.pro.br
Imediatamente após a pesquisa, será possível incluir um dos resultados no chaveiro.
Há ainda uma outra possibilidade interessante: a de atualizar todas as chaves do seu chaveiro a partir de um servidor na Internet. Um exemplo:
gpg --refresh-keys --keyserver keyserver.noreply.org
Relação de confiança
O uso do PGP baseia-se em uma relação de confiança. Assim sendo, geralmente, uma chave pública deverá ser assinada pela chave privada de várias pessoas conhecidas. Esse processo deverá ser presencial, para garantir que não haja quebra da cadeia de confiança. Um exemplo clássico: uma pessoa envia a sua chave, por e-mail, para que outra assine. Como garantir que o receptor terá a certeza de que o emissor seja realmente a pessoa que ela diz ser?
Mais adiante será mostrado, de forma mais ampla e detalhada, o processo de assinatura de chaves.
Armazenamento em CD Card, Pen Drive e Smart Card
Geralmente, armazenamos o par de chaves e o respectivo certificado de revogação em pendrives, smart cards ou em um CD Card. O CD Card tem o tamanho de um cartão de crédito, uma capacidade de 50 MB de dados. A foto a seguir mostra um CD Card: As principais vantagens do CD Card são o baixo custo, o pequeno volume e a confiabilidade. Também poderá ser utilizado um smartcard (exatamente igual a um cartão de banco). Para isso, será necessária a utilização de uma gravadora de cartão. Os usuários necessitarão de leitoras de cartão. A pendrive será útil para que outras pessoas possam assinar a sua chave.
O processo para a assinatura de chaves de pessoas conhecidas
Cuidados fundamentais
Chaves alheias somente deverão ser assinadas se executados os seguintes procedimentos:
- Faça um contato físico com a pessoa cuja respectiva chave você irá assinar. Repito: você deverá estar frente a frente com a pessoa.
- Obtenha dessa pessoa os seguintes dados:
- Nome completo, como consta na chave;
- Endereço de e-mail, como consta na chave;
- O fingerprint da chave a ser assinada.
- Ainda, confira a identidade da passoa, mesmo que a conheça há muito tempo, por intermédio de um documento com foto. Verifique se o nome completo é idêntico ao fornecido. Geralmente, utilizamos carteira de identidade ou de motorista.
O uso do cartão de visita
É muito comum as pessoas confeccionarem cartões de visita já contendo o fingerprint. Isso facilita bastante o contato pessoal, pois evita a necessidade de anotar os dados no momento do encontro (acredite, isso dá trabalho). A seguir, um exemplo de cartão de visita com os dados básicos (além de outros):
Note que o cartão mostrado não difere de um cartão de visita comum, do tipo que você entregaria a qualquer pessoa. O único dado extra é o fingerprint. Ainda, o telefone celular foi desfigurado, pois este realmente é o meu cartão.
Você não precisa usar exatamente um cartão, apesar de ser elegante. A idéia é facilitar as coisas na hora de trocar dados com outras pessoas. Então, você pode imprimir seus dados (em forma de tabela) em uma folha de papel e recortar os quadrados. Veja um exemplo disso a seguir:
Execução da assinatura
De posse dos dados da pessoa que deseja a sua assinatura na chave pública dela, você deverá seguir alguns procedimentos para executar tal assinatura. A partir deste momento, toda a sua atenção deverá estar voltada para constante verificação da veracidade dos dados a serem manipulados.
Inicialmente, busque, em um servidor público, a chave pública a ser assinada:
$ gpg --keyserver subkeys.pgp.net --recv-key <ID_da_chave_a_ser_assinada>
A seguir, liste alguns dados da chave com o comando:
$ gpg --fingerprint <ID_da_chave_a_ser_assinada>
Confira atentamente o ID da chave, o fingerprint, o nome completo e o e-mail que forem mostrados. Uma vez conferidos os dados, assine a chave com o comando:
$ gpg --sign-key <ID_da_chave_a_ser_assinada>
ATENÇÃO: Nunca assine uma chave se não tiver adotado os cuidados fundamentais para realizar tal assinatura! |
Caso você tenha mais de uma chave e deseje escolher a chave que fará a assinatura, utilize a opção -u. Exemplo:
$ gpg -u <ID_da_chave_que_realizará_a_assinatura> --sign-key <ID_da_chave_a_ser_assinada>
Envio da chave assinada para o seu dono
Depois de assinada a chave, exporte-a em formato ASCII:
$ gpg -a --export <ID_da_chave_assinada> > nome.asc
Comprima a chave com GZIP para evitar que, no envio, a chave, por estar em ASCII, deixe de ser anexo e vire parte do texto:
$ gzip nome.asc
Envie, por e-mail, o arquivo .gz para o dono da chave.
Inserindo a chave assinada no chaveiro e no servidor público
Ao receber a chave assinada, o dono da mesma deverá importá-la e, a seguir, fazer upload para o servidor público. Essas ações irão forçar uma atualização de tal chave no chaveiro e no servidor.
Caso você seja o dono da chave e esteja recebendo-a, para importá-la, utilize o comando convencional:
$ gpg --import <arquivo_que_contém_a_chave>
Para enviar a chave assinada para o servidor, também utilize o comando convencional para esse tipo de ação:
$ gpg --keyserver subkeys.pgp.net --send-key <nr_da_chave>
Determinando a confiabilidade das chaves alheias
Após importar uma ou mais chaves para o seu chaveiro, você poderá, se quiser, determinar o grau de confiabilidade que você terá no dono delas, em relação a outras chaves. Exemplo: você pode dizer que confia plenamente nas chaves que Ana assina. Assim, quando você receber a chave de Beto, que foi assinada por Ana, terá motivos para confiar nessa chave, mesmo não conhecendo Beto. Algumas considerações importantes:
- Não é aconselhável confiar em uma chave alheia só porque determinada pessoa a assinou. Essa confiança ocorre, geralmente, em casos de emergência.
- É possível utilizar esse artifício com pessoas extremamente sérias e responsáveis, diminuindo o tamanho do seu chaveiro.
Existem o seguintes níveis de confiabilidade:
- Unknown: Não se sabe como a pessoa em questão procede ao assinar uma chave. Ainda não se pode observar a seriedade e responsabilidade dessa pessoa ao assinar chaves. Não se deve confiar nas assinaturas dessa pessoa em chaves alheias.
- None: Esta pessoa costuma assinar chaves sem certificar-se de que elas realmente são da pessoa que diz possuí-las. Não se deve confiar nas assinaturas dessa pessoa em chaves alheias.
- Marginal: Esta pessoa assina chaves de forma correta (faz as verificações físicas necessárias). É possível confiar nessa pessoa, caso seja extremamente necessário.
- Full: O usuário conhece muito bem sistemas criptográficos, é extremamente confiável e responsável. Qualquer chave assinada por esse usuário será extremamente confiável. É possível pensar em aceitar algo de outras chaves que tenham sido assinadas por essa pessoa.
Para determinara a confiabilidade de cada chave, execute o comando:
$ gpg --update-trustdb
Com isso, serão apresentadas as chaves, uma por uma, e você deverá selecionar uma das seguintes opções:
1 = I don't know or won't say | (= unknown) |
2 = I do NOT trust | (= none) |
3 = I trust marginally | (= marginal) |
4 = I trust fully | (= full) |
s = skip this key | (ignore esta chave) |
q = quit | (saia e volte para o prompt, ignorando as demais chaves) |
Uso do GnuPG para assinar e criptografar mensagens de e-mail
Os clientes de e-mail podem utilizar o GPG para assinar/criptografar mensagens. Para isso, existem alguns plugins.
Mozilla Thunderbird (ou Icedove) e o GnuPG
O Enigmail permite o uso do GnuPG no Mozilla Thunderbird, atual Icedove no Debian.
Para instalar o Enigmail no Debian, utilize o comando:
# apt-get install enigmail enigmail-locale-pt-br
O site do Enigmail é http://enigmail.mozdev.org.
MS Outlook Express e o GnuPG
O GPGOE permite o uso do GnuPG no Outlook Express. O site para download e documentação é http://winpt.cityofcambridge.net/gpgoe.html.
GMail, Mozilla Firefox (ou Iceweasel), FireGPG e o GnuPG
Isso mesmo! Há como usar o GnuPG no GMail ou em outro webmail qualquer, caso você esteja usando o Mozilla Firefox, atual Iceweasel no Debian. Basta utilizar a extensão FireGPG, que pode ser encontrada em http://firegpg.tuxfamily.org.
Assinando e criptografando arquivos
Ex: envio de uma topologia pelo google ou de um código para um amigo.
$ gpg -a --sign <arquivo>
ou
$ gpg --clearsign <arquivo>
Frontends gráficos
kgpg seahorse
Outros não testados: http://www.gnupg.org/(en)/related_software/frontends.html#gui.
Ferramentas especiais no Debian GNU/Linux
signing-party
gpg-key2ps
Ferramentas para MS Windows
Veja também
Links externos
Comentários, sugestões e controle de acessos
Por favor, deixe os seus comentários e sugestões sobre este artigo no meu Blog Técnico. Para isto, clique aqui.
Comentários
cat >>~/.gnupg/gpg.conf <
Command> showpref
[ultimate] (1). Test User (DO NOT USE)
Cipher: AES256, AES192, AES, CAST5, 3DES
Digest: SHA1, SHA256, RIPEMD160
Compression: ZLIB, BZIP2, ZIP, Uncompressed
Features: MDC, Keyserver no-modify
Command> setpref SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
Set preference list to:
Cipher: AES256, AES192, AES, CAST5, 3DES
Digest: SHA512, SHA384, SHA256, SHA224, SHA1
Compression: ZLIB, BZIP2, ZIP, Uncompressed
Features: MDC, Keyserver no-modify
Really update the preferences? (y/N) y
You need a passphrase to unlock the secret key for
user: "Test User (DO NOT USE) "
2048-bit RSA key, ID 8A4EA1C3, created 2009-05-06
pub 2048R/8A4EA1C3 created: 2009-05-06 expires: 2010-05-06 usage: SC
trust: ultimate validity: ultimate
[ultimate] (1). Test User (DO NOT USE)
Command> save
test@foo:~ $