Gentoo Logo

Aviso : Este documento não é válido e não é mais mantido.


Guia do usuário de GnuPG do Gentoo

Conteúdo:

1.  Introdução

O que você receberá deste guia

Este guia presume que você está familiarizado com criptografia com chaves-públicas, criptografia e assinaturas digitais. Se este não for o caso pule para Criptografia de chaves públicas ou veja o Manual do GnuPG, capítulo 2, e volte aqui.

Este guia irá ensinar você como instalar o GnuPG, como criar seu par de chaves, como adicionar chaves a seu círculo de chaves, como enviar sua chave pública para um servidor de chaves e como assinar, criptografar, verificar e decodificar mensagens que você mandar ou receber. Você também aprenderá como criptografar arquivos em seu computador local para impedir que pessoas obtenham seus conteúdos.

Instalação do software necessário

Para começar você precisa fazer emerge gnupg. Muitas aplicações, hoje em dia, tem algum tipo de suporte para gpg, então ter crypt na sua variável de USE é provavelmente uma boa idéia. Se você quiser usar um cliente de e-mail capaz de usar gnupg você pode usar pine (emerge pinepgp), mutt (emerge mutt), Mozilla/Netscape Mail, evolution (evolution é uma versão parecida com o Microsoft Outlook para GNOME) e o próprio KMail do KDE (o KMail faz parte do pacote kdepim).

Kgpg pode ser interessante se você usa KDE. Este pequeno programa permite gerar pares de chaves, importar chaves de arquivos ASCII, assinar chaves importadas, exportar chaves e algumas outras funções.

2.  Gerando sua chave e adicionando chaves ao seu círculo de chaves públicas

Criando sua chave

Para criar sua chave, simplesmente rode gpg --gen-key. A primeira vez que você rodar, ele irá criar alguns diretórios; rode novamente para criar as chaves:

Listagem de código 2.1: processo de geração de chave

$ gpg --gen-key
gpg (GnuPG) 1.0.7; Copyright (C) 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Please select what kind of key you want:
   (1) DSA and ElGamal (default)
   (2) DSA (sign only)
   (4) ElGamal (sign and encrypt)
   (5) RSA (sign only)
   Your selection? 1

Aqui você pode escolher o tipo de chave que você quer usar. A maior parte dos usuários usa o padrão DSA e ElGamal. A seguir vem o tamanho da chave - lembre-se que maior é melhor, mas não use um tamanho maior que 2048 com chaves DSA/ElGamal. Geralmente 1024 é mais que o suficiente para email normal.

Depois do tamanho vem a data de expiração. Aqui quanto menor melhor, mas a maior parte dos usuários cria uma chave que nunca expira ou algo como 2 ou 3 anos.

Listagem de código 2.2: Escolhendo o tamanho 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) 2048
Requested keysize is 2048 bits       
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) 0
Key does not expire at all

Agora está na hora de digitar informações pessoais sobre você. Se você vai mandar sua chave pública para outras pessoas você tem que usar seu endereço de e-mail real aqui.

Listagem de código 2.3: Digitando informação de usuário

Is this correct (y/n)? y
                        
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) <heinrichh@duesseldorf.de>"

Real name: John Doe
Email address: john@nowhere.someplace.flick
Comment: (The Real John Doe)
You selected this USER-ID:
"John Doe (The Real John Doe) <john@nowhere.someplace.flick>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O 
You need a Passphrase to protect your secret key.    

Enter passphrase: 

Agora digite sua senha de chave duas vezes. É uma boa idéia usar uma boa senha. Se alguém obtiver sua chave privada e descobrir sua senha, eles podem mandar mensagens assinadas por "você" fazendo com que todos acreditem que você mandou os e-mails.

Então, o GnuPG irá gerar sua chave. Movimentar o mouse ou ter uma mp3 tocando no fundo deixará o processo mais rápido porque gera dados aleatórios.

Criando um certificado de revogação

Importante: Esta parte é muito importante e você deve fazê-la AGORA.

Depois de criar suas chaves você deve criar um certificado de revogação. Fazê-lo permite que você revogue sua chave caso algo de ruim aconteça com sua chave (alguém obtenha sua chave/senha).

Listagem de código 2.4: Gerando um certificado de revogação

$ gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub  1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick>
sub  2048g/96D6CDAD 2002-12-08

