Sobes.tech
Senior

Kuidas toimub teabe krüpteerimine Diffie-Hellmani algoritmis?

sobes.tech AI

Vastus AI-lt

Šifreeerimine kui selline ei ole otsene Diffie-Hellmani algoritmi funktsioon. Selle peamine eesmärk on turvaline krüptograafiliste võtmete vahetamine avaliku kanali kaudu. See ühine salajane võti võib hiljem kasutada sümmeetriliseks andmesalvestamiseks.

Võtmevahetusprotsess näeb välja järgmiselt:

  1. Avalikult kättesaadavate parameetrite valimine: Kaks osapoolt (Alisa ja Bob) lepivad kokku suure algarvu p ja põhiväärtuse g (tsüklilise rühma generaator Zₚ*). g peab olema primitiivne juur modulo p.
  2. Salajaste arvude genereerimine: Iga osapool genereerib oma salajase juhusliku numbri. Alisa valib a, Bob valib b. a ja b hoitakse salajas.
  3. Ühiste võtmepaaride arvutamine:
    • Alisa arvutab A = g^a mod p.
    • Bob arvutab B = g^b mod p.
    • A ja B on avalikud võtmepaarid ning neid saab turvaliselt saata avaliku kanali kaudu.
  4. Ühise salajase võtmepaaride arvutamine:
    • Alisa saab B Bobilt ja arvutab ühise salajase võtmepaar S = B^a mod p.
    • Bob saab A Alisa käest ja arvutab ühise salajase võtmepaar S = A^b mod p.

Matemaatiliselt (g^b mod p)^a mod p = g^(b*a) mod p ja (g^a mod p)^b mod p = g^(a*b) mod p. Kuna a*b = b*a, arvutavad mõlemad pooled sama väärtuse S, mis muutub nende ühise salajase võtmepaariks.

# Näide Pythonis
import random

# 1. Avalikult kättesaadavate parameetrite valimine (praktikas kasutatakse palju suuremaid numbreid)
p = 23
g = 5

print(f"Avalikult kättesaadavad parameetrid: p = {p}, g = {g}")

# 2. Salajaste arvude genereerimine
a = random.randint(2, p - 2) # Alisa salajane arv
b = random.randint(2, p - 2) # Bobi salajane arv

print(f"Alisa salajane arv: {a}")
print(f"Bobi salajane arv: {b}")

# 3. Ühiste võtmepaaride arvutamine
A = pow(g, a, p) # Alisa avalik võti: g^a mod p
B = pow(g, b, p) # Bobi avalik võti: g^b mod p

print(f"Alisa avalik võti: {A}")
print(f"Bobi avalik võti: {B}")

# 4. Ühise salajase võtmepaaride arvutamine
# Alisa arvutab: B^a mod p
shared_key_alice = pow(B, a, p)

# Bobi arvutab: A^b mod p
shared_key_bob = pow(A, b, p)

print(f"Ühine salajane võti (Alisa): {shared_key_alice}")
print(f"Ühine salajane võti (Bobi): {shared_key_bob}")

# Kontroll: võtmepaarid peaksid sobima
print(f"Võtmed sobivad: {shared_key_alice == shared_key_bob}")

Pärast edukat võtmepaaride vahetust saavad mõlemad pooled kasutada saadud S väärtust kui võtit sümmeetrilise krüpteerimise (näiteks AES, DES) jaoks ning kasutada seda sõnumite krüpteerimiseks ja dekrpteerimiseks. Diffie-Hellman ei teosta andmete krüpteerimist. See lahendab nende turvalise võtmepaaride vahetamise probleemi ning võimaldab hiljem kasutada sümmeetrilist krüpteerimist.