Sobes.tech
Senior

Kako se vrši šifrovanje informacija u algoritmu Diffie-Hellman?

sobes.tech АИ

Одговор од АИ

Šifrovanje kao takvo nije direktna funkcija Diffie-Hellman algoritma. Njegov glavni cilj je sigurna razmena kriptografskih ključeva putem otvorenog kanala. Ovaj zajednički tajni ključ može biti korišćen za simetrično šifrovanje podataka.

Proces razmene ključeva izgleda ovako:

  1. Izbor javno dostupnih parametara: Dve strane (Alisa i Bob) se dogovaraju o velikom prostom broju p i osnovnom broju g (generatoru cikličke grupe Zₚ*). g mora biti primitivni koren po modulu p.
  2. Generisanje tajnih brojeva: Svaka strana generiše svoj tajni slučajni broj. Alisa bira a, Bob bira b. a i b se drže u tajnosti.
  3. Izračunavanje javnih ključeva:
    • Alisa izračunava A = g^a mod p.
    • Bob izračunava B = g^b mod p.
    • A i B su javni ključevi i mogu biti sigurno poslati putem otvorenog kanala.
  4. Izračunavanje zajedničkog tajnog ključa:
    • Alisa prima B od Boba i izračunava zajednički tajni ključ S = B^a mod p.
    • Bob prima A od Alise i izračunava zajednički tajni ključ S = A^b mod p.

Matematički (g^b mod p)^a mod p = g^(b*a) mod p i (g^a mod p)^b mod p = g^(a*b) mod p. Pošto je a*b = b*a, obe strane izračunavaju istu vrednost S, koja postaje njihov zajednički tajni ključ.

# Primer u Pythonu
import random

# 1. Izbor javno dostupnih parametara (u praksi se koriste mnogo veći brojevi)
p = 23
g = 5

print(f"Javno dostupni parametri: p = {p}, g = {g}")

# 2. Generisanje tajnih brojeva
a = random.randint(2, p - 2) # Tajni broj Alise
b = random.randint(2, p - 2) # Tajni broj Boba

print(f"Tajni broj Alise: {a}")
print(f"Tajni broj Boba: {b}")

# 3. Izračunavanje javnih ključeva
A = pow(g, a, p) # Javni ključ Alise: g^a mod p
B = pow(g, b, p) # Javni ključ Boba: g^b mod p

print(f"Javni ključ Alise: {A}")
print(f"Javni ključ Boba: {B}")

# 4. Izračunavanje zajedničkog tajnog ključa
# Alisa izračunava: B^a mod p
shared_key_alice = pow(B, a, p)

# Boba izračunava: A^b mod p
shared_key_bob = pow(A, b, p)

print(f"Zajednički tajni ključ (Alisa): {shared_key_alice}")
print(f"Zajednički tajni ključ (Boba): {shared_key_bob}")

# Provera: ključevi bi trebalo da se poklapaju
print(f"Ključevi se poklapaju: {shared_key_alice == shared_key_bob}")

Nakon uspešne razmene ključeva, obe strane mogu koristiti dobijenu vrednost S kao ključ za simetrični algoritam za šifrovanje (npr. AES, DES) za kasnije šifrovanje i dešifrovanje poruka. Sam Diffie-Hellman ne vrši šifrovanje podataka. On rešava problem njihove sigurne razmene ključeva za kasnije simetrično šifrovanje.