Diffie–Hellman key exchange (tsz. Diffie–Hellman key exchanges)
A Diffie–Hellman kulcscsere (Diffie–Hellman Key Exchange, röviden DHKE) az egyik legelső nyilvános kulcsú kriptográfiai algoritmus, amely lehetővé teszi, hogy két fél biztonságosan állapodjon meg egy közös titkos kulcsról egy nem biztonságos csatornán keresztül – anélkül, hogy korábban bármilyen titkos információt megosztottak volna egymással. Ez a közös kulcs később szimmetrikus titkosításhoz használható az adatok biztonságos átvitelére.
A protokollt 1976-ban fejlesztette ki Whitfield Diffie és Martin Hellman, és ezzel elindították a nyilvános kulcsú kriptográfia korszakát. Bár a koncepció alapjait már korábban is kutatták (például GCHQ-n belül Nagy-Britanniában), a Diffie–Hellman algoritmus volt az első, amit nyilvánosan publikáltak, és a modern titkosítási rendszerek egyik sarokköve lett.
A Diffie–Hellman algoritmus lehetővé teszi, hogy:
A titok az algoritmus mögött a diszkrét logaritmus problémája, ami egy számelméleti nehéz feladat, és nem hatékonyan megoldható a jelenlegi számítástechnikai eszközökkel.
A Diffie–Hellman kulcscsere egy moduláris aritmetikára épül.
p
: egy nagy prímszám (publikus),g
: egy generátor szám, ami kisebb, mint p
(publikus),a
: Alice titkos számválasztása (privát),b
: Bob titkos számválasztása (privát).
p
és g
értékek nyilvánosak, mindkét fél ismeri őket.a
értéket.b
értéket.A = g^a mod p
, és elküldi Bobnak.B = g^b mod p
, és elküldi Alice-nek.K = B^a mod p
.K = A^b mod p
.Mivel:
K = (g^b)^a mod p = (g^a)^b mod p
,
mindkét fél ugyanazt a közös titkos kulcsot kapja.
A nyilvános adatok (p
, g
, A
, B
) ismeretében egy támadó nem tudja hatékonyan visszaszámolni az a
vagy b
titkos értékeket. Ez a diszkrét logaritmus probléma, amely jelenlegi tudásunk szerint számítógéppel nem megoldható reálisan nagy számokra nézve.
Egy támadónak, aki elfogja A
és B
értékeket, gyakorlatilag lehetetlen visszafejteni a titkos a
vagy b
értékeket, hacsak nem tudja gyorsan megoldani a diszkrét logaritmus problémát – ami nem ismert módon lehetséges.
Legyen:
p = 23
(prímszám),g = 5
(generátor).
a = 6
A = 5^6 mod 23 = 15625 mod 23 = 8
b = 15
B = 5^15 mod 23 = 30517578125 mod 23 = 2
Most cserélnek:
B = 2
, számolja: K = 2^6 mod 23 = 64 mod 23 = 18
A = 8
, számolja: K = 8^15 mod 23 = 18
Így a közös titkos kulcs: 18
A Diffie–Hellman algoritmus nem magában áll, hanem gyakran beágyazva használják más protokollokba:
A DHKE az alkalmi kulcsok generálására is használható: minden kapcsolatnál új közös kulcs jön létre, így ha egy kulcs kompromittálódik, az csak egyetlen kapcsolatot érint.
A “DHE” protokoll minden kapcsolatnál új, ideiglenes kulcsokat hoz létre. Ez biztosítja a tökéletes előremenő titkosságot (Perfect Forward Secrecy, PFS), azaz ha a hosszú távú kulcs kompromittálódik, a korábbi kommunikáció akkor sem fejthető vissza.
A Elliptic Curve Diffie–Hellman változat (ECDH) hasonló elven működik, de elliptikus görbék matematikáját használja, ami kisebb kulcsméretek mellett is hasonló biztonságot ad. Ez gyorsabb és kevesebb erőforrást igényel – ezért mobil eszközök és IoT rendszerek esetében különösen előnyös.
Bár a Diffie–Hellman biztonságos a diszkrét logaritmus nehézsége miatt, többféle támadást is ismerünk:
p
vagy g
választás: Ha a használt prímszám túl kicsi, vagy a generátor nem biztonságos, akkor a protokoll sebezhetővé válik.p
értékek ellen előre kiszámolt diszkrét logaritmus táblák készíthetők. Ezért fontos elég nagy és biztonságos prímszámokat használni.
A Diffie–Hellman kulcscsere egy zseniálisan egyszerű és elegáns megoldás arra, hogy két fél közös titkos kulcsot generáljon biztonságosan, akár egy nyílt hálózaton keresztül is. Bár önmagában nem biztosít hitelesítést, alapját képezi számos modern biztonsági protokollnak. A tökéletes előremenő titkosság támogatásával a jövőbiztos titkosítás alapjául szolgál – különösen, ha elliptikus görbékkel kombinálják (ECDH).
A DHKE egy elméleti áttörés, amelynek gyakorlati alkalmazásai napjainkig meghatározzák, hogyan működik a biztonságos internet.