Intercambio de claves Diffie-Hellman

O protocolo de intercambio de claves Diffie-Hellman foi o primeiro algoritmo de clave pública. Foi desenvolvido por Whitfield Diffie e Martin Hellman en 1976, e baséase nas propiedades dos logaritmos discretos. É un protocolo de intercambio de clave simétrica, é dicir, emprégase para acordar unha clave común, K {\displaystyle K}, entre interlocutores, pero non para cifrar e descifrar. Utilízase cando a canle de comunicacións para intercambiar a clave simétrica non é segura. Descrición do algoritmo
Definición matemática xeral
Sexa G {\displaystyle G} un grupo multiplicativo e sexa g ∈ G {\displaystyle g\in G} un xerador de G {\displaystyle G}. Tense que o par ( G, g ) {\displaystyle (G, g)} é a clave pública e que a clave privada é un enteiro aleatorio que selecciona cada individuo e que manteñen en segredo. Sexa a ∈ G {\displaystyle a\in G} o enteiro que selecciona un individuo e b ∈ G {\displaystyle b\in G} o enteiro que selecciona o outro. Cada un envíalle ao outro x
g a {\displaystyle x
g^{a}} ou y
g b {\displaystyle y
g^{b}}, respectivamente. Deste xeito, cada un deles pode obter a clave K {\displaystyle K} de forma independente, pois, facendo as operacións dentro do grupo, tense que K
y a
g a b
x b {\displaystyle K
y^{a}
g^{ab}
x^{b}}.
Definición habitual
Como caso particular, adóitase empregar como grupo multiplicativo o grupo Z p {\displaystyle \mathbb {Z} _{p}}, con p {\displaystyle p} primo. É dicir, o grupo é o conxunto de números comprendidos entre 0 {\displaystyle 0} e p − 1 {\displaystyle p-1}, ambos incluídos. Como xerador, utilízase un g ∈ Z p {\displaystyle g\in \mathbb {Z} _{p}}. Así, o par ( p, g ) {\displaystyle (p, g)} é a clave pública. Agora, cada usuario escolle un número aleatorio dentro do grupo, a {\displaystyle a} e b {\displaystyle b}, e envíalle ao outro usuario, x
g a ( mod p ) {\displaystyle x
g^{a}{\pmod {p}}} e y
g b ( mod p ) {\displaystyle y
g^{b}{\pmod {p}}}, respectivamente. Para obter a clave K {\displaystyle K}, cada un deles ten que facer, respectivamente, a operación K
y a ( mod p ) {\displaystyle K
y^{a}{\pmod {p}}} e K
x b ( mod p ) {\displaystyle K
x^{b}{\pmod {p}}}.
Exemplo
Ánxela e Breixo queren acordar unha clave simétrica para utilizar no cifrado simétrico. Para iso, acordan publicamente dous números: o primo p {\displaystyle p} e o xerador g {\displaystyle g}. Toman p
11 {\displaystyle p
11} e g
3 {\displaystyle g
3}.
Agora, Ánxela escolle un número aleatorio a
5 {\displaystyle a
5}, calcula x
g a ( mod p )
35 ( mod 11 ) {\displaystyle x
g^{a}{\pmod {p}}
3^{5}{\pmod {11}}}, é dicir, x
1 {\displaystyle x
1}, e envíallo a Breixo.
Por outra banda, Breixo escolle tamén un número aleatorio, neste caso, b
7 {\displaystyle b
7}, e envíalle a Ánxela y
g b ( mod p )
37 ( mod 11 ) {\displaystyle y
g^{b}{\pmod {p}}
3^{7}{\pmod {11}}}, é dicir, y
9 {\displaystyle y
9}.
A continuación, Ánxela calcula y a ( mod p )
95 ( mod 11 )
1 {\displaystyle y^{a}{\pmod {p}}
9^{5}{\pmod {11}}
1}, e Breixo calcula x b ( mod p )
17 ( mod 11 )
1 {\displaystyle x^{b}{\pmod {p}}
1^{7}{\pmod {11}}
1}. Como vemos, ambos números son iguais, polo que K
1 {\displaystyle K
1} é a clave que poden empregar para o cifrado simétrico. Características
A vantaxe deste algoritmo é que obter a clave sen coñecer algún dos números privados é computacionalmente inviable cando p {\displaystyle p} se fai moi grande. Porén, hai que ter coidado na escolla do grupo, pois en función de como se seleccione, pode ser que descompoñer a orde do grupo sexa relativamente sinxelo. O exemplo anterior deu como clave K
1 {\displaystyle K
1}, pois Ánxela, ao facer a primeira operación, obtivo como resultado un 1 {\displaystyle 1}. Neste caso, Ánxela tería que escoller outro número privado, pois no caso de que algunha das operacións dea 1 {\displaystyle 1} ( g a ( mod p )
1 {\displaystyle g^{a}{\pmod {p}}
1} ou g b ( mod p )
1 {\displaystyle g^{b}{\pmod {p}}
1} ), é sinxelo descompoñer a orde do grupo, facilitando ataques computacionais. O grupo máis empregado (sen ter en conta o mundo das curvas elípticas) é ( Z p ∗ ) 2 {\displaystyle (\mathbb {Z} _{p}^{*})^{2}}, onde p
2 q + 1 {\displaystyle p
2q+1} e q {\displaystyle q} é un primo de Sophie-Germain.
Outra característica deste protocolo é que serve para transmitir información por canles non seguras. Isto débese a que aínda que se poidan ver os números x {\displaystyle x} e y {\displaystyle y} que viaxan pola rede, ao non coñecer a {\displaystyle a} e b {\displaystyle b}, é imposible coñecer a clave. Susceptible a ataques man-in-the-middle
Este algoritmo só funciona correctamente se hai a certeza de que quen está enviando a información é quen di ser. Pero isto non ten por que ser sempre así, xa que pode ser que no momento de transmitir os datos do algoritmo, alguén os intercepte e os modifique. Este tipo de ataque chámase atacante no medio, comunmente coñecido en inglés como man-in-the-middle. Na imaxe pódese observar como o atacante intercepta os datos e engana aos interlocutores. Ánxela pensa que lle está enviando o valor x
1 {\displaystyle x
1} a Breixo, pero en realidade, estallo enviando ao atacante, pois este interceptou a mensaxe. O atacante tamén colleu un número privado, igual que Ánxela e Breixo: c
5 {\displaystyle c
5}. Agora, o atacante calcula co seu número privado K 1
x c ( mod p )
14 ( mod 11 )
1 {\displaystyle K1
x^{c}{\pmod {p}}
1^{4}{\pmod {11}}
1}, e envíalle a Ánxela z
g c ( mod p )
34 ( mod 11 )
4 {\displaystyle z
g^{c}{\pmod {p}}
3^{4}{\pmod {11}}
4}. A continuación, Ánxela calcula K 1
z a ( mod p )
45 ( mod 11 )
1 {\displaystyle K1
z^{a}{\pmod {p}}
4^{5}{\pmod {11}}
1}, pensando que z {\displaystyle z} é o valor que lle devolveu Breixo. Así, o atacante e Ánxela xa teñen unha clave coa que poden cifrar e descifrar mensaxes, pero Ánxela pensa que está compartindo a clave con Breixo, non co atacante.
De igual modo ocorre con Breixo. Este mándalle a Ánxela o valor y {\displaystyle y}, mais o atacante no medio intercéptao e recíbeo. Fai a operación K 2
y c ( mod p )
94 ( mod 11 )
5 {\displaystyle K2
y^{c}{\pmod {p}}
9^{4}{\pmod {11}}
5} e envíalle a Breixo z
g c ( mod p )
34 ( mod 11 )
4 {\displaystyle z
g^{c}{\pmod {p}}
3^{4}{\pmod {11}}
4}. Breixo, que pensa que este número foi o que lle mandou Ánxela, calcula K 2
z b ( mod p )
47 ( mod 11 )
5 {\displaystyle K2
z^{b}{\pmod {p}}
4^{7}{\pmod {11}}
5}, polo que agora Breixo e o atacante teñen unha clave única coa que cifrar mensaxes.
Así, cando Breixo lle mande unha mensaxe a Ánxela, cífraa coa clave K 2 {\displaystyle K2}, o atacante intercéptaa, descífraa coa clave K 2 {\displaystyle K2} e ve o contido da mensaxe. Despois de lela, cifra a mensaxe coa clave K 1 {\displaystyle K1} e mándalla a Ánxela. Deste xeito, a comunicación entre Ánxela e Breixo xa non é privada. Se o que quere o atacante é modificar a información en vez de lela, unha vez descifre coa clave de Breixo, pode escoller outro texto distinto, cifralo coa clave de Ánxela e enviarllo. Así, Ánxela pensa que foi Breixo quen mandou esas mensaxes, mais están modificadas polo atacante.
Evitar o ataque man-in-the-middle
Para evitar o ataque anteriormente mencionado é necesario estar seguros de que a persoa que nos manda a información é quen di ser. Isto pódese solucionar cun protocolo de firma de clave pública ou transmitindo as mensaxes por unha canle segura, onde os atacantes non poidan capturar as mensaxes intercambiadas. Usos
O protocolo Diffie-Hellman úsase para intercambiar claves simétricas, que logo se usarán para cifrar mensaxes, cando a canle de comunicación non é segura. Para que un protocolo sexa seguro, a información ten que ir cifrada. Xeralmente cífrase co protocolo de clave simétrica, onde se precisa unha clave común entre os usuarios que realizan a comunicación. Os integrantes da comunicación teñen que compartir esa clave dalgún xeito entre eles, e se a canle de comunicación non é segura, calquera pode interceptala, podendo descifrar as mensaxes posteriores que se cifren con ela. Por tanto, utilízase este protocolo ao inicio das comunicacións para intercambiar as claves, pois non é necesario unha canle segura para que ambas partes obteñan a clave.
O intercambio de claves Diffie-Hellman utilízase na maioría de protocolos seguros. Algúns deles son SSL e TLS, SSH, SecureFTP ou IPsec.