DevSecOps

28 nov, 2011

Trabalhando com PGP e Mac OS X – Parte 01

Publicidade

Neste artigo, dividido em duas partes, será abordado como trabalhar com PGP e Mac OS X.

?

O PGP (iniciais para Pretty Good Privacy) é um programa de criptografia bastante seguro frequentemente utilizado, que usa uma chave de criptografia pública. Com o PGP, você pode criptografar informações tais como mensagens, documentos e arquivos, de forma que somente o destinatário possa decodificá-los e abri-los.

O objetivo deste artigo é capacitá-lo em PGP para que você possa operá-lo através de um terminal, e que se sinta familiar com sua operação.

Princípios da criptografia

Há dois tipos de criptografia, simétrica e assimétrica (também chamada de chave pública). A cripotografia simétrica usa uma chave para codificar e para decodificar mensagens. Frequentemente, a criptografia simétrica funciona muito bem, uma vez que há algoritmos muito robustos disponíveis, e que deixam os dados seguros rapidamente. Contudo, a criptografia simétrica tem o grave inconveniente de ser necessário transportar uma chave de forma segura ao destinatário. Considerando que o meio de transporte é a Internet, isso não é verdadeiramente possível.

Já a criptografia assimétrica usa duas chaves, uma pública e outra privada. Quando você usa criptografia assimétrica, uma chave pública é disponibilizada, e uma chave privada é mantida secreta. Mensagens que são criptografadas com sua chave pública podem ser decodificadas somente com sua chave privada. Dessa forma, você pode enviar e receber mensagens criptografadas para uma terceira pessoa, sem o inconveniente de ter que transportar a chave decodificadora por um meio seguro.

Outro benefício da criptografia assimétrica é que pares de chaves também podem ser usados para autenticar mensagens. Isso é feito criptografando dados com sua chave privada. No momento do recebimento de uma mensagem, o destinatário usará sua chave pública para decodificá-la. O processo de criptografar uma informação com uma chave privada com propósitos de autenticação chama-se criar uma assinatura digital.

Eu por exemplo tenho minha chave pública aqui e em múltiplos servidores de chaves públicas. Sempre que alguém deseja me enviar uma mensagem criptografada, ele usa minha chave pública para criptografá-la e sua chave privada para assiná-la. Uma vez que isso é feito, a única forma de decodificar a mensagem é usando minha chave privada, que mantenho em estrita segurança. No recebimento da mensagem criptografada, eu a decodifico com minha chave privada e a autentico com a chave pública do remetente.

Apresentadas as facilidades, vamos iniciar.

Instalando o software

1. O PGP vem com muitas implementações. Contudo, a que usaremos neste artigo é GPG (GNU Privacy Guard), que segue o padrão OpenPGP, é completamente grátis e oferece a facilidade do uso do instalador Mac OS X. Obtenha o instalador Mac GPG em sourceforge.

O que são implementações PGP?

O PGP já foi um produto comercial da PGP Incorporated. Contudo, percebendo que um mecanismo robusto e aberto de criptografia era tão importante, a comunidade de criptografia e a PGP Inc. trabalharam conjuntamente para fazer do OpenPGP um padrão. Através do OpenPGP, variações compatíveis de PGP puderam ser criadas por terceiros, e distribuídas livremente.

Aprenda mais sobre openPGP aqui.

2. Fique paranóico (opcional!). Você não estaria lendo isto se confiasse em todo mundo, então mantenha isso em mente. O próximo passo é verificar a MD5 checksum para o arquivo que você acabou de baixar.  Dessa forma, terá certeza de que o instalador veio do Mac GPG e não de um cara no meio do caminho. Vá para a imagem baixada e digite o seguinte (onde o nome do arquivo e o MD5 checksum combinam com sua versão particular):

 $ md5 GnuPG1.4.8.dmg | grep db046fd96e274dfe3c7021047561fb5a
MD5 (GnuPG1.4.8.dmg) = db046fd96e274dfe3c7021047561fb5a

O que eu fiz?

Arquivos podem ser processados para criar uma string relativamente única para eles, e tal algoritmo de processamento é MD5 (Machine Digest 5). Próximo ao link baixado para o instalador na webpage do Mac GPG, você também verá uma string de 32 caracteres, que é o MD5 digest para a imagem de disco disponível para download.

No terminal, usamos o comando md5 para processar GnuPG1.4.8.dmg.  Aplica-se então um grep para a string MD5 postada no website do Mac GPG. Se combinar, retornará o valor. Caso contrário, retornará vazio.

Aprenda mais sobre o MD5 aqui.

3. Agora que sabemos que a imagem de disco é legítima, podemos montá-la e instalar o Mac GPG. É um processo simples, porque é feito através de um wizard de instalação. Siga os passos e rapidamente você estará com o programa rodando.

Gerando uma chave

Agora que você tem o GPG instalado, começará a gerar o seu par de chaves e irá adicioná-lo a seu conjunto de chaves. Tudo isso será feito através do shell. Então, se prepare para um pouco de digitação.

1. Comece o processo para gerar seu par de chaves. Feito isso, você será solicitado a escolher entre três tipos de chaves, escolha o padrão DAS e o tipo Elgamal pressionando enter.

NOTA: Como esta é sua primeira vez gerando chaves, o GPG o alertará acerca da criação de um diretório ~/.gnupg e sair. Apenas dê o comando novamente e você estará pronto para prosseguir. 

$ gpg --gen-key
gpg (GnuPG) 1.4.8; Copyright (C) 2007 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) DSA and Elgamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
Your selection?

O que são DSA e Elgamal?

DSA (Digital Signature Algorithm) e Elgamal (também chamado ELG) são os algoritmos usados pelo GPG. DSA, como o nome sugere, é usado para autenticação, enquanto Elgamal é usado para criptografia.

