Anar al contingut

Intercanvi de claus de Diffie-Hellman

De L'Enciclopèdia, la wikipedia en valencià

El protocol criptográfico Diffie-Hellman, per Whitfield Diffie i Martin Hellman (autors també del problema de Diffie-Hellman o DHP), és un protocol d'establiment de claus entre parts que no han tingut contacte previ, utilisant un canal insegur i de manera anònima (no autenticada).

S'ampra generalment com a mig per a acordar claus simètriques que seran amprades per al sifrat d'una sessió (establir clau de sessió). Sent no autenticado, no obstant, proveïx les bases per a varis protocols autenticados.[1] La seua seguritat radica en l'extrema dificultat (conjeturada, no demostrada) de calcular logaritmos discrets en un cos finito.[1]

El método du el nom dels criptógrafos Whitfield Diffie i Martin Hellman, els qui ho varen desenrollar i varen publicar en 1976[2] i varen rebre el prestigiós premi A.M. Turing de 2015 per este treball "que va revolucionar la seguritat informàtica".[3]

Versió bàsica

[editar | editar còdic]

El sistema es basa en l'idea de que dos interlocutors poden generar conjuntament una clau compartida sense que un intrús, que estiga escoltant les comunicacions, puga aplegar a obtindre-la.

Per a això s'elegixen dos números públics i, cada interlocutor, un número secret. Usant una fòrmula matemàtica, que inclou la exponenciación, cada interlocutor fa una série d'operacions en els dos números públics i el seu número secret. A continuació els interlocutors s'intercanvien els resultats de forma pública. En teoria, revertir esta funció és tan difícil com calcular un logaritmo discret (un sextillón de voltes més costosa que la exponenciación usada per a transformar els números). Per tant, es diu que este número és el resultat d'aplicar una funció unidireccional al número secret.

A continuació, abdós interlocutors utilisen per separat una fòrmula matemàtica que combina els dos números transformats en el seu número secret i al final els dos apleguen al mateix número resultat, que serà la clau compartida.

Descripció detallada

[editar | editar còdic]
Diffie-Hellman.

Per a dos parts Alice i Bob, que intenten establir una clau secreta, i un adversari Mallory, la versió bàsica és com seguix:

  • S'establixen un primer p i un generador g𝐙p* ([4]). Estos són públics, coneguts no solament per les parts. Alice i Bob sino també per l'adversari Mallory.
  • Alice tria a𝐙p1 a l'encert, calcula A=gamodp, i envia A a Bob.
  • Bob tria b𝐙p1 a l'encert, calcula B=gbmodp, i envia B a Alice.

Note's que tant A com B poden calcular el valor K=gabmodp. En efecte, ho podem demostrar usant les propietats del grup 𝐙p*:

Per a Alice: Bamodp=(gbmodp)amodp=((gbmodp)(gbmodp)(gbmodp)a)modp=gbamodp=gabmodp=K
Per a Bob: Abmodp=(gamodp)bmodp=((gamodp)(gamodp)(gamodp)b)modp=gabmodp=K

Com abdós parts poden calcular K, llavors la podem usar com a clau compartida.

Un adversari Mallory, que posseïra (p,g,A,B), podria calcular el secret compartit si tinguera també un dels valors privats (a o b). Obtindre a o b a partir de A o B invertint la funció ( a=logdiscp(A) i b=logdiscp(B)) és el problema del logaritmo discret en 𝐙p*, un problema que es creu intractable computacionalment sempre que p siga un número primo gran de 200 o més dígits i que no complixquen certes característiques debilitantes.[5]

El protocol és sensible a atacs actius del tipo Man-in-the-middle. Si la comunicació és interceptada per un tercer, este es pot fer passar per l'emissor cara al destinatari i viceversa, ya que no es dispon de cap mecanisme per a validar l'identitat dels participants en la comunicació. Aixina, el "home en el mig" podria acordar una clau en cada participant i retransmetre les senyes entre ells, escoltant la conversació en abdós sentits. Una volta establida la comunicació simètrica, l'atacant té que seguir en mig interceptant i modificant el tràfic per a que no es donen conte. Observar que per a que l'atac siga operatiu, l'atacant té que conéixer el método de sifrat simètric que serà utilisat. Basar-se en l'ocultació d'algoritme simètric de sifrat no complix en els principis de Kerckhoffs (l'efectivitat del sistema no deu dependre de que el seu disseny permaneixca en secret).

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

Per a evitar este tipo d'atac, se sol usar una o més de les següents tècniques:

  • Control de temps.
  • Autenticació prèvia de les parts. Per eixemple, usar en protocol de capa subjacent autenticació. Podríem primer establir una conexió TLS i sobre eixa capa aplicar l'algoritme de Diffie-Hellman.
  • Autenticació del contingut. Per eixemple, podríem usar MAC sobre el contingut dels mensages.
  • Sifrant les claus públiques en un algoritme de clau pública (asimètric), evitant el problema de Man-in-the-middle, i a la seua volta comprovant que la clau pública siga distinta de 0 i 1.
  • Usar un tercer (Carol) en el que o be Alice o be Bob mantenen un canal segur. Este tercer pot detectar el man-in-the-middle

si Alice o Bob estan sent escoltats/modificats, simplement desafiant a abdós a una prova implicant en dita prova la clau pública de l'atre. Si Mallory tergiversa la comunicació Alice-Bob, i també l'Alice-Carol, no pot tergiversar el canal segur Bob-Carol i serà detectat. I si tergiversa l'Alice-Bob i la Bob-Carol, no pot tergiversar l'Alice-Carol (per definició deu haver algun canal segur entre dos dels tres, encara que els atres dos canals siguen tergiversats per Mallory). Açò significa que el método Diffie-Hellman pot crear rets de múltiples nodos 100% segures, a partir de tan sol dos nodos prèviament segurs. Este método també servix per a testear canals que se sospita que puguen ser insegurs.

