Gnu Privacy Guard Tutorial, Parte 1

Por Inoshiro

Este artigo será um tutorial sobre o uso do Gnu Privacy Guard para gerar suas próprias chaves públicas. Ele também irá discutir alguns dos princípios dos sistemas de chaves públicas.


O Gnu Privacy guard é uma implementação pública do padrão da RFC 2440 ("OpenPGP"). Ele está coberto pela Gnu Public License, e foi desenvolvido principalmente na Alemanha, um país conhecido pela sua criptografia não Orwelliana.

A criptografia de chave pública, conforme discutido em artigos anteriores, minimiza alguns dos problemas da criptografia simétrica. Entretanto, você ainda precisa verificar a autenticidade das chaves que você aceita. Existem duas soluções para este problema que foram implementadas.

A primeira são servidores de chaves centrais, mantidos por terceiros. Eles permitem que pessoas registrem suas chaves, revoquem as mesmas, e encontrem as chaves de outras pessoas em um índice. Dois destes servidores podem ser encontrados em pgp.net e keyserver.net. O pgp.net é um serviço mais antigo, relacionado principalmente ao PGP v5, enquanto o keyserver.net é um servidor de chaves OpenPGP mais novo.

A outra solução para a confiança é assinando as chaves por um terceiro. Digamos, por exemplo, que duas pessoas, Bob e Trent, confiam uma na outra, e trocaram chaves diretamente (talvez via disquetes). Alice, uma pessoa que Trent conheceu na Internet, conhece Bob a primeira vez no #kuro5hin. Bob não a conhece, mas Trent confia nela. Trent então assina a chave de Alice, após a mesma enviar via correio uma cópia da mesma. Bob aceita a chave assinada por Trent através da Internet, por que ele pode verificar a assinatura contra a cópia que foi trocada com segurança. Por causa disto, Bob, Alice e Trent podem criar uma rede de confiança. O único problema é, obviamente, o link mais fraco na cadeia. Se Bob assinar uma chave que ele não verificar de outra forma, podem acontecer problemas.

Como pode ser visto, a administração de chaves é uma parte importante do uso do seu sistema de chaves públicas. Para integrar-se ao serviço keyserver.net (que eu uso), acrescente a linha abaixo no seu arquivo ~/.gnupg/options:

keyserver search.keyserver.net

Se quiser, use outro serviço.

Agora que você tem o básico da administração de chaves públicas, você deve gerar um par de chaves para seu próprio uso. Existem muitas opções com a geração de chaves, incluindo o algoritmo e o comprimento de chaves. Se você quer somente assinar emails antes de enviar, para garantir que ele venha de você, um comprimento de chave de 1024 bits está bom. Para trocas mais importantes, como a chave para uma mensagem criptografada, eu recomendo um comprimento de 1024. Eu tenho dois pares de chaves, um de 1024 bits e outro de 4096 bits. A chave menor é para uso genérico, enquanto a chave mais longa é para segurança especial.

O Gnu Privacy Guard, como todas as outras implementações do PGP que eu conheço, armazena as chaves em keyrings. O keyring privado provavelmente vai ter apenas tua chave pública, enquanto o keyring público armazenará todas as chaves públicas que você tem (incluindo a sua). O keyserver central mencionado anteriormente pode ser pensado como um enorme keyring público que é acessível ao público.

O primeiro passo para ter seu próprio par de cahves, é instalar o Gnu Privacy Guard. A instalação é padrão, se você está acostumado a instalações a partir do código fonte. Se você é novo na instalação a partir de fontes, existe um roteiro explicando como fazer.

Uma vez que você tenha instalado o gpg, siga estes passos: gpg --gen-key. Este comando irá apresentar um menu perguntando que tipo de algoritmo queres.

   (1) DSA and ElGamal (default)
   (2) DSA (sign only)
   (4) ElGamal (sign and encrypt)
Your selection?

DSA, também conhecido como Digital Signature Algorithm, é um algoritmo que pode ser utilizado para assinar mensagens, enquanto o ElGamal é útil para criptografar bem como para assinaturas (uma boa discussão das opções de criptografia está disponível aqui).

O default é suficiente, apesar que qualquer comprimento de chave superior a 1024 bits será ignorado pelo algoritmo DSA (ou seja, sua chave ElGamal usará 2048 bits, mas a chave DSA irá usar apenas 1024). Isto acontece por que as chaves DSA não podem ser maiores que 1024 bits, apesar de poderem ser tão pequenas quanto 512 bits (mas isto não é muito útil em uma configuração no mundo real).

A seguir, você escolhe o comprimento de sua chave.

DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
              minimum keysize is  768 bits
              default keysize is 1024 bits
    highest suggested keysize is 2048 bits
What keysize do you want? (1024)