$ gpg --output revoke.asc --gen-revoke 75447B14

sec  1024D/75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhere.someplace.flick>

Create a revocation certificate for this key? y
Please select the reason for the revocation:   
  0 = No reason specified
  1 = Key has been compromised
  2 = Key is superseded
  3 = Key is no longer used
  Q = Cancel
(Probably you want to select 1 here)
Your decision? 1
Enter an optional description; end it with an empty line:
> Someone cracked me and got my key and passphrase
>
Reason for revocation: Key has been compromised
Someone cracked me and got my key and passphrase
Is this okay? y

You need a passphrase to unlock the secret key for
user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"
1024-bit DSA key, ID 75447B14, created 2002-12-08

ASCII armored output forced.
Revocation certificate created.

Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable.  But have some caution:  The print system of
your machine might store the data and make it available to others!

O comando gpg --list-keys lista chaves em seu círculo de chaves públicas. Você pode usá-lo para ver a ID de sua chave para que você possa criar o certificado de revogação. É uma boa idéia copiar todo o diretório .gnupg e o certificado de revogação (em ASCII armor - revoke.asc) para algum meio seguro (dois disquetes ou um CD-R que você guarde em lugar seguro). Lembre-se que o revoke.asc pode ser usado para revogar suas chaves e torná-las inúteis no futuro.

Nota: Se você tiver vários endereços de e-mail que você quer usar com esta chave, você pode rodar gpg --edit-key SUA_ID e então use o comando adduid. Seu nome será pedido, e-mail e comentário da segunda ID que você irá usar.

Exportando chaves

Para exportar sua chave, você digita gpg --armor --output john.asc --export john@nowhere.someplace.flick. Você pode quase sempre usar sua ID de chave ou algo que identifica a chave (aqui nós usamos um endereço de e-mail). O John agora tem um john.asc que ele pode mandar para seus amigos, ou colocar em sua página da web para que as pessoas possam se comunicar seguramente com ele.

Importando chaves

Para adicionar arquivos a seu círculo de chaves públicas, você primeiro deve importá-los, e então verificar a fingerprint da chave. Depois que você verificou a fingerprint você deve validar.

Nota: Você deve ser cuidadoso na hora de verificar chaves. Este é um dos pontos fracos da criptografia de chaves públicas.

Agora vamos adicionar a chave pública de Luis Pinto (um amigo meu) a nosso círculo de chaves públicas. Depois de ligar para ele e perguntar qual a fingerprint de sua chave, eu comparo a fingerprint com a saída do comando fpr. Já que a chave é autêntica, ele é adicionada ao círculo de chaves públicas. Neste caso particular, a chave do Luis irá expirar em 2003-12-01, então sou perguntado se minha assinatura de sua chave deve expirar ao mesmo tempo.

Listagem de código 2.5: Importando e assinando chaves

$ gpg --import luis.asc
gpg: key 462405BB: public key imported
gpg: Total number processed: 1
gpg:               imported: 1
$ gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub  1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick>
sub  2048g/96D6CDAD 2002-12-08

pub  1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@student.dei.uc.pt>
uid                            Luis Pinto <lmpinto@dei.uc.pt>
sub  4096g/922175B3 2002-12-01 [expires: 2003-12-01]

$ gpg --edit-key lmpinto@dei.uc.pt
gpg (GnuPG) 1.0.7; Copyright (C) 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.


gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
pub  1024D/462405BB  created: 2002-12-01 expires: 2003-12-01 trust: -/-
sub  4096g/922175B3  created: 2002-12-01 expires: 2003-12-01
(1)  Luis Pinto <lmpinto@dei.uc.pt>
(2). Luis Pinto <lmpinto@student.dei.uc.pt>

Command> fpr
pub  1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@dei.uc.pt>
             Fingerprint: F056 3697 ADE3 CF98 B80B  8494 0AD3 E57B 4624 05BB
     
Command> sign
Really sign all user IDs? y
                           
pub  1024D/462405BB  created: 2002-12-01 expires: 2003-12-01 trust: -/-
             Fingerprint: F056 3697 ADE3 CF98 B80B  8494 0AD3 E57B 4624 05BB

     Luis Pinto <lmpinto@dei.uc.pt>
     Luis Pinto <lmpinto@student.dei.uc.pt>

