Sobes.tech
Senior

Чӣ гуна рамзгузории маълумот дар алгоритми Диффи-Хелман амалӣ мешавад?

sobes.tech AI

Ҷавоб аз AI

Шифркувании ҳамчун такова функсияи мустақим аз алгоритми Диффи-Хеллман нест. Ҳадафи асосии он мубодилаи бехатари калидҳои криптографӣ тавассути каналҳои ошкоро мебошад. Ин калиди сирии умумӣ метавонад барои шифркунии симметрии маълумот истифода шавад.

Раванди мубодилаи калидҳо чунин менамояд:

  1. Интихоби параметрҳои умумӣ: Ду тараф (Алиса ва Боб) дар бораи як адади простои калон p ва адади асосӣ g (генератори гурӯҳи даврии Zₚ*) мувофиқа мекунанд. g бояд як решаи примитивӣ дар модул p бошад.
  2. Тавлиди рақамҳои сирӣ: Ҳар як тараф рақами тасодуфии сириро тавлид мекунад. Алиса a интихоб мекунад, Боб b. a ва b дар сирр нигоҳ дошта мешаванд.
  3. Ҳисоб кардани калидҳои умумӣ:
    • Алиса A = g^a mod p ҳисоб мекунад.
    • Боб B = g^b mod p ҳисоб мекунад.
    • A ва B калидҳои умумӣ мебошанд ва метавонанд бехатар тавассути каналҳои ошкоро ирсол шаванд.
  4. Ҳисоб кардани калиди сирии умумӣ:
    • Алиса B-ро аз Боб мегирад ва калиди сирии умумиро ҳисоб мекунад S = B^a mod p.
    • Боб A-ро аз Алиса мегирад ва калиди сирии умумиро ҳисоб мекунад S = A^b mod p.

Математикӣ (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, ҳар ду тараф як арзиш S-ро ҳисоб мекунанд, ки он калиди сирии умумии онҳо мешавад.

# Мисол дар Python
import random

# 1. Интихоби параметрҳои умумӣ (дар амалият ададҳои хеле калон истифода мешаванд)
p = 23
g = 5

print(f"Параметрҳои умумӣ: p = {p}, g = {g}")

# 2. Тавлиди рақамҳои сирӣ
a = random.randint(2, p - 2) # Рақами сирии Алиса
b = random.randint(2, p - 2) # Рақами сирии Боб

print(f"Рақами сирии Алиса: {a}")
print(f"Рақами сирии Боб: {b}")

# 3. Ҳисоб кардани калидҳои умумӣ
A = pow(g, a, p) # Калиди умумии Алиса: g^a mod p
B = pow(g, b, p) # Калиди умумии Боб: g^b mod p

print(f"Калиди умумии Алиса: {A}")
print(f"Калиди умумии Боб: {B}")

# 4. Ҳисоб кардани калиди сирии умумӣ
# Алиса ҳисоб мекунад: B^a mod p
shared_key_alice = pow(B, a, p)

# Боб ҳисоб мекунад: A^b mod p
shared_key_bob = pow(A, b, p)

print(f"Калиди сирии умумӣ (Алиса): {shared_key_alice}")
print(f"Калиди сирии умумӣ (Боб): {shared_key_bob}")

# Санҷиш: калидҳо бояд мувофиқат кунанд
print(f"Калидҳо мувофиқанд: {shared_key_alice == shared_key_bob}")

Пас аз мубодилаи калидҳо, ҳар ду тараф метавонанд арзишаи S-ро ҳамчун калид барои алгоритми шифркунии симметрӣ (масалан, AES, DES) истифода баранд барои шифркунии пайдарпай ва шифркунии паёмҳо. Самти Диффи-Хеллман шифркунии маълумотро иҷро намекунад. Вай масъалаи мубодилаи бехатари калидҳоро барои шифркунии симметрӣ ҳал мекунад.