Troca de chaves de Diffie–Hellman: diferenças entre revisões
Conteúdo apagado Conteúdo adicionado
m Tradução de imagem troca de chave Diffie-Hellman |
|||
Linha 15:
Diffie-Hellman estabelece um compartilhamento de chaves secreto que pode ser usado para troca de mensagens secretas dentro de um canal de comunicação público. O diagrama a seguir ilustra a ideia geral de troca de chaves usando cores ao invés de um número muito grande.
# Inicialmente, uma cor em comum é compartilhada entre Alice e
# O passo seguinte é a escolha de Alice e
# Cada um faz uma mistura primária com a cor comum e com suas cores secretas.
# O passo chave do processo é que Alice e
# Alice e
Alice e
[[Ficheiro:Diffie-Hellman.jpg|centro|miniaturadaimagem|468x468px|Esquema de troca de chaves de Diffie-Hellman]]
A mais simples e original implementação do protocolo utiliza grupos multiplicativos de inteiros módulo "''p"'', onde "''p"'' é um [[número primo]] e "''g"'' é uma raiz primitiva de módulo "''p"''. Aqui está um exemplo do protocolo, onde os valores públicos estão em <span style="color:blue">azul</span> e os valores secretos estão em <span style="color:red"> '''vermelho e destacados''' </span>:
Linha 29:
! colspan="3" | Alice
| <br>
| align="center" colspan="3" | '''
|-
| bgcolor="#d0d0d0" align="center" style="font-size: 90%;" | Secreto
Linha 72:
|}
# [[Alice e
# Alice escolhe um inteiro secreto '''''<span style="color:red">a</span>'''''='''<span style="color:red">6</span>''', e então envia a
#* <span style="color:blue">A</span> = <span style="color:blue">5</span><sup>'''<span style="color:red">6</span>'''</sup> mod <span style="color:blue">23</span>
#* <span style="color:blue">A</span> = '''<span style="color:red">15.625</span>''' mod <span style="color:blue">23</span>
#* <span style="color:blue">A</span> = <span style="color:blue">8</span>
#
#* <span style="color:blue">B</span> = <span style="color:blue">5</span><sup>'''<span style="color:red">15</span>'''</sup> mod <span style="color:blue">23</span>
#* <span style="color:blue">B</span> = '''<span style="color:red">30.517.578.125</span>''' mod <span style="color:blue">23</span>
Linha 85:
#* '''<span style="color:red">s</span>''' = '''<span style="color:red">47.045.881</span>''' mod <span style="color:blue">23</span>
#* '''<span style="color:red">s</span>''' = '''<span style="color:red">2</span>'''
#
#* '''<span style="color:red">s</span>''' = <span style="color:blue">8</span><sup>'''<span style="color:red">15</span>'''</sup> mod <span style="color:blue">23</span>
#* '''<span style="color:red">s</span>''' = '''<span style="color:red">35.184.372.088.832</span>''' mod <span style="color:blue">23</span>
#* '''<span style="color:red">s</span>''' = '''<span style="color:red">2</span>'''
# Alice e
#* '''<span style="color:red">s</span>''' = <span style="color:blue">5</span><sup>'''<span style="color:red">6*15</span>'''</sup> mod <span style="color:blue">23</span>
#* '''<span style="color:red">s</span>''' = <span style="color:blue">5</span><sup>'''<span style="color:red">15*6</span>'''</sup> mod <span style="color:blue">23</span>
Linha 96:
#* '''<span style="color:red">s</span>''' = '''<span style="color:red">2</span>'''
Tanto Alice quanto
É claro que valores bem maiores de ''a'', ''b'', e ''p'' seriam necessários para tornar este exemplo seguro, uma vez que é fácil tentar todos os possíveis valores de ''g<sup>ab</sup>'' mod 23. Existem apenas 23 possíveis inteiros que possuem os resultados observados para mod 23. Por outro lado, se ''p'' for um primo de ao menos 300 dígitos e ''a'' e ''b'' tenham ao menos 100 dígitos, então até os melhores algoritmos conhecidos atualmente não poderiam encontrar ''a'' dado apenas ''g'', ''p'', ''g<sup>b</sup>'' mod ''p'' e ''g<sup>a</sup>'' mod ''p'', mesmo usando todo o poder computacional existente na humanidade. Tal problema é conhecido como problema do [[logaritmo discreto]]. Note que ''g'' não precisa ser necessariamente grande, e na prática seus valores são usualmente 2 ou 5.
Linha 103:
Aqui está uma descrição mais genérica do protocolo:
# Alice e
# Alice escolhe um [[número natural]] aleatório ''a'' e envia ''g<sup>a</sup>'' para
#
# Alice calcula (''g<sup>b</sup>'')''<sup>a</sup>''.
#
Tanto Alice quanto
Com o objetivo de decifrar uma mensagem ''m'', enviada como ''mg<sup>ab</sup>'',
Quando Alice envia a
=== Gráfico ===
== Operação com mais de duas partes ==
O esquema de acordo de chaves Diffie-Helman não está limitado à interação entre apenas dois participantes. Qualquer número de usuários pode participar no acordo, executando as interações do protocolo e trocando os dados intermediários entre si. Por exemplo, Alice,
# Os participantes selecionam os parâmetros iniciais do algoritmo <math>p</math> e <math>g</math>;
# Os participantes geram suas respectivas chaves privadas, que chamaremos <math>a</math>, <math>b</math> e <math>c</math>.
# Alice calcula <math>g^a</math> e envia o resultado para
#
# Carol calcula <math>(g^{ab})^c = g^{abc}</math> e utiliza esse valor como sua chave secreta compartilhada.
#
# Carol calcula <math>(g^b)^c = g^{bc}</math> e envia o resultado para Alice.
# Alice calcula <math>(g^{bc})^a = g^{bca} = g^{abc}</math> e utiliza o resultado como chave secreta compartilhada.
# Carol calcula <math>g^c</math> e envia para Alice.
# Alice calcula <math>(g^c)^a = g^{ca}</math> e envia o resultado para
#
Um intruso com acesso ao canal onde essas mensagens foram trocadas foi capaz de observar os valores <math>g^a</math>, <math>g^b</math>, <math>g^c</math>, <math>g^{ab}</math>, <math>g^{ac}</math>, e <math>g^{bc}</math>, mas não pode usar qualquer combinação desses valores para reproduzir <math>g^{abc}</math>.
|