This key is due to expire on 2003-12-01.
Do you want your signature to expire at the same time? (Y/n) Y
How carefully have you verified the key you are about to sign actually belongs
to the person named above?  If you don't know what to answer, enter "0".

   (0) I will not answer. (default)
   (1) I have not checked at all.
   (2) I have done casual checking.
   (3) I have done very careful checking.

   Your selection? 3
Are you really sure that you want to sign this key
with your key: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"

I have checked this key very carefully.

Really sign? y
              
You need a passphrase to unlock the secret key for
user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"
1024-bit DSA key, ID 75447B14, created 2002-12-08

Command> check
uid  Luis Pinto <lmpinto@dei.uc.pt>
sig!3       462405BB 2002-12-01   [self-signature]
sig!3       75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhe
uid  Luis Pinto <lmpinto@student.dei.uc.pt>
sig!3       462405BB 2002-12-01   [self-signature]
sig!3       75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhe

3.  Trocando chaves com servidores de chaves

Enviando chaves para servidores de chaves

Agora que você tem sua chave, provavelmente é uma boa idéia mandá-la para um servidor de chaves mundial. Existem vários servidores de chaves no mundo e a maioria deles troca chaves entre si. Aqui nós vamos mandar a chave do Luis para o servidor pgp.mit.edu. Isto usa HTTP, então se você precisa usar um proxy para tráfico HTTP não se esqueça de configurá-lo (export http_proxy=http://proxy_host:port/). O comando para mandar a chave é: gpg --keyserver pgp.mit.edu --keyserver-options honor-http-proxy --send-key 75447B14 onde 75447B14 é a ID da chave. Se você não precisa de um proxy de HTTP, você pode tirar a opção --keyserver-options honor-http-proxy.

Você também pode mandar as chaves de outras pessoas que você assinou para o servidor de chaves. Nós poderíamos mandar a chave do Luis Pinto para o servidor de chaves. Desta maneira alguém que confiar em sua chave pode usar a mesma assinatura que você colocou para confiar na chave do Luis.

Obtendo chaves dos servidores de chaves

Agora vamos procurar a chave do Gustavo Felisberto e adicioná-la ao círculo de chaves públicas do John Doe (caso você não tenha percebido Gustavo Felisberto é o autor deste guia :) ).

Listagem de código 3.1: Procurando chaves em servidores de chaves

$ gpg --keyserver pgp.mit.edu --keyserver-options honor-http-proxy --search-keys humpback@felisberto.net
gpg: searching for "humpback@felisberto.net" from HKP server pgp.mit.edu
Keys 1-5 of 5 for "humpback@felisberto.net"
(1)Gustavo Felisberto (apt-get install anarchy) <humpback@felisberto.net> 1024
  created 2002-12-06, key B9F2D52A
(2)Gustavo Felisberto <humpback@altavista.net> 1024
  created 1999-08-03, key E97E0B46
(3)Gustavo A.S.R. Felisberto <humpback@altavista.net> 1024
  created 1998-12-10, key B59AB043
(4)Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024
  created 1998-08-26, key 39EB133D
(5)Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024
  created 1998-06-14, key AE02AF87
  Enter number(s), N)ext, or Q)uit >1
gpg: requesting key B9F2D52A from HKP keyserver pgp.mit.edu
gpg: key B9F2D52A: public key imported
gpg: Total number processed: 1
gpg:               imported: 1

Como você pode ver da resposta do servidor eu tenho algumas chaves enviadas ao servidor de chaves, mas atualmente eu só uso a B9F2D52A. Agora o John Doe pode pegá-la e assiná-la se ele confiar nela.

4.  Usando um agente de GPG

O que é um agente de GPG?

Existem casos, na hora de trabalhar com certas aplicações, onde você usar sua chave de GPG muito freqüentemente, o que significa que você tem que digitar sua senha muitas vezes. Várias aplicações costumavam suportar um mecanismo de cachê de senhas para facilitar a vida dos usuários, o que todavia não permitia o compartilhamento do cachê através de programas (quanto seguro deve ser?) e forçava as aplicações a reinventar a roda várias vezes.

Um agente de GPG é uma aplicação separada que o GPG usa para fazer cachê de uma senha de um modo padrão e seguro. Isto permite que aplicações usem GPG concorrentemente: se você entrar sua senha quando estiver trabalhando em uma aplicação, a outra aplicação pode trabalhar com GPG sem reiterar o pedido da senha para destravar a chave - o agente de GPG é configurado para permitir isso, obviamente.

