Gnu/Linux, OpenPGP e PKI
868 acessos
mail: rmartini@cipsga.org.br
Sou um entusiasta do software Gnu Privacy Guard desenvolvido por Werner Koch (wk@gnupg.org), o GnuPG, é distribuído sob os termos da Licença Gnu. Mantenho um site para distribuir versões para diversos sistemas Unix, coordeno uma lista de discussão no egroups e traduzi um Mini How To do software… O CIPSGA vem neste sentido tentando insuflar entre nós a importância de um criptosistema e da criptografia de dados como um aspecto essencial da cidadania eletrônica. Muito em breve conceitos como não-repudiação de mensagens, assinatura digital, servidor de chaves públicas, etc., entrarão no vocabulário dos internautas brasileiros e da e-democracia. Isso num piscar de olhos… Assim como sempre são as coisas da Grande rede.
O GnuPG é um software que segue o padrão OpenPGP (estabelecido no RFC 2440), é um implementação livre do velho PGP de Phil Zimmerman. Não usa nenhum algoritmo patenteado, e assim está pronto para uso, sendo portável para inúmeras plataformas. O GnuPG é um software que usa a chamada criptografia assimétrica ou de chave pública: diferentemente da criptografia clássica ou simétrica, o programa usa duas chaves para suas tarefas. A chave secreta ou privada decifra o arquivo e a pública cifra. Se quero enviar uma mensagem para José uso a chave pública deste para criptografar a mensagem, de maneira que só o próprio José pode decifrar e ler a mensagem, visto que ele tem a chave privada correspondente. Assim sendo, ele possui um par de chaves que chamamos correntemente de chaveiro digital (digital keyring). Assinar e criptografar um arquivo são tarefas diferentes: posso realizar as duas ou cada uma separadamente, dependendo de circunstâncias concretas. Por exemplo, quando enviar este artigo para a Securenet, irei apenas assiná-lo digitalmente… Mas se fosse algum dado muito sensível e crítico, poderia também cifrá-lo, protegendo desta forma seu conteúdo de olhos indesejados. Ao assinar um arquivo comprometo-me com seu conteúdo, é o que se chama não-repudiação, não posso recusar que ele foi por mim assinado, se criptografo resguardo a integridade do documento. Para assinar meu artigo usarei o GnuPG para fazê-lo:
$gpg -a –detach-sign artigo.txt
You need a passphrase to unlock the secret key for
user: “Renato Martini (Prof.) “
1024-bit DSA key, ID 20FC6CF6, created 2000-04-29
Enter passphrase:*********
Este comando gerará dois arquivos, o original que é o artigo propriamente dito, “artigo.txt” que ficará intacto, e o “artigo.txt.asc” que traz uma “assinatura-em-separado” (detached signature). Se alguém alterar uma vírgula sequer do artigo, pôr um espaço em branco por menor que seja, a verificação da assinatura digital falhará! O segundo arquivo, resultante da operação do GnuPG, está gravado em formato ASCII, pode assim ser lido. Mas isso não importa em última instância para o usuário, pois o destinatário do documento que irá checar a validade da assinatura, ali você encontrará:
$cat artigo.txt.asc
—–BEGIN PGP SIGNATURE—–
Version: GnuPG v1.0.4 (SunOS)
Comment: For info see http://www.gnupg.org
iD8DBQA6BZgbYogE2yD8bPYRAlFVAKDPQfm6bQc7Qd3dYKyQRQUaQ/fbSgCfZ4g5
bhHB85y5NjaN9y0QMe1B/Fc=
=R4ib
—–END PGP SIGNATURE—–
$
Aqui você encontra um bloco de texto que marca a versão do GnuPG, o sistema operacional onde ele está instalado, uma linha de comentário, e caracteres que para os seres humanos mortais são aparentemente aleatórios. Ao verificar a assinatura de meu artigo, o destinatário deverá encontrar:
$ gpg –verify artigo.txt.asc
gpg: Warning: using insecure memory!
gpg: Signature made dom 05 nov 2000 03:25:47 PM EDT using DSA key ID 20FC6CF6
gpg: Good signature from “Renato Martini (Prof.) “
A saída em meu terminal já diz tudo… Minha assinatura está verificada sem problemas.
Não vou insistir aqui nos comandos possíveis do GnuPG, para tanto o leitor deve procurar a documentação disponível.
Alguns especialistas têm visto os padrões PGP e PKI (Public-Key Infrastructure) como essencialmente opostos. Resumidamente, estas são as posições, por exemplo, de um lado, de Bruce Schneier num conhecido artigo chamado “Ten risks of PKI: What you’re not being told about Public Key Infrastructure“, e por outro lado, de um grupo de engenheiros da VeriSign, uma das mais fortes CAs (autoridades certificadoras) do mundo, num livro chamado Digital Certificates. Os dois padrões usam a mesma tecnologia descrita acima: a criptografia de chave pública, e param por aí. Todavia, nasceram em épocas diferentes. O padrão PGP nasceu antes da explosão da e-commerce e da Internet como um fato sócio-cultural, o padrão PKI tenta responder a contento estes desafios. Por isso, no livro acima referido os engenheiros nos dizem que o PGP é conveniente para pequenas comunidades de usuários que trocam e-mails casuais, mas não tem escalabilidade, e não é gerenciável quando se trata de grandes redes, portanto impróprio para poderosas aplicações de comércio eletrônico. Para Schneier o PKI e seus certificados digitais são um bom modelo de negócio, nada mais do que isso. E como sabemos, para ele não se vende segurança de computadores em um único produto. Entre outras falhas apontadas pelo autor, o PKI baseia-se na confiança em uma agência ou autoridade.
PKI é um amplo conjunto de acordos e padronização internacionais, autoridades certificadoras, uma estrutura entre diferentes CAs, métodos e protocolos para emitir e validar e remover certificados digitais. Um certificado digital nada mais é do que um elo entre um sujeito, uma empresa ou um indivíduo, e uma autoridade que tem o poder de certificação. Tais Certificados são em geral de chave pública, e asseguram que uma determinada chave pública pertence a um sujeito, e que a CA possui a chave privada correspondente. Sem dúvida, a relação entre o usuário e a CA é baseada na confiança. Quando você se inscreve num serviço deste tipo, para então obter um certificado digital padrão X.509, você estabelece um acordo com a CA; ora como acordo é firmado na certeza de que seja cumprido. Um ponto essencial neste tipo acordo, que é estabelecido por exemplo com a Thawte – um outra importante CA – diz grosso modo ao usuário: não aceitamos tutela de chaves (ou key escrow), se algum país nos obrigar a isso, retiraremos de lá imediatamente nosso “banco de dados”. Este é um ponto que todo usuário deve buscar numa CA. Nunca aceite a priori a tutela de suas chaves!
A comunidade de software livre já dispõe hoje de um importante projeto: o OpenCA, organizado por Massimiliano Pala (madwolf@openca.org). Seu objetivo é montar uma completa interface para o gerenciamento de operações comuns na emissão de certificados padrão X.509. Em síntese. A montagem de uma CA usando software livre, em um sistema operacional livre como o Linux. Mas disso nos ocuparemos em outra ocasião aqui nesta coluna.
O que gostaria de deixar como um tema a ser refletido é que os dois padrões, o OpenPGP e o PKI, podem se complementar, e não serem de todo excludentes. Ao contrário, o ideal é que o nosso GnuPG futuramente também possa manejar certificados X.509. E assim possamos dispor do melhor dos dois padrões que nos são disponíveis hoje.
**
SITES RELACIONADOS:
Site oficial do Gnu Privacy Guard:
Mini HowTo do GnuPG em português:
http://www.cipsga.org.br/gnupg.html
Site “GnuPG for Unix”, versões Unix do GnuPG:
http://gnupg.unixsecurity.com.br
O padrão OpenPGP:
http://www.gnupg.org/rfc2440.html
Listas sobre o GnuPG (instruções gerais):
http://gnupg.unixsecurity.com.br/listas.html
Ten Risks of PKI: What You’re Not Being Told About Public Key Infrastructure C. Ellison and B. Schneier Computer Security Journal, v 16, n 1, 2000, pp. 1-7. Public-key infrastructure has been oversold:
http://www.counterpane.com/pki-risks.html
PKI segundo a VeriSign:
http://www.verisign.com/whitepaper/enterprise/difference/difference.html
Thawte Corp.:
O projeto OpenCA:
LIVRO CITADO:
Digital Certificates. Applied Internet Security. J. Feghhi, J. Feghhi & P. Williams. Publicado pela Addison-Wesley (2000).