O PGP (Pretty Good Privacy) é um sistema de criptografia híbrido por combinar a segurança da cifragem por chave pública com a velocidade da chave privada, sendo a cifragem da chave privada cerca de mil vezes mais rápida que a de chave pública. Baseado no PKI (Public Key Infrastructure), usa os algoritmos RSA e Diffie-Hellman. Foi criado por Philip Zimmermann em 1991. Ele é utilizado principalmente para cifrar emails, autenticar mensagens usando a assinatura digital e para cifrar arquivos, diretórios ou até mesmo partições inteiras.
* Componentes:
1) Autenticação (Assinatura/Verificação):
Algoritmos suportados: RSA/SHA e DSS/SHA.
A assinatura digital é feita da seguinte maneira:
- O PGP produz a função hash usando os algoritmos MD5 e RSA.
- O hash é criptografado com a chave privada usando o RSA.
- O tempo é adicionado, gerando a assinatura digital.
2) Confidencialidade e Compressão:
Algoritmos suportados: CAST, IDEA, 3DES (simétricos) e RSAm ElGamal (assimétricos).
O PGP não usa o RSA para cifrar a mensagem inteira, ele usa o IDEA (International Data Encryption Algorithm) por ser muito mais rápido e seguro para o tamanho da chave (128-bits). A cifra IDEA usa uma sessão de chave randômica e apenas essa chave é cifrada usando o RSA.
* Cifragem:
- O PGP comprime os dados usando o algoritmo ZIP. A compressão dos dados economiza tempo de transmissão e espaço de disco e reduz os padrões dos dados originais, aumentando a resistência contra a criptoanálise.
- O PGP cria uma sessão com a chave (session key) que é gerada somente uma vez. Essa chave seria equivalente a criptografia com chave privada. A chave é um verdadeiro número randômico gerado a partir de movimentos randômicos do mouse e das teclas apertadas (entropia). Para isso o PGP mantêm um buffer de 256-bytes de bits randomicos, e cada vez que o PGP espera uma tecla ser pressionada ele guarda o tempo no formato 32-bit. Quando recebe uma tecla pressionada, ele registra o tempo que a tecla foi pressionada e o valor 8-bit da tecla. As informações do tempo e da tecla pressionada são usadas para gerar a chave e para cifrar o valor atual do buffer de bit-randomico.
- Os dados cifrados com a chave privada passam por uma fase de cifragem com a chave pública do receptor. Depois a chave gerada randomicamente pela sessão com chave é transmitida junto com os dados cifrados.
* Decifragem:
A decifragem funciona de maneira inversa. O receptor usa a chave privada para recuperar os dados gerados pela sessão com chave. Então o PGP usa a chave gerada randomicamente para decifrar e recuperar os dados originais.
3) Email compatibilidade:
Diversos sistemas de email só permitem o uso de blocos com texto ASCII. Quando o PGP é usado, pelo menos uma parte a ser transmitido é cifrado, produzindo uma sequência de palavras binárias arbitrárias que alguns sistemas de email não aceitam.
Então o PGP usa o algoritmo base64 para mapear 6 bits de dados binários em caracteres ASCII de 8 bits. Isso acaba aumentando a mensagem em 33%, mas através da compressão ela fica com cerca de 1/3 de tamanho.
4) Segmentação:
Emails muitas vezes são restritos a um tamanho máximo de mensagem. A maioria dos sistemas de email impõe o tamanho de 50 mil octetos. Qualquer mensagem maior do que isso é quebrada em segmentos menores, que são enviados separadamente.
Para evitar essa restrição, o PGP automaticamente subdivide a mensagem em segmentos pequenos o suficiente para serem enviadas por email. Assim, a sessão com chave e a assinatura aparecem somente uma vez, no início do primeiro segmento.
* Implementação do PGP:
O PGP usa uma biblioteca de multi-precisão para fazer as operações do RSA. Essa biblioteca contêm rotinas para adição, subtração, multiplicação e para fazer certas manipulações com números grandes.
A tabela a seguir mostra como as 28000 linhas (sem cabeçalhos) do PGP 2.6.2 são divididas:
Descrição | N° de Linhas |
---|---|
Rotinas bignum | 3300 |
RSA | 600 |
IDEA | 600 |
MD5 | 250 |
Geração de números primos | 900 |
Rotinas de compressão | 3400 |
Gerenciamento de chaves | 4400 |
Código para rotinas de cifragem | 3300 |
Diversos | 11250 |
* Chaves:
O PGP armazena as chaves em 2 arquivos (chaveiros): um para a chave pública e outro para a chave privada. Ele também possui opções para adicionar, remover ou visualizar as chaves públicas ou privadas do chaveiro. As chaves são denotadas pelo ID-Chave e cada chave é associada ao ID-Usuário.
http://www.facweb.iitkgp.ernet.in/~sourav/PGP.pdf
http://www.pgpi.org/doc/pgpintro/
http://www.csee.umbc.edu/~woodcock/cmsc482/proj1/pgp.html
http://mercury.webster.edu/aleshunas/COSC%205130/P-PGP.pdf
http://www.researchgate.net/publication/2654480_The_RSA_Algorithm_and_PGP
https://www.crysys.hu/members/bbencsath/courses/Revkomarom07/pgp.pdf
0 comentários:
Postar um comentário