O Gentoo fornece algumas aplicações de agente de GPG. app-crypt/gpg-agent pode ser considerado o padrão de referência, e será a que usaremos neste documento.

Instalando e configurando gpg-agent e pinentry

Você deve instalar o gpg-agent, obviamente, e também pinentry, que é uma aplicação de ajuda que o gpg-agent usa para pedir uma senha em uma janela gráfica. Isto vem em três sabores: ele pode abrir uma janela usando as bibliotecas gtk+, Qt, ou curses (dependendo a opção de USE que você especificar na hora de fazer emerge dele).

Listagem de código 4.1: Instalando gpg-agent e pinentry

# emerge gpg-agent pinentry

A seguir, crie um arquivo chamado ~/.gnupg/gpg-agent.conf e entre as seguintes linhas que definem a duração padrão de uma senha (por exemplo, 30 minutos) e a aplicação a ser chamada quando a senha deve ser pedida pela primeira vez (por exemplo, a versão Qt do pinentry).

Listagem de código 4.2: Editando o ~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-qt
no-grab
default-cache-ttl 1800

Agora configure o GnuPG para usar um agente quando necessário. Edite o ~/.gnupg/gpg.conf e adicione a seguinte linha:

Listagem de código 4.3: Configurando GnuPG para usar um agente de GPG

use-agent

Seu sistema está (quase) pronto para usar o agente de GPG.

Iniciando o agente de GPG automaticamente

Se você usar o KDE como ambiente gráfico, edite /usr/kde/3.x/env/agent-startup.sh (para todo sistema) ou ~/.kde/env/gpgagent.sh (usuário local) e adicione o seguinte comando para que o KDE carregue automaticamente o agente de GPG:

Listagem de código 4.4: Fazer o KDE carregar o agente de GPG automaticamente

eval "$(gpg-agent --daemon)"

Se você usar um ambiente gráfico diferente, coloque a linha (a mesma mencionada acima) em ~/.xinitrc (se você usar startx) ou ~/.xsession (se você usar XDM/GDM/KDM/...).

5.  Trabalhando com documentos

Criptografando e assinando

Vamos agora dizer que você tem um arquivo que você quer mandar para o Luis. Você pode criptografá-lo, assiná-lo, ou criptografá-lo e assiná-lo. Criptografar significa que só o Luis poderá abrir o arquivo. A assinatura diz para o Luis que foi realmente você que criou o arquivo.

Os próximos três comandos farão isso, criptografar, assinar e criptografar/assinar.

Listagem de código 5.1: Criptografando e assinando arquivos

$ gpg --output doc.gpg --encrypt --recipient lmpinto@dei.uc.pt doc_to_encrypt
$ gpg --output doc.gpg --sign --recipient lmpinto@dei.uc.pt doc_to_sign
$ gpg --output doc.gpg --encrypt --sign --recipient lmpinto@dei.uc.pt doc_to_encrypt_and_sign

Isto irá criar os arquivos binários. Se você deseja criar arquivos ASCII, simplesmente adicione um --clearsign ao começo do comando.

Decodificando e verificando assinaturas

Suponha que você tenha recebido um arquivo que está criptografado para você. O comando para decodificá-lo é gpg --output document --decrypt encrypted_doc.gpg. Isto irá decodificar o documento e verificar a assinatura (se houver uma).

Funções avançadas

Existem algumas funções avançadas úteis no GnuPG. Para encontrá-las, abra o arquivo ~/.gnupg/gpg.conf.

Listagem de código 5.2: ~/.gnupg/gpg.conf

#keyserver x-hkp://pgp.mit.edu
#keyserver-options auto-key-retrieve include-disabled include-revoked

Procure as duas linhas acima e descomente-as. Assim toda vez que o GnuPG precisar verificar a assinatura e não encontrar a chave pública no círculo de chaves públicas local, ele irá contactar o servidor de chaves em pgp.mit.edu e tentar obtê-la de lá.

Outro comando útil é o gpg --refresh-keys. Ele irá contatar o servidor de chaves definido no arquivo de opções e carregar as chaves públicas em seu círculo local de chaves de lá, procurando por chaves revogadas, novas id's, novas assinaturas das chaves. Você provavelmente deve rodar isso uma vez ou duas por mês para ser notificado se alguém revogar sua chave.

