Arte & tecnica da Criptografia

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAy/SKaAAAAEEANoLhe2124nAzFxYiN3nD6cncEHnSpWFvEHfFnaDePyHVM60
6T9molVMjlaqefkM95yS3uJXXL2JEfjpjD+kLQ4jOXPC4R1mWcJOU5iZhpXcT2LD
ksHeiDWlgsRVQVc2xWS1/ffDs1HX3P/SiMMqkHupsUjQV/osF+g0Bus9RdmpAAUT
tDFUaG9tYXMgRC4gQnJhZGZvcmQgPHRob21hcy5icmFkZm9yZEBibXRtaWNyby5j
b20+iQCVAwUQL9Iq0eg0Bus9RdmpAQHGNAP+I1WpkY4PUlTumL4UTzu5IxYBa+yT
cVZmFuR6FltWSq+Wa78rTyJh8+j79TxvrLUzG8BTQ5fRkzdwdlSZc9IgJjOuPyVW
r5gAjPDcD24Rb1Zp53/E8RSraijRxpJvWZlck3e/9kyQmBHkOJ6JLYLkktcuU8oa
/EP3x4YDJjNO0CM=
=HeYa
-----END PGP PUBLIC KEY BLOCK-----
Na ilustração, a chave pública da BMT Micro, Inc

APRENDA A USAR O PGP
por Sergio Queiroz, Team OS/2

