• Nenhum resultado encontrado

Fun¸c˜ oes unidireccionais (hash)

1.4 Assinatura digital

1.4.3 Fun¸c˜ oes unidireccionais (hash)

Na pr´atica, os algoritmos de chave p´ublica para esquemas de assinatura digital s˜ao muitas vezes ineficientes para assinar mensagens longas. De facto, cifrar mensagens longas pode demorar muito tempo. Por outro lado, uma mensagem assinada pelo processo descrito na sec¸c˜ao 1.4.2 n˜ao permite visualizar a mensagem sem verificar a assinatura. Uma melhoria dos esquemas de assinatura digital consiste em implementar fun¸c˜oes unidireccionais (one- way hash functions).

A maioria das fun¸c˜oes unidireccionais s˜ao implementadas a partir de uma fun¸c˜ao f que produz uma sa´ıda de tamanho fixo de m bits, dadas duas entradas de m bits cada. Uma entrada consiste num bloco de texto da mensagem M e outra no hash resultante do processamento do bloco anterior. Matematicamente, tem-se que hi = f (Mi, hi−1). A sa´ıda

do ´ultimo bloco torna-se o valor hash de toda a mensagem. Desta maneira, uma fun¸c˜ao unidireccional produz sempre uma sa´ıda de tamanho fixo, independente do tamanho da mensagem. A fim de resolver um eventual problema de seguran¸ca resultante do facto de duas mensagens de comprimento diferentes produzirem o mesmo valor de hash, por vezes alguma informa¸c˜ao bin´aria sobre o tamanho da mensagem M ´e concatenada a M antes de iniciar o c´alculo do valor de hash.

Em resumo, uma fun¸c˜ao hash unidireccional opera sobre uma mensagem M de qual- quer tamanho, e produz um valor de hash h(M ) de tamanho fixo. Estas fun¸c˜oes devem ter caracter´ısticas adicionais:

• Dado M , deve ser r´apido e f´acil calcular h(M ). • Dado h(M ), ´e muito demorado e dif´ıcil calcular M .

• Dado M , deve ser muito dif´ıcil encontrar outra mensagem M0tal que h(M ) = h(M0),

ou seja, mudando um s´o bit da mensagem original M , h produz um valor de hash totalmente diferente.

O algoritmo mais utilizado para fun¸c˜oes unidireccionais ´e o MD5 (Message Digest Algorithm) desenvolvido por Ron Rivest e que produz um valor hash de 128 bits. Em 1996, Hans Dobbertin quase quebrou este algoritmo, descobrindo s´erias fraquezas do MD5. Outro algoritmo, projectado pelo NIST (Nacional Institute of Standards and Technology) e NSA (National Security Agency), ´e o SHA-1 (Secure Hash Algorithm), considerado por v´arios especialistas uma fun¸c˜ao unidireccional criptograficamente segura, que produz um hash de 160 bits, em vez de 128 bits. Todas as novas vers˜oes do PGP usam a fun¸c˜ao unidireccional SHA-1 para a cria¸c˜ao de assinaturas digitais com o DSS. Mas, por quest˜oes de compatibilidade com antigas vers˜oes, o PGP usa o MD5 para assinar mensagens com o RSA.

Em vez de assinar a mensagem inteira, assinamos um pequeno peda¸co de dados que “representa” a mensagem. Para isso, calcula-se o valor hash da mensagem, tamb´em

chamado message digest ou uma impress˜ao digital. Assina-se somente a impress˜ao digital, que normalmente ´e de tamanho reduzido (entre 128 e 512 bits).

Suponha-se que o Pedro pretende enviar ao Jo˜ao uma mensagem M assinada usando este esquema. Se o Pedro usa o sistema de cifragem RSA com chave p´ublica (nP, cP) e

chave privada (nP, dP), ent˜ao ele seguir´a os seguintes passos:

• Calcula a impress˜ao digital h da mensagem M , atrav´es da fun¸c˜ao unidireccional MD5, ou seja, h = MD5(M ).

• Assina somente a impress˜ao digital com a sua chave privada (nP, dP):

S ≡ hdP (mod n

P).

A assinatura da mensagem M ´e o valor S que s´o o Pedro consegue calcular, uma vez que s´o ele conhece dP.