Eixemple

[editar | editar còdic]
Alice
Sec Calc
p, g
a
ga mod p
(gb mod p)a mod p
=
Bob
Calc Sec
p, g
b
gb mod p
(ga mod p)b mod p
  1. Alice i Bob acorden usar l'número primo p=23 i la base g=5.
  2. Alice elegix un número secret a=6, després envia a Bob (ga mod p)
    • 56 mod 23 = 8.
  3. Bob elegix un número secret b=15, després envia a Alice (gb mod p)
    • 515 mod 23 = 19.
  4. Alice calcula (gb mod p)a mod p
    • 196 mod 23 = 2.
  5. Bob calcula (ga mod p)b mod p
    • 815 mod 23 = 2.

Eixemple en implementació de sifrat

[editar | editar còdic]

La necessitat per a este eixemple és: Bob necessita enviar-li un text sifrat a Alice pero sense compartir la clau de sifrat. ¿Cóm ho fa?

  1. Alice elegix un número secret a=6, l'número primo p=23 i la base g=5. Després envia a Bob la clau pública d'Alice (ga mod p), p i g:
    • 56 mod 23 = 8.
    • 23
    • 5
  2. Bob elegix un número secret b=15, després Bob calcula la clau de sifrat comuna (ga mod p)b mod p
    • 815 mod 23 = 2.
  3. Bob sifra, en un cifrador simètric com AES, el text clar usant la clau de sifrat generada.
  4. TextoCifrado = CifradorSimetrico ( TextoClaro, 2 )
  5. Bob envia a Alice el text sifrat i la clau pública de Bob (gb mod p)
    • 515 mod 23 = 19.
    • TextoCifrado
  6. Alice calcula (gb mod p)a mod p
    • 196 mod 23 = 2.
  7. Alice usa eixa clau de sifrat generada per a dessifrar les senyes enviades per Bob
  8. TextoClaro = DescifradorSimetrico ( TextoCifrado, 2 )

Valors molt més grans de a,b i p es necessitarien per a fer este eixemple segur. Ya que és molt senzill provar tots els valors possibles de gab mod 23 (hi haurà, com a màxim, 22 valors, inclusivament si a i b són números grans).

Òbviament la necessitat d'Alice d'enviar-li a Bob l'informació sifrada també la cobrix l'implementació.

Generalisacions

[editar | editar còdic]

Aumentant el número de parts

[editar | editar còdic]

L'idea de l'algoritme podem generalisar-la a la negociació de claus entre més de dos entitats. Vejam un eixemple per a tres entitats i a partir d'ahí podem aumentar el número de parts de forma fàcil:

  1. Les parts (Alice, Bob i Carol) es posen d'acort en els paràmetros de l'algoritme p i g.
  2. Les parts generen les seues pròpies claus privades cridades a, b, i c respectivament.
  3. Alice calcula gamodp i ho envia a Bob.
  4. Bob calcula (ga)bmodp=gabmodp i ho envia a Carol.
  5. Carol calcula (gab)cmodp=gabcmodp i l'usa com la seua clau secreta.
  6. Bob calcula gbmodp i ho envia a Carol.
  7. Carol calcula (gb)cmodp=gbcmodp i ho envia a Alice.
  8. Alice calcula (gbc)amodp=gbcamodp=gabcmodp i ho usa com la seua clau secreta.
  1. Carol calcula gcmodp i ho envia a Alice.
  2. Alice calcula (gc)amodp=gcamodp i ho envia a Bob.
  3. Bob calcula (gca)bmodp=gcabmodp=gabcmodp i ho usa com la seua clau secreta.

Canviant de grup

[editar | editar còdic]

Podem generalisar el protocol i els seus derivats si en lloc de basar-nos en el grup 𝐙p* nos basem en atres grups que complixquen les condicions necessàries per a poder aplicar l'algoritme (GDHP<-Generalized Diffie-Hellman Problem)

Formalisació

[editar | editar còdic]
  1. Els usuaris A i B seleccionen públicament un grup multiplicativo finito G d'orde n i generador gG l'operació del qual multiplicació és una operació d'una via (no té inversa o difícilment invertible)
  2. L'usuari A genera un número aleatori a,1an1, calcula gaG i transmet este element a B, mantenint secret a #

L'usuari B genera un número aleatori b,1bn1, calcula gbG i transmet este element a A, mantenint secret b

  1. L'usuari A rep gb i calcula (gb)aG
  2. L'usuari B rep ga i calcula (ga)bG
  3. A i B posseïxen un element comú secret del grup gab

Eixemples

[editar | editar còdic]

Eixemples de grups que podríem usar: El grup multiplicativo anàlec dels camps de Galois 𝔽2n, el grup de punts definits per una curva elíptica sobre un cos finito.

Referències

[editar | editar còdic]
  1. 1,0 1,1 Plantilla:Cita CCN-STIC-401
  2. New Directions in Cryptography” . IEEE Transactions on Information Theory 22 (6): 644–654. doi:10.1109/TIT.1976.1055638.
  3. «Cryptography pioneers receive ACM A.M. Turing Award». Association for Computing Machinery. Consultat el 15 de giner de 2024.
  4. Ací 𝐙p* és el conjunt dels sancers menors que p que són cosins relatius de p, que és un grup baix la multiplicació mòdul p.
  5. Gordon, D. M. Designing and Detecting Trapdoors for Discrete Log. Cryptosystems. Advances in Cryptology-CRYPTO92, Berlin:Springer Verlag pp 66-75

Bibliografia adicional

[editar | editar còdic]


Referències

[editar | editar còdic]