Sobes.tech
Senior

Cum se realizează criptarea informației în algoritmul Diffie-Hellman?

sobes.tech AI

Răspuns de la AI

Criptarea în sine nu este o funcție directă a algoritmului Diffie-Hellman. Scopul său principal este schimbul sigur de chei criptografice printr-un canal deschis. Apoi, această cheie secretă comună poate fi utilizată pentru criptarea simetrică a datelor.

Procesul de schimb de chei arată astfel:

  1. Selecția parametrilor publici: Două părți (Alice și Bob) convin asupra unui număr prim mare p și a unui număr de bază g (generatorul grupului ciclic Zₚ*). g trebuie să fie o rădăcină primitivă modulo p.
  2. Generarea numerelor secrete: Fiecare parte generează propriul său număr secret aleatoriu. Alice alege a, Bob alege b. a și b rămân secrete.
  3. Calcularea cheilor publice:
    • Alice calculează A = g^a mod p.
    • Bob calculează B = g^b mod p.
    • A și B sunt chei publice și pot fi trimise în siguranță printr-un canal deschis.
  4. Calcularea cheii secrete comune:
    • Alice primește B de la Bob și calculează S = B^a mod p.
    • Bob primește A de la Alice și calculează S = A^b mod p.

Matematic, (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. Deoarece a*b = b*a, ambele părți calculează aceeași valoare S, care devine cheia lor secretă comună.

# Exemplu în Python
import random

# 1. Selecția parametrilor publici (în practică, numere mult mai mari)
p = 23
g = 5

print(f"Parametri publici: p = {p}, g = {g}")

# 2. Generarea numerelor secrete
a = random.randint(2, p - 2) # Număr secret Alice
b = random.randint(2, p - 2) # Număr secret Bob

print(f"Număr secret Alice: {a}")
print(f"Număr secret Bob: {b}")

# 3. Calcularea cheilor publice
A = pow(g, a, p) # Cheie publică Alice: g^a mod p
B = pow(g, b, p) # Cheie publică Bob: g^b mod p

print(f"Cheie publică Alice: {A}")
print(f"Cheie publică Bob: {B}")

# 4. Calcularea cheii secrete comune
# Alice calculează: B^a mod p
shared_key_alice = pow(B, a, p)

# Bob calculează: A^b mod p
shared_key_bob = pow(A, b, p)

print(f"Cheie secretă comună (Alice): {shared_key_alice}")
print(f"Cheie secretă comună (Bob): {shared_key_bob}")

# Verificare: cheile trebuie să coincidă
print(f"Cheile coincid? {shared_key_alice == shared_key_bob}")

După schimbul de chei reușit, ambele părți pot folosi valoarea S obținută ca cheie pentru algoritmi de criptare simetrică (de exemplu, AES, DES) pentru criptarea și decriptarea mesajelor ulterioare. Diffie-Hellman nu criptează datele. El rezolvă problema schimbului sigur de chei pentru criptarea simetrică ulterioară.