Sobes.tech
Senior

Diffie-Hellman alqoritmində məlumatların şifrələnməsi necə həyata keçirilir?

sobes.tech Süni İntellekt

AI-dan cavab

Diffie-Hellman kimi şifrələmə öz-özlüyündə birbaşa funksiya deyil. Onun əsas məqsədi açıq kanalda kriptografik açarların təhlükəsiz mübadiləsidir. Daha sonra, bu ümumi sirli açar məlumatların simmetrik şifrələnməsi üçün istifadə oluna bilər.

Açar mübadiləsi prosesi aşağıdakı kimidir:

  1. Ümumi açıq parametrlərin seçimi: İki tərəf (Alisa və Bob) böyük bir sadə ədəd p və baza ədədi g (silindrik qrupun generatoru) barədə razılaşır. g p modulunda primitiv kök olmalıdır.
  2. Sirli ədədlərin yaradılması: Hər tərəf özünün sirli təsadüfi ədədini yaradır. Alisa a, Bob isə b seçir. ab sirr saxlanılır.
  3. Ümumi açarların hesablanması:
    • Alisa A = g^a mod p hesablayır.
    • Bob B = g^b mod p hesablayır.
    • AB açıq açarlardır və təhlükəsiz şəkildə açıq kanalda göndərilə bilər.
  4. Ümumi sirli açarın hesablanması:
    • Alisa B-ni alır və S = B^a mod p hesablayır.
    • Bob A-ni alır və S = A^b mod p hesablayır.

Riyazi olaraq, (g^b mod p)^a mod p = g^(b*a) mod p(g^a mod p)^b mod p = g^(a*b) mod p. a*b = b*a olduğundan, hər iki tərəf eyni S dəyərini hesablayır və bu, onların ümumi sirli açarı olur.

# Python nümunəsi
import random

# 1. Ümumi açıq parametrlərin seçimi (praktikada çox böyük ədədlər istifadə olunur)
p = 23
g = 5

print(f"Ümumi parametrlər: p = {p}, g = {g}")

# 2. Sirli ədədlərin yaradılması
a = random.randint(2, p - 2) # Alisa üçün sirli ədəd
b = random.randint(2, p - 2) # Bob üçün sirli ədəd

print(f"Alisa'nın sirli ədədi: {a}")
print(f"Bob'un sirli ədədi: {b}")

# 3. Açarların hesablanması
A = pow(g, a, p) # Alisa'nın açıq açarı: g^a mod p
B = pow(g, b, p) # Bob'un açıq açarı: g^b mod p

print(f"Alisa'nın açıq açarı: {A}")
print(f"Bob'un açıq açarı: {B}")

# 4. Ümumi sirli açarın hesablanması
# Alisa B-ni alır və hesablayır: B^a mod p
shared_key_alice = pow(B, a, p)

# Bob A-ni alır və hesablayır: A^b mod p
shared_key_bob = pow(A, b, p)

print(f"Ümumi sirli açar (Alisa): {shared_key_alice}")
print(f"Ümumi sirli açar (Bob): {shared_key_bob}")

# Yoxlama: açarlar uyğun olmalıdır
print(f"Açarlar uyğun gəlirmi? {shared_key_alice == shared_key_bob}")

Uğurlu açar mübadiləsindən sonra, hər iki tərəf əldə edilən S dəyərini, daha sonra AES, DES kimi simmetrik şifrələmə alqoritmləri üçün açar kimi istifadə edə bilər, bu da mesajların şifrələnməsi və deşifrələnməsi üçün istifadə oluna bilər. Diffie-Hellman məlumatların şifrələnməsini həyata keçirmir. Bu, sonrakı simmetrik şifrələmə üçün təhlükəsiz açar mübadiləsini həll edir.