Saiba mais sobre DSA aqui e Elgamal aqui.

2. Escolha o tamanho de sua chave de criptografia Elgamal (ELG-E). O GPG usa chaves de 1024 bit para DSA, mas permite que você escolha o comprimento de sua chave Elgamal. O comprimento padrão de 2048 bits deve estar completo, portanto pressione enter.

DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)

3. Escolha a data de expiração de seu par de chaves. A menos que você seja realmente paranóico, a escolha padrão de prazo indeterminado deve funcionar bem. Pressione enter.

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

4. Confirme que sua chave não irá expirar digitando “y” e pressionando enter.

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

5. Crie uma identidade para sua chave. Há três partes – seu nome, seu e-mail e comentários. O comentário para sua chave é opcional, e é geralmente usado quando você escolhe ter mais de um par de chaves para monitorar. Preencha suas informações, digite “O” e pressione enter. 

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) <heinrichh@duesseldorf.de>"
Real name: First and Last Name
Email address: name@domain.com
Comment: Mac GPG Tutorial
You selected this USER-ID:
"First and Last Name (Mac GPG Tutorial) <name@domain.com>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

6. Escolha sua passphrase. Para manter sua chave privada segura (alguém poderia abrir seu computador e ler), o PGP a criptografará com uma codificação simétrica. A passphrase que você dará será usada como a chave de criptografia. Todas as vezes que você quiser usar sua chave privada, o PGP lhe pedirá a passphrase. Se estiver correta, o PGP decodificará a sua chave privada e a usará. Escolha uma senha longa, uma frase por exemplo, e pressione enter. Você então será solicitado a confirmar sua passphrase. Faça isso e pressione enter de novo.

E se eu esquecer a passphrase?

Se senhas fossem facilmente quebradas, não seriam de utilidade. Se isso acontecer, sua única opção real é fazer um novo par de chaves.

Mais adiante neste artigo, falaremos sobre o processo de fazer a revogação de seu certificado, de forma que sua chave pública possa ser “desligada” se isso acontecer.

Aprenda mais sobre passphrases aqui.

7. O GPG então começará a exibir alguns caracteres enquanto gera o seu par de chaves. Durante esse período, o GPG também pedirá para que você use seu computador, digitando alguma coisa, movendo seu mouse, ou acessando seu HD. Isso tem o propósito de criar mais entropia, e ajuda a gerar uma chave melhor.

O que é entropia, e por que ela gera uma chave melhor?

Em termos computacionais, entropia é ser aleatório. Computadores na verdade não são muito bons em tomar decisões aleatórias, ao contrário das pessoas. Na medida em que você move o mouse e pressiona algumas teclas, você está fazendo com que seu computador processe informações ao acaso e que, dessa forma, gere um par de chaves mais robusto.

O processo aleatório é muito importante na geração de chaves criptografadas. Se houvesse um padrão para criar essas chaves, então haveria um padrão reverso que poderá ser usado para sua decodificação, o que seria um grande problema. Muito trabalho tem sido feito visando à criação de geradores de números aleatórios em sistemas de criptografia, mas pressionar o teclado ao acaso trará  provavelmente o mesmo resultado. Pelo menos até agora.

Aprenda mais sobre entropia aqui e geração de números aleatórios aqui.

8. Depois que o seu par de chaves é gerado, o GPG apresentará as informações seguintes na tela. O básico é que o GPG faça o seguinte:

  1. Crie uma base de dados confiável chamada ~/.gnupg/trustdb.gpg. Nessa database, o GPG guardará o quanto você confia nas chaves públicas que você recebe de outros.
  2. Assinale a sua chave pública com o mais alto nível de confiança, uma vez que ele assume que você confia completamente em uma chave pública que você mesmo gerou.
  3. Informe que uma chave pública e outra secreta (privada) foram criadas e autenticadas como sua.
  4. Passe pelos processos de como foi feita a validação. A validação está um pouco além do propósito deste artigo, mas você pode aprender mais aqui e aqui.
  5. Mostre a informação sobre a chave pública recém-criada, incluindo a sua impressão digital e a sub-chave (a ser discutida em breve).
gpg: ~/.gnupg/trustdb.gpg: trustdb created
gpg: key A7327C0E marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u
pub 1024D/A7327C0E 2008-02-14
Key fingerprint = 2291 60E9 A962 5C22 6E4F 1F20 120A 2881 A732 7C0E
uid First and Last Name (Mac GPG Tutorial) <name@domain.com>
sub 2048g/60ED8082 2008-02-14

9. Liste as chaves públicas em seu conjunto de chaves – que deve conter apenas a sua por enquanto. Tome nota especialmente da ID de sua chave (keyID) – A7327C0E neste exemplo – já que você precisará dela mais tarde. Você poderá sempre listar suas chaves novamente no futuro, se necessário.

$ gpg --list-keys
~/.gnupg/pubring.gpg
--------------------------------
pub 1024D/A7327C0E 2008-02-14
uid First and Last Name (Mac GPG Tutorial) <name@domain.com>
sub 2048g/60ED8082 2008-02-14

10. Finalmente, vá em frente e liste as chaves privadas em seu conjunto de chaves – no qual também você também deve ter apenas uma.

$ gpg --list-secret-keys
~/.gnupg/secring.gpg
--------------------------------
sec 1024D/A7327C0E 2008-02-14
uid First and Last Name (Mac GPG Tutorial) <name@domain.com>
ssb 2048g/60ED8082 2008-02-14

Na segunda e última parte deste artigo, veremos como gerenciar as chaves, a importação e verificação de chaves públicas e como codificar e decodificar mensagens.

?

Texto original disponível em http://www.robertsosinski.com/2008/02/18/working-with-pgp-and-mac-os-x/.