6.  Interfaces do GnuPG

Sobre assinaturas de e-mail

95% das vezes você irá usar o GnuPG com e-mail, assinando/criptografando suas mensagens de saída e lendo mensagens assinadas/criptografadas. É simplesmente justo que fale disso primeiro.

Existem dois jeitos de assinar/criptografar um email com GnuPG, o jeito antigo e o jeito novo :). No jeito antigo as mensagens apareciam em texto puro, sem nenhuma formatação possível e os arquivos anexados seriam sem assinatura/criptografia, aqui está um exemplo de uma mensagem assinada do modo antigo:

Listagem de código 6.1: Uma assinatura de texto puro

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Test message

-----BEGIN PGP SIGNATURE-----
Version: PGPfreeware 6.5.8 for non-commercial use

iQA/AwUBP8461jMX0745gR7AEQIEOwCg011GbufXO3ED3FkLWXmfzg7xm1cAoJD0
0EU3Kd2EKNCqataEqM5qjpPs
=LchZ
-----END PGP SIGNATURE-----

Mensagens deste jeito não servem muito no mundo de hoje, onde temos interfaces gráficas úteis e leitores de e-mail que entendem html.

Para resolver isso uma adição ao MIME (Multipurpose Internet Mail Extensions) foi criada. Ela adiciona um campo ao e-mail que diz ao leitor de correio que o conteúdo inteiro da mensagem está assinado e/ou criptografado. O problema disso é que nem todos leitores de correio tem suporte. E alguns inclusive alteram o conteúdo, o Outlook da Microsoft é famoso por não funcionar com isso.

Kgpg

Kgpg é uma interface gráfica para o GnuPG. Na tela principal você pode colar o texto que você deseja assinar ou criptografar, e você também pode colar o texto ASCII armored que você deseja decodificar.


Figura 6.1

Fig. 1: janela principal do kgpg

Nesta imagem você pode ver a janela principal do Kgpg com texto ASCII armored e criptografado. Daqui você pode decodificá-lo (você terá que digitar sua senha), criptografar outros arquivos, colar o próximo texto para assinar...


Figura 6.2

Fig. 2: janela de gerenciamento de chaves do kgpg

Agora você pode ver a janela de gerenciamento de chaves. Daqui nós vemos nossa chave boa para John Doe. As duas chaves confiadas de Gustavo e Luis, e a chave não-confiável de Daniel Robbins (Eu ainda não liguei para verificar sua fingerprint :) ).

Seahorse

O Seahorse é uma interface gráfica de GnuPG para o desktop do Gnome. O software está em rápida evolução, mas ainda não tem várias funções importantes que podem ser encontradas no Kgpg ou na versão de linha de comando.

Mozilla Enigmail

As versões do Mozilla 1.0 e superiores têm o Enigmail, um plug-in para o cliente de e-mail que é bem simples de configurar. Você só precisa ir em Preferências -> Privacidade & Segurança -> Enigmail. Então digite sua chave, e-mail e pronto.

E-Mails que vierem com uma assinatura pgp ou gpg não-confiáveis serão marcadas com uma caneta quebrada. Outros que tem boas assinaturas irão aparecer com uma caneta reta. O Enigmail até tem a capacidade de obter chaves dos servidores de chaves, mas se ele tiver problemas ele irá mostrar algumas mensagens bem estranhas (mas você ainda se lembra de como usar a linha de comando, certo?).

KMail

Se você tiver a variável de USE crypt configurada, o KMail será compilado com suporte a gpg, e poderá criptografar e decodificar correio PGP em linha automaticamente bem como criptografar correio OpenPGP/MIME. Se você quiser decodificar correios OpenPGP/MIME também (provavelmente sim) você precisar estar rodando um agente de GPG (veja Usando um agente de GPG).

Você pode verificar se o KMail está configurado adequadamente indo em Configurações, Configurar KMail, Segurança, Backends de Crypto. Você deve ver um backend baseado em GpgME listado e você deve podar marcar a caixa de verificação de OpenPGP. Se estiver listado mas não selecionável, clique em Escanear novamente. Se o backend baseado em GpgME ainda não estiver selecionável, o KMail não está funcionando devidamente.

Sylpheed-Claws

