Diffie-Hellman

o sistema baseia-se na ideia de que dois interlocutores podem gerar conjuntamente uma chave compartilhada sem que um intruso, que esteja escutando as comunicações, possa chegar a obtê-la.

para isso, são escolhidos dois números públicos e, cada interlocutor, um número secreto. Usando uma fórmula matemática, que inclui exponenciação, cada interlocutor faz uma série de operações com os dois números públicos e seu número secreto. Em seguida, os interlocutores trocam os resultados de forma pública. Em teoria, reverter essa função é tão difícil quanto calcular um logaritmo discreto (um sextillon de vezes mais caro do que a exponenciação usada para transformar os números). É por isso que se diz que esse número é o resultado da aplicação de uma função unidirecional ao número secreto.

em seguida, ambos os interlocutores usam separadamente uma fórmula matemática que combina os dois números transformados com seu número secreto e no final os dois chegam ao mesmo número resultado, que será a chave compartilhada.

Descrição detalhadaeditar

Diffie-Hellman.

para duas partes Alice e Bob, que tentam definir uma chave secreta, e um adversário Mallory, a versão básica é como se segue:

  • um primo p {\displaystyle p}
    p

    e um gerador g Z Z p {{\displaystyle g \ in \ mathbf {Z} _ {p}^{*}}

    g \ in {\mathbf {Z}}_{{p}}^{{*}}

    (). Estes são públicos, conhecidos não apenas pelas partes Alice e Bob, mas também pelo adversário Mallory .

  • Alice escolhe a Z Z p-1 {\displaystyle A \ in \ mathbf {Z} _ {p-1}}
    a \ in {\mathbf {Z}}_{{p-1}}

    aleatoriamente, calcule A=G A mod p {\displaystyle A=g^{A}\;{\bmod {\;}}p}

    A = g^{{A}}\; {\bmod \;}p

    , e envia para {\displaystyle A}

    para

    para Bob

  • Bob escolhe b Z Z p − 1 {\displaystyle B \ in \ mathbf {Z} _ {p-1}}
    b \ in {\mathbf {Z}}_{{p-1}}

    aleatoriamente, calcula B = g b mod p {\displaystyle b=g^{b}\;{\bmod {\;}}p}

    B=g^{{b}}\;{\bmod \;}p

    , e envia B {\displaystyle B}

    B

    para Alice

note que tanto a como b podem calcular o valor K = G A mod b mod p {\displaystyle K=G^{A\cdot B}\;{\bmod {\;}}p}

K = G^{{A \ cdot b}}\; {\bmod\;} p

. En efecto, lo podemos demostrar usando las propiedades del grupo Z p ∗ {\displaystyle \mathbf {Z} _{p}^{*}}

{\mathbf {Z}}_{{p}}^{{*}}

: Para Alice: B a mod p = ( g b mod p ) a mod p = ( ( g b mod p ) ( g b mod p ) ⋯ ( g b mod p ) ⏞ a ) mod p = g b ⋅ a mod p = g a ⋅ b mod p = K {\displaystyle B^{a}\;\;{\bmod {\;}}\;p=(g^{b}\;{\bmod {\;}}p)^{a}\;{\bmod {\;}}p=(\overbrace {(g^{b}\;{\bmod {\;}}p)(g^{b}\;{\bmod {\;}}p)\cdots (g^{b}\;{\bmod {\;}}p)} ^{a})\;{\bmod {\;}}p=g^{b\cdot a}\;{\bmod {\;}}p=g^{a\cdot b}\;{\bmod {\;}}p=K}

B^{{a}}\;\;{\bmod \;}\;p=(g^{b}\;{\bmod \;}p)^{a}\;{\bmod \;}p=(\overbrace {(g^{b}\;{\bmod \;}p)(g^{b}\;{\bmod \;}p)\cdots (g^{b}\;{\bmod \;}p)}^{a})\;{\bmod \;}p=g^{{b\cdot a}}\;{\bmod \;}p=g^{{a\cdot b}}\;{\bmod \;}p=K

Para Bob: A b mod p = ( g a mod p ) b mod p = ( ( g a mod p ) ( g a mod p ) ⋯ ( g a mod p ) ⏞ b ) mod p = g a ⋅ b mod p = K {\displaystyle A^{b}\;{\bmod {\;}}p=(g^{a}\;{\bmod {\;}}p)^{b}\;{\bmod {\;}}p=(\overbrace {(g^{a}\;{\bmod {\;}}p)(g^{a}\;{\bmod {\;}}p)\cdots (g^{a}\;{\bmod {\;}}p)} ^{b})\;{\bmod {\;}}p=g^{a\cdot b}\;{\bmod {\;}}p=K}

A^{{b}}\;{\bmod \;}p=(g^{a}\;{\bmod \;}p)^{b}\;{\bmod \;}p=(\overbrace {(g^{A}\;{\bmod \;}p)(g^{A}\;{\bmod \;}p)\cdots (g^{a}\;{\bmod \;}p)}^{b})\;{\bmod \;}p=g^{{A\cdot b}}\;{\bmod \;}p=K

como ambas as partes podem calcular k {\displaystyle K}

K

, então podemos usá-lo como uma chave compartilhada.

Atacoseditar

Ataques passivoseditar

um adversário Mallory, que possuísse p, g, A E B, poderia calcular o segredo compartilhado se tivesse também um dos valores privados (a ou b). Obter a ou b de A ou B invertendo a função (A = L ou g D I S c p A ( a) {\displaystyle A = \ operatorname {log\; disc} _ {p} (A)}

a = \ operatorname {log\; disc} _ {p} (a)

e B = L ou g d I S C p p (B) {\displaystyle b = \ operatorname {log\; disc} _{p}(B)}

 b= \ operatorname {log\;disc} _ {p} (b)

) é o problema do logaritmo discreto em Z p {{\displaystyle \mathbf {Z} _ {p}^{*}}

{\mathbf {Z}}_{{p}}^{{*}}

, um problema que é considerado intratável computacionalmente, desde que p seja um grande número primo de 200 ou mais dígitos e que não atenda a certas características debilitantes.

Ataques ativoseditar

o protocolo é sensível a ataques ativos do tipo Man-in-the-middle. Se a comunicação for interceptada por um terceiro, este pode passar pelo emissor face ao destinatário e vice-versa, uma vez que não existe nenhum mecanismo para validar a identidade dos participantes na comunicação. Assim, o “homem no meio” poderia concordar com uma chave com cada participante e retransmitir os dados entre eles, ouvindo a conversa nos dois sentidos. Uma vez estabelecida a comunicação simétrica, o atacante tem que continuar no meio interceptando e modificando o tráfego para que eles não percebam. Observe que, para que o ataque seja operacional, o invasor precisa conhecer o método de criptografia simétrica que será usado. Basear-se na ocultação de algoritmo de criptografia simétrica não atende aos princípios de Kerckhoffs (a eficácia do sistema não deve depender de seu design permanecer em segredo).

Ataque man-in-the-middle em Diffie-Hellman.

para evitar esse tipo de ataque, geralmente é usada uma ou mais das seguintes técnicas:

  • Controle de tempos.
  • autenticação prévia das partes. Por exemplo, use em protocolo de camada subjacente autenticação. Poderíamos primeiro estabelecer uma conexão TLS e sobre essa camada aplicar o algoritmo de Diffie-Hellman.
  • autenticação do conteúdo. Por exemplo, podemos usar o MAC sobre o conteúdo das mensagens.
  • encriptando as chaves públicas com um algoritmo de chave pública (assimétrico), evitando o problema de Man-in-the-middle, e por sua vez verificando se a chave pública é diferente de 0 e 1.
  • Usar um terceiro (Carol) com o qual Alice ou Bob mantêm um canal seguro. Este terceiro pode detectar o man-in-the-middle

se Alice ou Bob estão sendo ouvidos / modificados, simplesmente desafiando ambos a um teste implicando em tal teste a chave pública do otro.Si Mallory deturpa a comunicação Alice-Bob, e também a Alice-Carol, não pode deturpar o canal seguro Bob-Carol e será detectado.E se você deturpar o Alice-Bob e o Bob-Carol, você não pode deturpar o Alice-Carol (por definição, deve haver algum canal seguro entre dois dos três, mesmo que os outros dois canais sejam deturpados por Mallory). Isso significa que o método Diffie-Hellman pode criar redes de vários nós 100% seguras, a partir de apenas dois nós previamente seguros. Este método também serve para testar canais suspeitos de serem inseguros.

EjemploEditar

→ {\displaystyle \rightarrow }

\rightarrow

← {\displaystyle \esquerda }

\esquerda

=

Alice
Sec Calc
p, g
e
ga mod p
(gb mod p)mod p
Todos
Calc Sec
p, g
b
gb mod p
(ga mod p)b mod p
  1. Alice e Bob concordam em usar o número primo p = 23 e a base g = 5.
  2. Alice escolhe um número secreto a = 6, depois envia Bob (ga mod p)
    • 56 mod 23 = 8.
  3. Bob escolhe um número secreto b = 15 e envia Alice (gb mod p)
    • 515 mod 23 = 19.
  4. Alice calcula (gb mod p)para mod p
    • 196 mod 23 = 2.
  5. Bob calcula (ga mod p) b mod p
    • 815 mod 23 = 2.

exemplo com implementação de cifraeditar

a necessidade para este exemplo é: Bob precisa enviar um texto cifrado para Alice, mas sem compartilhar a chave de criptografia. Cómo como ele faz isso?

  1. Alice escolhe um número secreto a=6, O número primo p=23 e a base g=5. Em seguida, envie a Bob a chave pública de Alice (ga mod p), p E g:
    • 56 mod 23 = 8.
    • 23
    • 5
  2. Bob escolhe um número secreto b = 15, Então Bob calcula a chave de criptografia comum (ga mod p)b mod p
    • 815 mod 23 = 2.
  3. Bob criptografa, com um cifrador simétrico como AES, o texto não criptografado usando a chave de criptografia gerada.
  4. Textocifragem = cifra simétrica (TextoClaro, 2)
  5. Bob envia a Alice o texto cifrado e a chave pública de Bob (gb mod p)
    • 515 mod 23 = 19.
    • Textocriptografia
  6. Alice calcula (gb mod p)para mod p
    • 196 mod 23 = 2.
  7. Alice usa essa chave de criptografia gerada para descriptografar os dados enviados por Bob
  8. TextoClaro = Descriptografadorsimétrico (Textocifragem, 2 )

Valores muito maiores de a, b E p seriam necessários para tornar este exemplo seguro. Já que é muito simples testar todos os valores possíveis do gab mod 23 (haverá, no máximo, 22 valores, inclusive se a e b forem números grandes).

Obviamente, a necessidade de Alice de enviar a Bob as informações criptografadas também é coberta pela implementação.

Leave a Reply