• Envia (M, S), a mensagem e a assinatura, para o Jo˜ao. Para que o Jo˜ao verifique a autenticidade da assinatura S basta:

• Calcular a impress˜ao digital da mensagem, h0 = MD5(M ).

• Restaurar a impress˜ao digital assinada, usando a chave p´ublica do Pedro, calculando: h ≡ ScP (mod n

P).

Note-se que qualquer pessoa poderia efectuar esta opera¸c˜ao, uma vez que cP ´e um

parˆametro da chave p´ublica RSA.

• Se h e h0 ao iguais, ent˜ao a mensagem M e a assinatura S s˜ao consideradas v´alidas,

certificando que a mensagem n˜ao foi modificada ap´os a assinatura da mesma. A rejei¸c˜ao da assinatura significa que a mensagem ou a assinatura sofreram altera¸c˜oes. Infelizmente, a assinatura digital pode apenas certificar que a mensagem foi modificada, mas n˜ao o que foi modificado e quanto foi modificado.

Este esquema tem vantagens adicionais.

• O documento e a assinatura podem ser guardados em locais diferentes, o que dificulta ainda mais as falsifica¸c˜oes.

• O documento pode ser armazenado em forma leg´ıvel, o que facilita o acesso e a leitura.

• O espa¸co necess´ario para guardar a assinatura ´e bem pequeno.

E o mais interessante, relacionado com privacidade e outros aspectos legais:

• O documento pode ser mantido secreto; somente a sua assinatura necessita de ser tornada p´ublica. S´o quando a autoria de um documento, ou de uma ideia, tenha de ser comprovada ´e que o documento precisa ser tornado p´ublico.

Por outro lado, um utilizador I pode querer proteger apenas a autenticidade de uma mensagem sem esconder o seu conte´udo. Tais esquemas s˜ao denominados MAC (Message Authentication Code) que passamos a descrever:

• Geramos uma chave secreta K.

• Concatenamos a chave secreta K `a mensagem M e calculamos a impress˜ao digital : h = MD5(M k K).

(O s´ımbolo k representa a concatena¸c˜ao)

• Com a chave privada do utilizador I, assinamos o valor h, S ≡ hdI (mod n

I).

Somente algu´em que conhece a chave K pode repetir o processo sobre M para verificar a autenticidade da mensagem M . Isto impede terceiros de forjar uma assinatura de um documento modificado M0 a partir do documento M , uma vez que tamb´em necessitam da chave privada K para assinar o documento M0!

Cap´ıtulo 2

Gera¸c˜ao de n´umeros

pseudoaleat´orios e algumas

aplica¸c˜oes

2.1

Introdu¸c˜ao

As sequˆencias de n´umeros aleat´orios s˜ao uma importante fonte de recursos, de uso bastan- te variado. S˜ao usadas para testar microprocessadores de computadores e para programar slot machines. Permitem conceber algoritmos probabil´ısticos eficientes que resolvem pro- blemas dif´ıceis de solucionar por meio de algoritmos determin´ısticos.

Por exemplo, o c´alculo de um integral pode ser muito dif´ıcil mesmo atrav´es de inte- gra¸c˜ao num´erica, mas pode ser rapidamente obtido recorrendo a pequenos programas que usam sequˆencias aleat´orias. Um m´etodo que use sequˆencias de n´umeros aleat´orios para efectuar c´alculos ´e tamb´em denominado “ m´etodo de Monte Carlo” 2.3.

Muitos criptossistemas necessitam de gerar quantidades imprevis´ıveis que devem ser mantidas secretas, que n˜ao podem ser descobertas por terceiros. Por exemplo, s˜ao ne- cess´arios n´umeros aleat´orios para gerar chaves privadas e p´ublicas de criptossistemas as- sim´etricos tal como RSA (§1.2), DSA [25], e Diffie e Hellman [25]. As chaves secretas para criptossistemas sim´etricos s˜ao tamb´em geradas aleatoriamente. A cifra de Vernam – o sistema de cifragem mais seguro – necessita de uma quantidade de n´umeros aleat´orios para gerar a chave secreta t˜ao grande como a quantidade de letras da mensagem a enviar!

(ver exemplo 1.0.1).

Documentos relacionados