O problema com chaves maiores é que elas irão esvaziar o pool de entropia rapidamente durante a geração da chave. Você pode contornar este problema tendo várias pessoas logadas e trabalhando ao mesmo tempo, o que alimenta o pool de entropia nos sistemas Linux (e outros). Para esta chave de exemplo, irei deixar o valor padrão de 1024 bits.

Nota: um pool de entropia é utilizado pela função geradora de números aleatórios na maioria do sistemas operacionais. É importante manter a mesma randômica por que chaves geradas a partir de númers não-randômicos podem ser craqueadas muito mais facilmente. O Linux (e outros sistemas como o OpenBSD) mantém o pool de entropia alimentado pela monitoraão da entrada do dispositivo randômico em um sistema computacional: o humano :-)

Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0)

Se você pensa que não irá utilizar muito a chave, mas quer poder utilizar a mesma a qualquer momento, não configure a mesma para expirar. Se você é paranóico quando se trata de segurança, você pode querer que suas chaves expirem após um período (1 ano a 5 anos dependendo do quanto você usa a chave). Lembre-se que você sempre pode expirar manualmente as chaves a qualquer momento utilizando a revogação de chaves.

Independente da configuração de expiração que você escolheu, o GnuPG irá pedir que você confirme a mesma.

Key does not expire at all
Is this correct (y/n)?

Em seguida, você deve entrar seu user ID para a chave.

You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) "
Real name:
Email address:
Comment:

Se você entrou os dados conforme segue:

Real name: My name
Email address: myemail@mysite.dom
Comment: me

Seu ID será: My name (me)

O GnuPG irá então permitir que você corrija qualquer erro, gerar a chave, ou abortar.

O próximo passo será sua passphrase (senha de criptografia). É muito, muito importante que você escolha a mais forte que puder se lembrar. Sem esta passphrase, qualquer um que puder copiar suas chaves PGP poderá se fazer passar por você (como seu sysadmin local em um sistema compartilhado). Se seu sistema for invadido, uma passphrase no seu key ring pode ser a única coisa que pare o cracker de se fazer passar por você. O problema é que se você esquecer sua passphrase, não poderá utilizar tua própria chave.

Após ito, o GnuPG irá gerar suas chaves. Você pode ver uma mensagem como esta:

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Você verá então alguns caracteres surgirem na tela. Se o GnuPG não conseguir obter caracteres randômicos suficientes, ele apresentará a seguinte mensagem:

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need NN more bytes)

Não entre em pânico! Apenas rode alguns programas, aguarde alguns usuários logarem no sistema e comecem a trabalhar, etc. Se você tiver instalado o egd (o entropy gathering daemon [mais informações no fim desta página]), toque alguma música no microfone.

Uma vez que o GnuPG estiver pronto, você deverá ver a seguinte mensagem:

public and secret key created and signed.

Parabéns. Você tem agora um par de chaves. Uma é privada, e outra é pública. Pense nelas como uma certidão de nascimento, cartão de biblioteca, e carteira de motorista em um mesmo documento.

Você vai querer distribuir sua chave pública, de forma que as pessoas possam enviar mensagens para você. Para extrair sua chave pública, use o comando: gpg -a --export

A opção -a informa ao gpg para fazer exportação em formato ASCII, e a opção --export é a ação a ser tomada. Se você tiver mais de um par de chaves, você pode escolher qual será exportada descobrindo qual o ID da chave desejada (via gpg --list-keys) e escrevendo o mesmo após a linha export (gpg -a --export 621CC013).

Faça um pipe da saída para um arquivo. Bons locais para colocar sua chave pública incluem ~/.pgpkey (outros usuários poderão fazer um finger em você para obter sua chave), sua informação de usuário do kuro5hin, e um servidor público de chaves (como o keyserver.net).

A seguir você pode querer gerar um certificado de revogação,e colocar o mesmo em um lugar seguro (junto do backup do seu keyring).

gpg -a --gen-revoke [keyid]

Onde -a significa saída ASCII, --gen-revoke escolhe a geração de uma revogação de certificado, e o [keyid] é o número da chave PGP listada próximo ao tamanho da chave no comando gpg --list-keys.

Se seu disco rígido pifar ou se alguém roubar suas chaves e craquear sua pasphrase, você ainda assim pode revogar sua chave. Um pequeno cofre é um bom lugar para guardar o disquete (ou CD queimado) que contenha uma cópia de suas chaves e revogação de certificado. Certifique-se de armazenar as chaves e certificados em formato ASCII. Diferentes versões do PGP/OpenPGP utilizam formatos binários diferentes e podem não ser compatíveis.

Na próxima semana, vou mostrar como assinar mensagens, assinar as chaves de outras pessoas, e falar sobre alguns programas que podem ser usados com o gpg.

Discussão completa: http://www.kuro5hin.org/story/2000/5/1/17058/47630


Todas as marcas e copyrights nesta página pertencem a suas respectivas companias. O resto © 2000 - 2001 Kuro5hin.org Inc.

1