![]() |
Criptografia
| Linux in Brazil Documentação original e de qualidade em bom português |
Linux in Brazil traz mais um artigo submetido pelos leitores. Este
tutorial completo sobre o PGP (uma ferramenta de criptografia) foi escrito
pelo João André Simioni, um curitibano que cursa Engenharia Eletrônica no
CEFET-PR e é usuário de Linux há dois anos. Para maiores informações, contate-o
através de seu site pessoal.
PGP - Sigla de Pretty Good Privacy (Privacidade Bastante Boa), é uma
ferramenta para criptografia. Criptografia, pelo dicionário é: "Arte
de escrever em cifra, em alfabeto oculto", ou seja, transformar um texto que
seja "legível" por um texto codificado. O objetivo disso é simples. Caso o
texto caia em mãos erradas, a pessoa que a interceptou não será capaz de
lê-lo.
Muitos não sabem, mas muita informação que transita pela internet é enviada
em forma de texto puro, fácilmente legível. Isso inclui mensagens em salas
de chat, IRC, ICQ, e-mail, senhas. Essa informação, para chegar até seu
destino, passa por vários lugares. Se em algum desses lugares, tiver uma
pessoa mal intencionada, pode salvar as informações que transitaram por ali
para fazer uso ilícito delas.
Utilizando criptografia evita-se que o texto seja compreendido pelo
interceptador. Somente o destinatário REAL terá capacidade de decodificar a
mensagem. É com esse sistema, que funcionam as páginas seguras (secure
http), como por exemplo as páginas de compras on-line, de home banking, que
enviam informações sigilosas.
Basicamente, a criptgrafia pode ser de dois tipos, simétrica e assimétrica.
Na criptografia simétrica, utiliza-se a mesma "chave" para codificar e
decodificar a mensagem. Dessa forma, a pessoa que recebe a mensagem deverá
saber com qual chave ela foi criptografada. Esse tipo de criptografia possui
um problema sério, que é justamente o de como combinar a chave a ser usada.
A criptografia assimétrica oferece uma solução para esse problema, pois
nela a chave para criptografia é diferente da chave para decriptografia.
Para isso cria-se o conceito de chave pública e chave privada. A chave
pública é uma chave livremente distribuída e serve apenas para criptografar
os dados. Mas para decriptografar esses dados é necessário utilizar a chave
privada. Dessa forma é possível por exemplo, que eu divulgue a minha chave
pública na internet para qualquer um mandar uma mensagem codificada para
mim. Mas como eu sou o único que possuo a chave privada somente eu serei
capaz de decodificar.
O PGP pode ser utilizado com qualquer uma das formas de criptografia. Mas a
mais interessante é justamente o método assimétrico. Cada pessoa cria uma
chave pública e uma chave privada para si mesmo, e divulga sua chave
pública. Existem ferramentas para essa divulgação, como por exemplo,
servidores de chaves.
Na hora de se criptografar a mensagem, o remetente utiliza como "senha" $
criptografia a chave pública do destinatário. Na hora de decriptografar, o
destinatário deverá usar como "senha" sua chave privada.
Além da idéia de criptografia, existe a idéia de "Autenticação". Com isso,
pode-se garantir a autencidade do remetente da mensagem. Para isso, a
mensagem deve ser codificada utilizando a chave privada do remetente. Alguém
que a receba, decodifica a mensagem utilizando a chave pública do remetente.
Caso a decodificação seja bem sucedida, significa que o par "chave pública,
chave privada" está correto, e que portanto o remetente é quem diz ser.
A chave privada deve ser bem guardada, e jamais divulgada a ninguém.
O algoritmo de criptografia do PGP utiliza chaves de até 4096 bits. Para um
computador tentar "quebrar" a criptografia da mensagem, levaria bastante
tempo. Com 1024 a segurança já é muito boa, mas quanto maior o tamanho da
chave, mais segura ela será. Só para base de comparação, uma chave de 1024
bits em um algoritmo assimétrico é equivalente a uma chave de 80 bits em um
algoritmo simétrico.
Outra coisa que você deve saber é sobre as versões do PGP. Ele está
disponível no formato PGP, e PGPi. A versão PGPi é a versão internacional, e
é a que você deverá usar, a não ser que resida nos Estados Unidos. Isso se
deve às leis dos EUA a respeito de criptografia, proibindo-a de ser
exportada. Existe então um projeto de internacionalização do PGP, chamado
PGPi.
Bem, essa foi apenas uma pequena introdução ao funcionamento do PGP, mas
vamos a parte prática. O PGP está disponível para UNIXes, Windows 95/98/NT,
DOS, Macintosh e provavelmente para qualquer outra plataforma existente. Ele
pode ser utilizado apenas para se criptografar textos que estejam em seu
disco, mas sua maior vantagem para a maioria das pessoas comuns é de se
integrar com os programas de e-mail para facilitar o envio e recebimento de
mensagens.
Em UNIXes existe um script para interação com o PINE. Em Windows, o programa
pode ser instalado para funcionar com diversos mailers, como o Microsoft
Outlook, Microsoft Outlook Express, Eudora.
Aqui você terá 2 opções para instalar o PGPi. Você poderá utilizar o PGP
5.0i regular, ou então o GNUPG (Gnu Privacy Guard), que é um substituto para
o PGP. Ambos podem ser encontrados em: http://www.pgpi.org/download/.
Lembre-se apenas de, se for fazer download do PGPi regular, baixar a versão
Internacional (PGP 5.0i).
O tutorial aqui será utilizando o GNUPG, versão genérica (.tar.gz). Existe
também uma versão RPM para download, caso você prefira.
Após fazer o download do arquivo em http://www.gnupg.org, descompacte-o:
tar xvfz gnupg-0.9.10.tar.gz
entre no diretório que foi criado:
cd gnupg-0.9.10
Leia a documentação que está ali. Muitos dos problemas que possam aparecer
têm sua solução documentada. Existe um FAQ dentro do diretório doc. Uma
lista de comandos para o configure pode ser conseguida com o comando:
./configure --help
Após tudo lido e compreendido, digite:
./configure
Após o script ter conseguido todas as informações sobre seu sistema, digite:
make
Após o programa ter compilado, entre como superusuáro (su) e então:
make install
Volte com seu usuário padrão, e então digite:
gpg --gen-key
Você verá um texto como se segue:
Ele pede para você escolher qual o tipo de chave deseja utilizar. A opção 1
é a mais recomendada.
Escolha então o tamanho de sua chave. Quanto maior, mais segura ela será, e
mais tempo levará para que as mensagens sejam criptografadas. Eu utilizarei
o padrão, que é 1024 bits.
Você precisa escolher então por quanto tempo sua chave deverá ser válida.
Escolhendo 0, será válida para sempre, ou então você pode definir por
exemplo, 10m para 10 meses, ou 1y para 1 ano. Vou selecionar 0, para tempo
indefinido. Ele pede confirmação, e então seus dados pessoais (nome, e-mail,
etc).
Informe e confirme seus dados. Agora você precisará escolher uma frase para
ter acesso a sua chave privada. Essa chave será requisitada sempre que for
decriptografar uma mensagem. Coloque então algo fácil para você memorizar,
mas procure adicionar caracteres diferentes, como letras maiúsculas e
minúsculas e caracteres não alfanuméricos. O programa irá gerar agora suas
chaves públicas e privadas. Um texto surgirá, pedindo pra que durante o
processo de criação de senhas você mexa o mouse, tecle algumas teclas em seu
teclado, faça seu disco funcionar, para com isso, gerar uma chave o mais
aleatória possível.
Agora que você adicionou suas chaves, poderá começar a "brincar". Você pode
ver sua chave pública, para informar às outras pessoas, com o comando:
gpg --export -a [Nome]
A opção -a é para a saída ser na forma ASCII de 7 bits, e não na forma
binária. Essa opção pode ser combinada com qualquer outro comando do GPG e é
útil pra se enviar a saída via e-mail, por exemplo.
Você pode redirecionar a chave para um arquivo, usando:
gpg -o [arquivo] --export -a [Nome]
Para adicionar uma chave pública ao seu conjunto de chaves, você pode usar
o comando:
gpg --import [arquivo]
Após adicionar a chave pública, você deve valida-la, ou então no momento em
que for criptografar uma mensagem para o destinatário, o GPG irá pedir
confirmação. Mas somente valide uma chave que você tenha certeza de que é
realmente do destinatário. Essa confirmação você pode ter por telefone, ou
no site da pessoa, com base no "FINGERPRINT" da chave pública. Para validar
a chave, digite:
gpg --edit-key [nome]
Uma linha de comando surgirá e você deve digitar: sign e então [enter] O
programa pedirá confirmação, responda y e então digite sua frase. Após ter
feito isso, digite: save e [enter]
Agora você já tem sua chave pública, divulgue-a para seus conhecidos.
Adicione algumas chaves públicas de algumas pessoas que você conheça e então
comece a criptografar/decriptografar as mensagens. Você pode, por exemplo,
usar dois ou mais usuários em seu sistema para fazer alguns testes.
Para criptografar uma arquivo, use o comando:
gpg -o arquivodesaida -r destinatario -e arquivo
Destinatário é a pessoa a quem é destinada o arquivo criptografado. Você
deve ter adicionado a chave pública dela em sua lista. Caso você suprima o
parâmetro "-o arquivodesaida" o comando criará um arquivo com o mesmo nome
do arquivo original, com extensão .gpg
Para decriptografar uma mensagem, digite:
gpg -o arquivodesaida arquivo.gpg
O comando pedirá sua frase e então criará um arquivo com o nome escolhido,
ou caso tenha suprimido a opção "-o arquivodesaida", o programa pedirá um
nome.
É possível também criptografar um arquivo no formato "simétrico". Basta para
isso o parâmetro "--symmetric". Por exemplo:
gpg -o arquivodesaida --symmetric arquivo
Você receberá um prompt pedindo com qual chave deseja criptografar o
arquivo.
Você pode assinar os arquivos como sendo seus, além de criptografa-los.
Pra isso utilize o comando
gpg -o arquivodesaida -s arquivo
Sua frase será pedida. Qualquer um que o receba poderá verificar sua
assinatura simplesmente digitando
gpg -o arquivodesaida arquivo
Com essa forma de assinatura, o arquivo é ao mesmo tempo compactado, ficando
ilegível. Para criar uma assinatura sem destruir a legibilidade do arquivo,
use o comando:
gpg -o arquivodesaida --clearsign arquivo
Se desejar criptografar e assinar ao mesmo tempo, use:
gpg -o arquivodesaida -r destinatario -s -e arquivo
Como já havia dito, todos esses comandos podem incluir o parâmetro "-a"
que induz a uma saída em ASCII 7bits.
Para facilitar nossas vidas, existem servidores de chaves. Esses servidores
mantém cadastros de chaves para diversos e-mails. Você pode adicionar sua
chave pública a um desses servidores, ou procurar a chave pública de algum
e-mail particular. Um servidor bem conhecido é o www.keyserver.net.
Caso você receba uma mensagem criptografada e não possua a chave publica
para aquele ID, pode tentar encontrar num servidor de chaves. Com o comando:
gpg --keyserver www.keyserver.net --recv-keys KEYID
Você consegue a chave pública de um ID qualquer. (desde que esteja
registrado no Keyserver). Para adicionar sua chave publica ao Keyserver,
você pode ir até o site e cadastrar manualmente, ou então deixar que o gpg
faça isso por você. Pra isso digite:
gpg --keyserver www.keyserver.net --send-keys NOME
Onde nome é o parâmetro que identifica sua chave (seu e-mail, nome ou
Comentário).
Para uma lista de comandos mais detalhada, você pode verificar a página
manual do gpg. (man gpg)
O pine é provavelmente o gerenciador de e-mail mais onipresente no ambienet
UNIX, e naturalmente ele pode suportar o PGP. Portanto, a primeira coisa a
ser feita é instalar o PINE em seu computador. Você pode encontrar os fontes
no site http://www.washington.edu/pine
Você deverá fazer download do programa de filtro para integrar o Pine com o
PGP. No site do PGPi (http://www.pgpi.org) você pode encontrar algumas
ferramentas para isso. Eu recomendo a utilização do pgp4pine escrito por
Chris Wiegand, que é um programa escrito em C compatível com PGP5, PGP2 e
GnuPG. Você pode fazer o download desse script na página
http://members.home.com/cdwiegand/pgp4pine a última versão é a 1.62, porém
eu tentei compilar essa versão e ela aparentemente possui algum problema com
o Makefile gerado (Pelo menos não funcionou direto aqui). Portanto, até que
o autor corrija o problema, recomendo que você faça o download da versão
1.61 (que é exatamente igual. A única mudança está na instalação, que
utiliza autoconf/automake). A versão 1.61 pode ser encontrada em
http://members.home.com/cdwiegand/pgp4pine/pgp4pine_1.61.tar.gz.
Após fazer o download, descompacte o arquivo ($ tar xvfz
pgp4pine_1.61.tar.gz). Entre no diretório que foi criado com a
descompactação (pgp4pine_1.61), leia os arquivos README e INSTALL para
esclarecer qualquer dúvida e então rode o make.
Tudo deve ocorrer bem. Entre como superusuário (su) e então digite:
make install
para copiar o executável e os arquivos de manual para os diretórios padrão
(/usr/bin e /usr/man). Se desejar instalar em outro diretório que não esse,
edite o Makefile e altere a localização.
Volte com seu usuário padrão. (exit). Você precisa criar agora um arquivo de
configuração para o pgp4pine. Dentro do diretório pgp4pine/doc você encontra
um arquivo de exemplo (pgp4pinerc). Copie esse arquivo para seu diretório
pessoal.
cp doc/pgp4pinerc ~/.pgp4pinerc
Edite o arquivo ~/.pgp4pinerc com seu editor de textos favorito. As
principais linhas que devem ser alteradas são:
profile_list=pgp5:pgp2:gpg - Define qual é o programa de criptografia que
deve ser utilizado. Caso tenha mais de 1, como é o caso do exemplo, ele
pergunta qual deverá ser usado no momento em que o programa for rodado. Como
eu utilizo apenas o GnuPG, modifiquei essa linha para: profile_list=gpg
Você deve definir um arquivo temporário que o pgp4pine utiliza como
arquivo de troca para criptografar/decriptografar as
mensagens. Para isso, adicione a linha:
profile_gpg_tmpfile=/caminho/arquivo
onde /caminho/arquivo é o arquivo temporário. O caminho deverá ser completo,
por exemplo: /home/brett/mail/.temp Outras opções podem ser configuradas
nesse arquivo, como por exemplo definir que todos os e-mails devem ser
assinados. O próprio arquivo tem comentários que ajudam a entender. Só é
importante notar que as opções são para cada um dos programas de
criptografia. Ou seja, se você usa GnuPG, as linhas de configuração começam
com profile_gpg e se você usa PGP5 as linhas deverão começar com
profile_pgp5.
Depois disso configurado, basta informar ao Pine para utilizar o pgp4pine
como filtro para suas mensagens. Inicie o Pine, vá em SETUP, Config. Procure
pela linha:
display-filters:
e coloque:
_LEADING("-----BEGIN PGP")_ /usr/bin/pgp4pine -d -i _TMPFILE_
Essa linha indica que os e-mails que chegarem e tiverem neles "-----BEGIN
PGP" devem ser filtrados utilizando o script
/usr/bin/pgp4pine antes de ser visualizado.
Procure pela linha:
sending-filters:
e coloque:
/usr/bin/pgp4pine -e -i _TMPFILE_ -r _RECIPIENTS_
Na hora em que for enviar uma mensagem, o Pine perguntará se deseja utilizar
algum filtro, e então escolha esse. Você pode escolher que por padrão as
mensagens sejam enviadas utilizando o filtro, pra isso, você deve habilitar
a opção: compose-send-offers-first-filter.
A utilização é intuitiva o suficiente pra não precisar de maiores
detalhes.
Quaisquer dúvidas, seja bem-vindo a me enviar um e-mail. O endereço é:
jas@xmail.com.br. Mas antes de enviar qualquer coisa, verifique os sites que
eu indiquei e você poderá encontrar muita informação. Recomendo também
utilizar foruns públicos ou listas de discussão, pois assim sua dúvida pode
ser compartilhada por todos.
Instalação do gnupg
Geração das chaves
Please select what kind of key you want:
(1) DSA and ElGamal (default)
(2) DSA (sign only)
(4) ElGamal (sign and encrypt)
Your selection?
Your selection? 1
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)
What keysize do you want? (1024) 1024
Requested keysize is 1024 bits
Please specify how long the key should be valid.
0 = key does not expire
Criptografando arquivos
Assinando Arquivos
Utilizando um servidor de Chaves
Interação com Pine