A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Criptografia Numaboa

O algoritmo Diffie-Hellman

Ter

4

Out

2005


17:36

(95 votos, média 4.75 de 5) 


O algoritmo Diffie-Hellman

No início de 1976, Hellman estava analisando um axioma que já existe há algumas centenas de anos. A idéia era usar a função na forma de

          gx (mod n)

Para que a mágica funcionasse, havia algumas restrições:

          g (a base) precisa ser menor do que n (o módulo)
                                  e
          g precisa ser maior do que 1

Para obter as chaves, João e Maria podem trocar informações abertamente, sem a mínima preocupação com alguém que esteja presente ou que eventualmente esteja interceptando estas informações. Em apenas 4 etapas, os dois terão uma chave secreta.

1. A escolha da base e do módulo

Inicialmente João e Maria escolhem dois números grandes, um para a base g e um para o módulo n, obedecendo as restrições citadas acima. Esta escolha não necessariamente envolve apenas os dois, mais pessoas podem participar do grupo de usuários. Para facilitar, será usado um exemplo com números pequenos e apenas com João e Maria. Digamos que eles, durante o intervalo das aulas, tenham concordado com

          g = 7
            e
          n = 11
2. A escolha dos expoentes

Depois, na privacidade da sua casa, João escolhe um expoente x bem grande. Este número João mantém cuidadosamente em segredo. Maria faz a mesma coisa e também mantém sua escolha em segredo. De posse dos seus expoentes, os dois calculam o resultado da função:

                   MARIA                         JOÃO
          --------------------------     --------------------------
          x = 6                          y = 3

          M = 76 (mod 11)                J = 73 (mod 11)
          M = 117649 (mod 11)            J = 343 (mod 11)
          M = 4                          J = 2
3. A troca de resultados

No dia seguinte, os dois se encontram novamente no intervalo das aulas. Maria entrega o resultado obtido (M=4) para João e este entrega o resultado que obteve (J=2) para Maria. Mais uma vez, nenhum dos dois está preocupado que alguém tome conhecimento destes números.

4. O cálculo da chave secreta

Com o resultado obtido pelo outro, João e Maria voltam a fazer cálculos em particular. Usam a mesma função só que, desta vez, a base usada por Maria é o resultado obtido por João e a base usada por João é o resultado obtido por Maria. Os expoentes continuam sendo os previamente escolhidos:

                   MARIA                          JOÃO
          --------------------------      --------------------------
          x = 6                           y = 3

          J' = 26 (mod 11)                M' = 43 (mod 11)
          J' = 64 (mod 11)                M' = 64 (mod 11)
          J' = 9                          M' = 9

Como num passe de mágica, ambos chegaram ao mesmo resultado e agora possuem uma chave secreta em comum smile

Algumas considerações

A chave secreta nada mais é do que gxy (mod n). Para confirmar, basta fazer os cálculos:

          gxy (mod n) = 76 x 3 (mod 11)
                      = 718 (mod 11)
                      = 1.628.413.597.910.449 (mod 11)
                      = 9

Mesmo que se conheça os valores de g, n, M e J não é possível calcular o valor da chave secreta. Se usarmos o método das tentativas (ou seja, a força bruta) poderemos encontrar inúmeros valores que fecham as primeiras equações. Por exemplo, no caso de Maria, os valores possíveis de x são 6, 16, 26, ..., 6 + 10n e, no caso de João, os valores possíveis de y são 3, 13, 23, ..., 3 + 10n. Tanto x quanto y podem ter infinitos valores de acordo com as progressões aritméticas citadas e estes valores precisariam ser agrupados em todos os pares possíveis para tentar encontrar a chave - uma tarefa impossível de ser realizada se os valores escolhidos forem grandes o suficiente.

Mas não são apenas os valores suficientemente grandes dos expoentes que conferem segurança a este sistema. A escolha de g e n também tem uma influência acentuada. O módulo n deve ser um número primo e, mais importante do que isto, (n-1)/2 também deve ser um número primo. A base g, por sua vez, deve ser uma raiz primitiva no módulo n (mais sobre o assunto logo a seguir). Agora, o mais importante de tudo é que n deve ser grande, ter no mínimo 512 bits (ou seja, ter 64 bytes, o que é o mesmo que 64 algarismos). Usar 1028 bits seria mais seguro.

Informações adicionais