Este é o leitor de e-mail que eu uso. Ele é muito rápido com grandes caixas de correio, tem todas as funções úteis que alguém pode querer em um leitor de e-mail e funciona muito bem com gpg. O único problema é que não funciona com assinaturas de PGP antigas, então quando você receber esse tipo de correio você terá de verificá-los manualmente.

Para usar sua chave de gpg com o Sylpheed-Claws simplesmente vá em configuração de conta e selecione a orelha privacidade. Uma vez lá escolha a chave a usar, provavelmente a maior parte dos usuários irá usar a chave padrão.

7.  Criptografia com chaves públicas

Criptografia com chaves públicas básica

O conceito de criptografia com chaves públicas foi originalmente inventado por Whitfield Diffie e Martin Hellman em 1976. Quando eu ouvi as palavras "chave pública" e "criptografia" na mesma frase em 1993 eu pensei comigo mesmo que seria impossível fazer uma coisa assim. Nesses dias não havia Internet (bem, havia, mas não para mim) então eu fui para a biblioteca pública e pedi livros sobre criptografia. Devo dizer que eu tinha 16 anos na época, então a bibliotecária olhou-me espantada e trouxe-me um livro para crianças sobre cifras de substituição (o tipo onde você troca uma letra por outra como a famosa Caesar Cypher ou ROT-13 (B Tragbb é qrznvf, r ibpê fnor dhr fvz cbedhr ibpê rfgá yraqb vffb.), (faça emerge rotix se você não consegue ler o texto). Eu fiquei muito irritado com isso e comecei a procurar mais informações. É bom ter matemáticos na família, porque logo que eu falei com um deles eu fui introduzido a um novo mundo.

E agora um pouco de matemática:

Listagem de código 7.1: Conceitos matemáticos

Definições:

1- Um número primo é um número positivo inteiro que só é divisível por 1 e
por si mesmo (o resto da divisão é 0).
Os primeiros 8 números primos são 1,2,3,5,7,11,13,17

Teorema (sem prova aqui)
1- Para qualquer número não-primo positivo inteiro é possível dividi-lo como o produto
de números primos, e o produto é singular.
4=2*2
6=2*3
8=2*4=2*2*2
10=2*5
12=2*6=2*2*3

"Fatos":
1- É matematicamente fácil multiplicar dois inteiros grandes
2- É difícil achar os fatores primos de um dado inteiro positivo.

Se eu der a você o número 35 e disser-lhe que o número é o produto de dois números primos é fácil descobrir que são 5 e 7. Mas se eu disser o mesmo para 1588522601 você gastará bastante tempo (ou ciclos de CPU) para descobrir que era 49811*31891. E se o número for realmente muito grande a tarefa torna-se "impossível". Então agora eu darei ao mundo meu grande número que o produto de dois primos que sei algo sobre o número que ninguém mais sabe.

Esta é a base da criptografia de chaves públicas (PKC) atualmente. Como um exemplo (não-realista), eu posso dar meu número para alguém e a pessoa irá usá-lo para criptografar uma mensagem para mim. O alguém pode ver a mensagem criptografada, porque eu sou a única pessoa que sabe um atalho para lê-la, mas o alguém terá que primeiro "dividir" o grande número para poder ler a mensagem, e é um "fato" que impossível fazê-lo em um curto período de tempo (os métodos de hoje e os computadores mais rápidos do mundo levariam milhares de anos para fazê-lo). Nesta configuração os dois grandes números primos seriam chamados de CHAVE PRIVADA, e o grande número não primo é a CHAVE PÚBLICA.

Na prática isso não é 100% preciso com a realidade, mas dará uma boa idéia para o iniciante. Para mais informações veja hack.gr sobre o protocolo Diffie-Hellman. Para mais informações ainda vá para a biblioteca pública e pegue uma cópia do "Manual de criptografia aplicada" por Alfred J. Menezes, Paul C. van Oorschot e Scott A. Vanstone, o livro também está disponível online gratuitamente no site acima.

Uma conseqüência do acima é que se você cifrar uma mensagem para mim, e você perder a mensagem original sem cifras você não poderá mais obtê-la da mensagem com cifras.

Assinaturas

Nós já vimos como alguém pode mandar-nos uma mensagem cifrada se eles tiverem nossa chave pública. Mas como nós sabemos se o autor da mensagem é realmente quem ele diz ser? Ou em outras palavras: se eu receber um e-mail de você como eu realmente sei que foi você e não alguém dizendo ser você?

Lembra quando eu disse que o PKC não era tão simples como eu disse? A idéia é que quando você cifrar uma mensagem para mim você assina com sua chave privada para que, quando eu recebê-la, eu posso primeiro usar sua chave pública para verificar a assinatura e então usar minha chave privada para decifrar a mensagem. Como você pode ver nós não podemos fazer isso não configuração que eu descrevi anteriormente.

Também muito importante, para assinar mensagens você não tem que cifrá-las anteriormente. Assim você pode criar mensagens que podem ser lidas por qualquer um, mas que vem com sua "marca". E se algum caractere foi mudado na mensagem ele pode (e será) detectado.

Servidores de chaves e chaves assinadas

Mas vamos dizer que eu nunca tive contato com você até você mandar-me uma mensagem, como eu obtenho sua chave pública e como sei que é realmente sua?

Para resolver esse problema servidores de chaves públicas foram criados. Quando você cria seu par de chaves (chave pública e privada), você manda sua chave pública para o servidor de chaves. Depois disso todos podem obter sua chave de lá. Isto resolve o problema de encontrar a chave. Mas como eu realmente sei que a chave é a do autor? Para tanto, outro conceito deve ser introduzido, e é a assinatura de chaves:

Assinar chaves significa que, se eu tiver a chave pública de uma pessoa, e eu tiver certeza que aquela é realmente a chave da pessoa (é meu amigo pessoal, alguém que conheço na vida real, etc...) eu posso assinar a chave e mandá-la para servidores de chaves, de forma que eu digo para o mundo: "a chave realmente pertence a quem diz pertencer.". Desta maneira pessoas que tiverem minha chave pública e confiarem em mim podem usar isso para confiar em outras chaves.

Isto as vezes pode ser confuso, então vamos ver uma situação mais real.

Vamos imaginar uma situação com 3 pessoas: João, Maria e Lisa. O João é um bom amigo de Maria, mas não conhece Lisa; A Lisa é uma boa amiga da Maria, mas não conhece o João. Um dia a Lisa manda um e-mail assinado para o João. O João irá pegar a chave pública de Lisa no servidor de chaves e testar a mensagem, e se tudo for bem ele irá ver que quem escreveu a mensagem também criou a chave. Mas como eu sei se aquela é realmente a pessoa que diz ser?

Ele então vê que a chave é assinada por Maria, que ele pode verificar porque ele já tem a chave de Maria e confia nela. Com este círculo de confiança ele conclui que o e-mail que ele recebeu realmente foi escrito por Lisa.

Você agora está pronto para usar o guia, você pode voltar ao capítulo 1 e aprender como usar gpg.

8.  Pensamentos finais e créditos

Alguns problemas

Eu tive alguns problemas com fotos nas chaves. Verifique a versão que você está usando. Se você estiver usando GnuPG 1.2.1-r1 e mais recente provavelmente tudo bem, versões mais antigas podem ter problemas. Também a maior parte dos servidores de chaves não gostam de fotos, então é melhor se você não colocar fotos.

As últimas versões do gnupg parecem não funcionar com o gpg --send-keys, que foi usado para enviar todas chaves em seu círculo de chaves para o servidor público.

O que não está aqui

O gpg é uma ferramenta complexa, ele permite fazer muito mais que eu cobri aqui. Este documento é para o usuário novo ao GnuPG. Para mais informações, você deve ver o website do GnuPG.

Eu não escrevei sobre outras ferramentas como pgp4pine, gpgpine, evolution e talvez ferramentas de Windows, mas eu provavelmente aumentarei este documento no futuro.

Crédito

O Manual de GnuPG de John Michael Ashley é um livro muito bom para iniciantes.

Swift (Sven Vermeulen) por pedir-me para reescrever isso.

Todos no canal do time #gentoo-doc, vocês detonam.

Tiago Serra por colocar-me de volta no caminho da privacidade.



Imprimir

Atualizado 4 de maio de 2005

A versão original desta tradução não é mais mantida

Resumo: Este pequeno guia ensinará o básico do uso do GnuPG, uma ferramenta para comunicações seguras.

Gustavo Felisberto
Autor

John P. Davis
Editor

Sven Vermeulen
Editor

Marcelo Góes
Tradutor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.