Uma Introdução "Quick and Dirty" à Criptografia:
===============================================
Criptografia é a arte ou ciência de manter mensagens secretas. Ela trata com todos os aspectos de mensagens seguras, autenticação, assinaturas digitais dinheiro eletrônico e outras aplicações. Inicialmente a Criptografia era uma ferramenta quase que exclusivamente usada com fins militares, no entanto na atual "Sociedade da Informação" ela tornou-se uma das ferramentas principais para manter a privacidade. Também é através dela que informações de grande valor podem ser protegidas contra o crime organizado, corporações multinacionais e o governo.
Está na hora de desmistificar a criptografia e fazer uso das vantagens que ela proporciona para a sociedade moderna. O uso da criptografia é uma das poucas defesas que os indivíduos têm para se proteger de uma sociedade totalitária que pode monitorar e controlar tudo que nós fazemos.
Algoritmos de Criptografia
Um método de encriptação (transformação do conteúdo da mensagem de tal forma que ele não seja possível sua visualização por pessoas não desejadas) e decriptação (processo de obtenção do conteúdo da mensagem a partir do texto encriptado) é chamado de uma "cifra". Alguns métodos criptográficos dependem do segredo dos algoritmos; tais métodos interessam apenas por motivos históricos e não são adequados para utilização real. Todos os algoritmos modernos usam uma CHAVE para controlar a encriptação e a decriptação; uma mensagem só pode ser decriptada se a chave usada combina com a chave de encriptação. A chave usada para decriptação pode ser diferente da chave usada para encriptação (como é o caso do PGP). Há duas classes de algoritmos baseados em chave, os simétricos e os assimétricos. A diferença é que os algoritmos simétricos usam a mesma chave para encriptação e decriptação (ou a chave de decriptação é
facilmente derivável da chave de encriptação), enquanto que os algoritmos assimétricos usam uma chave diferente para encriptação e decriptação, e a chave de decriptação NÃO PODE ser obtida a partir da chave de encriptação.
Os algoritmos assimétricos permitem que a chave de encriptação seja pública (pode até mesmo ser publicada em um jornal), permitindo que qualquer um possa encriptar com a chave, enquanto apenas o dono da chave
(que conhece a chave de decriptação) pode decriptar a mensagem. A chave de encriptação é também chamada de chave púb lica (PUBLIC KEY) e a de decriptação de chave privada (PRIVATE KEY) ou chave secreta (SECRET
KEY).
O que são assinaturas digitais?
Alguns algoritmos de chave pública podem ser usados para gerar assinaturas digitais (ex.: PGP). Uma assinatura digital é um bloco de dados que foi criado usando uma chave secreta, e há uma chave pública que pode ser usada para verificar que a assinatura foi realmente gerada usando a chave privada correspondente. O algoritmo usado para gerar a assinatura deve funcionar de tal forma que sem possuir a chave secreta não é possível criar uma assinatura que seria verificada como válida. As assinaturas digitais são usadas para verificar que uma mensagem realmente é originária do suposto autor (assumindo que apenas o autor conhece a chave secreta correspondente à sua chave pública). Elas também podem ser usadas para certificar a data do documento: uma pessoa/organização de confiança assina o documento e sua data com sua chave secreta, certificando que o documento existiu na data especificada. Assinaturas digitais também são usadas para certificar que uma chave pública pertence a uma pessoa em particular. Isto é feito pela assinatura da chave e da informação sobre o seu dono por uma chave pertencente a uma pessoa/organização de confiança. A razão por confiar na chave é que ela foi assinada por outra chave de confiança.
Eventualmente, alguma chave deve ser a raiz (root) na hierarquia (isto é, ela não foi assinada por nenhuma outra chave mas você assume que pode confiar nela). Em uma infraestrutura de chaves centralizada há poucas raízes na rede de autenticação (e.g. agências de certificação homologadas pelo governo; tais raízes são também chamadas autoridades de certificação - certification authorities). Em uma infraestrutura distribuída não há necessidade de haver raízes universalmente aceitas, e cada grupo pode ter raízes d iferentes. Esse conceito é usado por exemplo no PGP.
Nível de segurança de algoritmos de criptografia
Bons sistemas de criptografia devem sempre ser designados de tal forma que sejam o mais difícil de quebrar possível. É possível construir sistemas que não podem ser quebrados na prática (embora isso normalmente
não possa ser provado). No entanto cuidado e experiência são necessários.
Teoricamente, qualquer método de criptografia com uma chave pode ser quebrado, testando-se todas as possíveis chaves em sequência. Se usar a "força bruta" para testar todas as chaves é a única opção, o poder de
processamente requerido aumenta exponencialmente com o tamanho da chave. Uma chave de 32 bits requer 2^32 passos. Isto é algo que um amador pode fazer com seu computador. Um sistema com chave de 40 bits (exemplo, a versão de exportação do RC4) leva 2^40 passos - esse tipo de poder de processamente está disponível na maioria das universidades e mesmo em companhias pequenas. Um sistema com chaves de 56 bits (como o DES) requer um esforço substancial, mas é facilmente quebrado com hardware especial. O custo do hardware especial é substancial mas facilmente dentro do limite de organizações criminosas, grandes companhias e o governo. Chaves com 64 bits podem ser atualmente quebradas pelos governos dos países mais poderosos e estarão ao alcance de organizações criminosas, grandes companhias e governos de outros países em alguns anos. Chaves com 128 bits irão provavelmente continuar "inquebráveis" por força bruta no futuro próximo.
No entanto, o tamanho da chave não é a única coisa relevante. Muitos algoritmos podem ser quebrados sem tentar todas as possíveis chaves. Em geral, é muito difícil conceber algoritmos que não possam ser quebrados
com maior eficiência usando outros métodos. Designar os seus próprios algoritmos pode ser divertido, mas não é recomendado para aplicações reais a não ser que você seja um verdadeiro expert e saiba exatamente o que vc está fazendo.
Os tamanhos das chaves usadas em criptografia com chaves públicas
são normalmente muito maiores do que aqueles usados em algoritmos
simétricos. O problema maior nesse caso não é adivinhar a chave correta,
mas derivar a chave secreta a partir da chave pública. Para se ter uma idéia da complexidade, para o sistema RSA, uma chave de 256 bits é facilmente quebrada por pessoas comuns, 384 bits podem ser quebrados por grupos de pesquisa em universidades ou companhias. 512 bits está ao alcance dos governos poderosos. Chaves com 768 bits provavelmente não são seguras a longo prazo. Chaves com 1024 bits ou mais devem ser seguras por enquanto, a não ser que ocorram grandes avanços nas técnicas de quebrar os algoritmos; chaves de 2048 bits são consideradas por muitos como seguras por décadas.
É bom enfatizar que a segurança de um sistema de criptografia é normalmente IGUAL AO SEU PONTO MAIS FRACO. Nenhum aspecto do design do sistema deve ser desconsiderado, desde a escolha dos algoritmos até a distribuição de chaves e normas de utilização.
Agora que os conceitos principais da criptografia já foram esclarecidos, podemos passar para a instalação e utilização do PGP, um sistema de criptografia assimétrica distribuído como freeware.
Obtendo, instalando e usando o PGP no OS/2
A última versão Internacional do PGP pode ser obtida na "International PGP Homepage" em http://www.ifi.uio.no/pgp/ . Embora já esteja disponível o PGP 5.0, o mesmo ainda não tem versão para OS/2 até esse momento (a versão para OS/2 está em beta-test controlado). Portanto a última versão disponível para OS/2 é a 2.6.3ia. A sintaxe do PGP foi alterada dessa versão para a 5.0, mas como ela ainda não está disponível para OS/2, os comandos que aqui aparecerem estarão com a sintaxe do 2.6.3ia.
Instalando o PGP
- Crie um diretório para o PGP;
- Descompacte o arquivo do PGP (pgp263i-os2.zip) nesse diretório;
- Descompacte o arquivo PGP263II.ZIP. Caso use o PKUNZIP ao invés do
UNZIP, será necessário usar a opção -d ;
- Edite o CONFIG.SYS adicionando a seguinte linha: SET
PGPPATH=X:\PGP
Onde X é o drive e PGP é o diretório onde o PGP foi instalado.
Obs.: Não coloque ponto-e-vírgula no final da linha, alguns
programas que usam o PGP apresentam problemas quando isso é feito.
- Reinicialize o sistema, o PGP já estará pronto para ser usado.
- Criando o seu par de chaves (secreta/pública)
- Vá para o diretório do PGP e digite: pgp -kg
- Aparecerão 3 opções, mas você pode colocar outro número de bits para as suas chaves (até o limite de 2048 nessa versão do PGP), basta digitar o número e apertar enter;
- Coloque o seu ID (siga o formato do exemplo: John Q. Smith <12345.6789@compuserve.com> )
- Será pedido sua "pass phrase". Esse é o seu password, quanto maior ele for melhor. Pode ser uma frase, não necessariamente uma única palavra. Evite passwords óbvios, inclusive os formados exclusivamente por palavras encontradas em dicionários (de qualquer língua).
- Então será pedido para vc digitar um texto aleatório qualquer. Não se preocupe com o que vai digitar, o PGP usa essa parte apenas para gerar números aleatórios medidos a partir do tempo entre suas "keystrokes".
- Pronto, vc terá gerado suas chaves pública e privada.
- Agora aproveite para fazer um backup de seu par de chaves
(arquivos secring.pgp e pubring.pgp) em um local seguro.
- Nunca esqueça seu password. Se isso acontecer vc não poderá mais recuperar nenhuma mensagem encriptada p/ vc e terá que gerar um novo par de chaves. O mesmo é válido se você perder sua chave privada.
Encriptando um arquivo
A chave pública do destinatário deve constar no seu arquivo de chaves públicas, veja a seção "Adicionando uma chave pública na sua lista".
- Para gerar um arquivo encriptado binário digite: pgp -e <nome_do_arquivo>
Será perguntado o ID do usuário para o qual vc quer encriptar. Será criado um arquivo nome_do_arquivo.pgp
Para gerar um arquivo ASCII use pgp -ea <nome_do_arquivo>
O(s) ID(s) do(s) usuário(s) podem ser passados como parâmetro na linha de comando.
Decriptando um arquivo
- Digite: pgp -d <nome_do_arquivo>
- Será solicitada sua "pass phrase"
- Obviamente vc só poderá decriptar arquivos encriptados para sua
chave secreta.
- Esse mesmo comando também poderá ser usado para checar a
assinatura de um arquivo.
Assinando um arquivo texto
- Digite: pgp -sa <arquivo_texto>
Sua assinatura será adicionada ao texto, porém o mesmo não será encriptado. Para assinar e encriptar use pgp -sea <arquivo_texto>. Nesse último caso além de sua pass phrase será solicitado o(s) ID(s) do(s) destinatário(s). Novamente esses poderão ser passados como parâmetro na linha de comando. Consulte o help do pgp para maiores detalhes.
Extraindo sua chave pública para divulgá-la
Para que os outros possam encriptar arquivos para você, é necessário que tenham sua chave pública (como vimos na explicação sobre algoritmos assimétricos na introdução). Para extraí-la em um arquivo texto faça o
seguinte: pgp -kxa <seu_id> <arquivo> Será criado um arquivo.asc com sua chave pública para divulgação.
Adicionando uma chave pública na sua lista
- Digite: pgp -ka <arquivo_com_a_chave>
Será solicitada confirmação sobre a adição, também serão feitas perguntas a respeito da confiabilidade da pessoa que está sendo adicionada, isto é, se outras assinaturas assinadas por essa pessoa serão consideradas como verdadeiras etc.
Esses são os comandos básicos do PGP. Vários outros estão disponíveis, como assinatura digital de arquivos binários, visualização de chaves, mudança da passphrase etc. A descrição desses comandos está disponível no help do PGP. Para ver um help resumido na tela, digite: pgp -h
Programas de "Front-end" para o PGP
Esses programas não adicionam nenhuma função ao PGP, apenas facilitam o seu uso através de interfaces gráficas e/ou integração a programas de e-mail.
Um dos meus preferidos são as macros criadas pela GIBBON para utilizar com o EPM. Elas adicionam um menu PGP ao EPM, permitindo que qualquer texto nele carregado seja encriptado, decriptado, assinado etc.
Devem está disponível no hobbes, o nome do arquivo é gcppgpXX.zip, onde XX é o número da versão. A última que tive notícia foi a 1.2 (gcppgp12.zip). O programa é FREE e o código fonte vem incluso.
As versões recentes do PMMAIL já possuem integração com o PGP, assim é possível encriptar/decriptar/assinar direto do PMMAIL. Para maiores detalhes veja o help do PMMail, ou entre em contato com alguém que use esse programa, já que eu não o utilizo não posso dar muitos detalhes da utilização dessa integração.

Bem, se vc conseguiu chegar até aqui, PARABÉNS! Vc conseguiu ter paciência de ler essa longa mensagem, espero que tenha sido útil para você.
Eu já estou cansado de tanto escrever :) e vou ficando por aqui. Como disse no início, se tiver alguma dúvida pode me enviar um e-mail. As informações contidas na introdução foram quase todas retiradas
das "International Cryptography Pages" em http://www.cs.hut.fi/crypto/ . Para os interessados em mais informações, essa página é uma boa fonte, assim como a "Crypto-Log: Internet Guide to Cryptography" em http://www.enter.net/~chronos/cryptolog.html que contém dezenas (talvez centenas) de links relacionados à criptografia. Também foi usada como fonte as "Frequently Asked Questions" do newsgroup alt.security.pgp
Na ilustração, as chaves indicam mensagens encriptadas recebidas pelo PM Mail