A
troca de chaves de Diffie-Hellman do inglês Diffie-Hellman key exchange é uma
apenas uma especificação de um método de trocas de chaves, pode ser comparado a
uma interface ou um protocolo, a especificação trata muito mais do que deve ser
feito do que como deve ser feito. A especificação da troca de chaves de
Diffie-Hellman é um método que permite que duas partes interessadas em
estabelecer uma comunicação em um canal de comunicação não seguro, e sendo que
estas partes ainda não têm uma chave de segurança compartilhada. Bem, o
protocolo de Diffie-Hellman vem a estabelecer justamente a possibilidade da
criação desta chave compartilhada para que possa existir a comunicação entre as
tais partes interessadas até mesmo posteriormente fazendo a comunicação por um
cifrador simétrico.
Vale mencionar que o protocolo de
troca de chaves de Diffie-Hellman tem alguns vários sinônimos, que são; acordo
de chaves de Diffie-Hellman (Diffie-Hellman
key agreement), estabelecimento de chaves de Diffie-Hellman (Diffie-Hellman key establishment),
negociação de chaves de Diffie-Hellman (Diffie-Hellman
key negotiation), troca de chave exponencial (Exponential key exchange), protocolo de Diffie-Hellman (Diffie-Hellman protocol), aperto de mão
de Diffie-Hellman (Diffie-Hellman
handshake). Portanto, qualquer que seja um dos supracitados dito, estaremos
nos referenciando a mesma especificação de Diffie-Hellman.
O protocolo de Diffie-Hellman foi
desenvolvido em 1976 durante a colaboração entre o Whitefield Diffie e Martin
Hellman e foi o primeiro método a praticar o estabelecimento de uma chave
secreta compartilhada sobre um canal de segurança inseguro, o trabalho de Ralph
Merkle foi uma grande influência, e Merkle notado como um dos inventores, tanto
que o próprio Martin Hellman comentou em 2002 a importância de Merkle e colocou
que o nome do protocolo correto deve ser “Diffie-Hellman-Merkle key exchange”.
O protocolo permitiu em curto prazo o desenvolvimento do sistema RSA que é outro
algoritmo de implementação da criptografia das chaves públicas que utiliza
algoritmos assimétricos (analisaremos este no decorrer do trabalho).
Em suma, a implementação do
protocolo utilizaria naturalmente o Grupo Multiplicativo de inteiros de módulo
p, onde p deve ser um número primo, e precisa também de outra variável que é “g”,
cujo deve ser um primo raiz de “p”.
Um exemplo na prática pode ser mais
claro para ilustrar o estabelecimento da comunicação, para ajudar, dois
personagens sendo eles Alice e Bob irão ilustrar os passos seguintes.
Primeiramente, Alice e Bob devem combinar um número primo e atribuir este valor
para “p”, vamos assumir que o valor é 23, sendo este um número primo válido. É
necessário então obter um valor para “g”, cujo este deve ser um número primo
raiz de “p”, sendo que o valor obtido é então o “5”. Estes valores não são
secretos, são públicos, e trafegam normalmente em no canal não protegido. Agora
Alice deve escolher um valor inteiro e assumir este valor para variável “a”,
cujo podemos assumir o valor 6, então Alice envia para Bob no canal inseguro o
valor de “g” elevado a “a” mod “p”, o valor obtido e a ser enviado a Bob pode
ser denominado como “A”. O valor obtido então para “A” é 8, e o mesmo é enviado
a Bob. Bob agora escolhe um valor inteiro, que deve ser atribuído a “b”, o
valor para nosso exemplo será o valor 15, então ele deve calcular “B” que tem a
expressão “g” elevado a “b” mod “p”. O valor calculado e obtido é o 19, que é
então enviado a Alice. Alice deve então computar para si o valor “s” que é
secreto, cujo obedece a expressão “B” elevado a “a” mod “p”, que obtém 2. Bob
igualmente deve fazer este cálculo, porém com “A” que foi o valor recebido por
Alice, e naturalmente deve obter o mesmo valor que Alice computou, sendo o
valor 2.
Observa-se então que tanto Bob quanto Alice
obtiveram o mesmo resultado no final das contas, e este resultado é a chave
secreta compartilhada entre os dois, o que permite então que dado determinado
método de criptografia simétrica, as duas partes podem manter uma comunicação
segura, pois a chave de segurança foi estabelecida seguramente. Os únicos
valores obtidos secretamente foram “a”, “b” e “s” que foi a chave secreta
compartilhada no final, e os outros valores foram transmitidos em texto claro
na comunicação não segura, os valores de “p”, “g”, “A” e “B”. Na prática, os
valores obtidos para “p”, “a” e “b” não poderiam ser pequenos como o do nosso
exemplo, pois desta maneira um terceiro poderia efetuar algumas poucas tentativas
e acabar descobrindo a chave secreta, o ideal é que o valor para “p” seja um
primo que tenha por volta de 300 dígitos ou mais, e os valores para “a” e “b”
tenha por volta de 100 dígitos ou mais, assim, nem os melhores algoritmos ainda
conhecidos ou os mais potentes computadores poderiam efetuar o cálculo de “a”,
“b” e consequentemente da chave secreta cujo valor é referenciado por “s”.
Desta maneira fica claro que a segurança do algoritmo contra terceiros
maliciosos depende diretamente dos valores “p” que é um primo e dos valores
secretos de cada uma das partes, estes valores devem ser muito grandes.
O exemplo apresentado é claramente utilizado
em contextos em que é definida a chave secreta para comunicação com o protocolo
de Diffie-Hellman e após isto a comunicação deveria ocorrer com a criptografia
simétrica, onde é realidade para alguns protocolos de comunicação como a
comunicação cliente servidor (SSL), onde os personagens Alice e Bob são dois
computadores, ou aplicações como um Browser solicitante e a aplicação no
servidor, que é o requisitado.
De qualquer maneira, o protocolo ou a
especificação Diffie-Hellman pode ser naturalmente utilizado na infra-estrutura
de chaves públicas. Por exemplo, a chave pública de Alice seria formada por (ga,g,p),
sendo que para enviar uma mensagem para Bob, este deveria escolher um valor
randômico “b” e informar este a Alice gb, assim Alice necessitaria
de algoritmo de criptografia simétrico para cifrar a mensagem utilizando a
chave (ga)b. Sendo o protocolo de Diffie-Hellman apenas
uma especificação, então a escolha do algoritmo de criptografia simétrico é
livre ao sistema de chaves públicas a ser implementado, lembrando é lógico que
o algoritmo escolhido pelo remetente para cifrar deve ser informado ao
destinatário para a operação de decifragem.
Nenhum comentário:
Postar um comentário
Obrigado por deixar seu comentário. Volte sempre.