Sobes.tech
Senior

Ako sa vykonáva šifrovanie informácií v algoritme Diffie-Hellman?

sobes.tech AI

Odpoveď od AI

Šifrovanie ako takové nie je priamou funkciou algoritmu Diffie-Hellman. Jeho hlavným cieľom je bezpečná výmena kryptografických kľúčov cez otvorený kanál. Tento spoločný tajný kľúč môže byť následne použitý na symetrické šifrovanie dát.

Proces výmeny kľúčov vyzerá takto:

  1. Výber verejne dostupných parametrov: Dve strany (Alisa a Bob) sa dohodnú na veľkom prostom čísle p a základnom čísle g (generátore cyklickej skupiny Zₚ*). g musí byť primitívny koreň modulo p.
  2. Generovanie tajných čísel: Každá strana generuje svoje tajné náhodné číslo. Alisa si zvolí a, Bob si zvolí b. a a b sú držané v tajnosti.
  3. Výpočet verejných kľúčov:
    • Alisa vypočíta A = g^a mod p.
    • Bob vypočíta B = g^b mod p.
    • A a B sú verejné kľúče a môžu byť bezpečne odoslané cez otvorený kanál.
  4. Výpočet spoločného tajného kľúča:
    • Alisa obdrží B od Boba a vypočíta spoločný tajný kľúč S = B^a mod p.
    • Bob obdrží A od Alisy a vypočíta spoločný tajný kľúč S = A^b mod p.

Matematicky (g^b mod p)^a mod p = g^(b*a) mod p a (g^a mod p)^b mod p = g^(a*b) mod p. Pretože a*b = b*a, obe strany vypočítajú rovnakú hodnotu S, ktorá sa stáva ich spoločným tajným kľúčom.

# Príklad v Pythone
import random

# 1. Výber verejne dostupných parametrov (v praxi sú používané oveľa väčšie čísla)
p = 23
g = 5

print(f"Verejne dostupné parametre: p = {p}, g = {g}")

# 2. Generovanie tajných čísel
a = random.randint(2, p - 2) # Tajné číslo Alisy
b = random.randint(2, p - 2) # Tajné číslo Boba

print(f"Tajné číslo Alisy: {a}")
print(f"Tajné číslo Boba: {b}")

# 3. Výpočet verejných kľúčov
A = pow(g, a, p) # Verejný kľúč Alisy: g^a mod p
B = pow(g, b, p) # Verejný kľúč Boba: g^b mod p

print(f"Verejný kľúč Alisy: {A}")
print(f"Verejný kľúč Boba: {B}")

# 4. Výpočet spoločného tajného kľúča
# Alisa vypočíta: B^a mod p
shared_key_alice = pow(B, a, p)

# Boba vypočíta: A^b mod p
shared_key_bob = pow(A, b, p)

print(f"Spoločný tajný kľúč (Alisa): {shared_key_alice}")
print(f"Spoločný tajný kľúč (Boba): {shared_key_bob}")

# Kontrola: kľúče by mali súhlasiť
print(f"Kľúče sa zhodujú: {shared_key_alice == shared_key_bob}")

Po úspešnej výmene kľúčov môžu obe strany použiť získanú hodnotu S ako kľúč pre symetrický algoritmus šifrovania (napríklad AES, DES) pre následné šifrovanie a dešifrovanie správ. Samotný Diffie-Hellman nevykonáva šifrovanie dát. Rieši problém ich bezpečnej výmeny kľúčov pre následné symetrické šifrovanie.