15 de mai de 2015

PGP

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.


* Fontes:
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