Sobes.tech
Senior

Hogyan történik az információ titkosítása a Diffie-Hellman algoritmusban?

sobes.tech MI

Válasz az MI-től

A Diffie-Hellman titkosítás önmagában nem közvetlenül a titkosítás funkciója. Fő célja a kriptográfiai kulcsok biztonságos cseréje nyílt csatornán keresztül. Ezután ez a közös titkos kulcs használható szimmetrikus adat titkosítására.

A kulcscsere folyamata a következő:

  1. Nyilvános paraméterek kiválasztása: Két fél (Alice és Bob) megállapodik egy nagy prímszámról p és egy bázisszámról g (ciklikus csoport generátora). g-nek primitív gyöknek kell lennie modulo p.
  2. Titkos számok generálása: Minden fél saját titkos véletlenszámot generál. Alice a-t, Bob b-t választ. a és b titokban marad.
  3. Nyilvános kulcsok kiszámítása:
    • Alice kiszámítja A = g^a mod p.
    • Bob kiszámítja B = g^b mod p.
    • A és B nyilvános kulcsok, melyeket biztonságosan lehet nyílt csatornán keresztül küldeni.
  4. Közös titkos kulcs kiszámítása:
    • Alice megkapja B-t Bob-tól, és kiszámítja S = B^a mod p.
    • Bob megkapja A-t Alice-tól, és kiszámítja S = A^b mod p.

Matematikailag (g^b mod p)^a mod p = g^(b*a) mod p és (g^a mod p)^b mod p = g^(a*b) mod p. Mivel a*b = b*a, mindkét fél ugyanazt az értéket számítja ki, ami a közös titkos kulcs lesz.

# Példa Pythonban
import random

# 1. Nyilvános paraméterek kiválasztása (gyakran sokkal nagyobb számok)
p = 23
g = 5

print(f"Nyilvános paraméterek: p = {p}, g = {g}")

# 2. Titkos számok generálása
a = random.randint(2, p - 2) # Alice titkos száma
b = random.randint(2, p - 2) # Bob titkos száma

print(f"Alice titkos száma: {a}")
print(f"Bob titkos száma: {b}")

# 3. Nyilvános kulcsok kiszámítása
A = pow(g, a, p) # Alice nyilvános kulcsa: g^a mod p
B = pow(g, b, p) # Bob nyilvános kulcsa: g^b mod p

print(f"Alice nyilvános kulcsa: {A}")
print(f"Bob nyilvános kulcsa: {B}")

# 4. Közös titkos kulcs kiszámítása
# Alice megkapja B-t, és kiszámítja: S = B^a mod p
shared_key_alice = pow(B, a, p)

# Bob megkapja A-t, és kiszámítja: S = A^b mod p
shared_key_bob = pow(A, b, p)

print(f"Közös titkos kulcs (Alice): {shared_key_alice}")
print(f"Közös titkos kulcs (Bob): {shared_key_bob}")

# Ellenőrzés: a kulcsoknak egyezniük kell
print(f"Egyeznek a kulcsok? {shared_key_alice == shared_key_bob}")

A sikeres kulcscsere után mindkét fél a S értékét használhatja szimmetrikus titkosítási kulcsként (pl. AES, DES) az üzenetek későbbi titkosítására és dekódolására. A Diffie-Hellman nem végzi az adatok titkosítását. Megoldja a biztonságos kulcscserét a későbbi szimmetrikus titkosításhoz.