Aviso :
Este documento não é válido e não é mais mantido.
|
Guia do usuário de GnuPG do Gentoo
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 |
 |
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 |
 |
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.
O conteúdo deste documento está licenciado pela licença Creative Commons -
Attribution / Share Alike.
|