Sobes.tech
Senior

Diffie-Hellman algoritmasında bilginin şifrelenmesi nasıl gerçekleştirilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Kişisel şifreleme, doğrudan Diffie-Hellman algoritmasının bir fonksiyonu değildir. Ana amacı, açık bir kanal üzerinden kriptografik anahtarların güvenli alışverişidir. Daha sonra, bu ortak gizli anahtar, verilerin simetrik şifrelemesi için kullanılabilir.

Anahtar değişim süreci şu şekildedir:

  1. Genel erişime açık parametrelerin seçimi: İki taraf (Alice ve Bob), büyük bir asal sayı p ve temel sayı g (döngüsel grubun üreteci) üzerinde anlaşır. g, p modülünde bir ilkel kök olmalıdır.
  2. Gizli sayıların üretilmesi: Her taraf kendi gizli rastgele sayısını üretir. Alice a, Bob byi seçer. a ve b gizli tutulur.
  3. Açık anahtarların hesaplanması:
    • Alice A = g^a mod p hesaplar.
    • Bob B = g^b mod p hesaplar.
    • A ve B, açık kanaldan güvenli bir şekilde gönderilebilecek açık anahtarlar olur.
  4. Ortak gizli anahtarın hesaplanması:
    • Alice B'yi alır ve S = B^a mod p ortak gizli anahtarını hesaplar.
    • Bob A'yi alır ve aynı şekilde S = A^b mod p hesaplar.

Matematiksel olarak (g^b mod p)^a mod p = g^(b*a) mod p ve (g^a mod p)^b mod p = g^(a*b) mod p. a*b = b*a olduğu için, her iki taraf da aynı S değerini hesaplar ve bu, onların ortak gizli anahtarı olur.

# Python örneği
import random

# 1. Genel erişime açık parametrelerin seçimi (pratikte çok daha büyük sayılar kullanılır)
p = 23
g = 5

print(f"Genel erişime açık parametreler: p = {p}, g = {g}")

# 2. Gizli sayıların üretilmesi
a = random.randint(2, p - 2) # Alice'in gizli sayısı
b = random.randint(2, p - 2) # Bob'un gizli sayısı

print(f"Alice'in gizli sayısı: {a}")
print(f"Bob'un gizli sayısı: {b}")

# 3. Açık anahtarların hesaplanması
A = pow(g, a, p) # Alice'in açık anahtarı: g^a mod p
B = pow(g, b, p) # Bob'un açık anahtarı: g^b mod p

print(f"Alice'in açık anahtarı: {A}")
print(f"Bob'un açık anahtarı: {B}")

# 4. Ortak gizli anahtarın hesaplanması
# Alice B'yi alır ve hesaplar: B^a mod p
shared_key_alice = pow(B, a, p)

# Bob A'yı alır ve hesaplar: A^b mod p
shared_key_bob = pow(A, b, p)

print(f"Ortak gizli anahtar (Alice): {shared_key_alice}")
print(f"Ortak gizli anahtar (Bob): {shared_key_bob}")

# Kontrol: anahtarlar eşleşmeli
print(f"Anahtarlar eşleşiyor mu? {shared_key_alice == shared_key_bob}")

Başarılı anahtar değişiminden sonra, her iki taraf da elde edilen S değerini, daha sonra mesajların şifrelenmesi ve çözülmesi için AES, DES gibi simetrik şifreleme algoritmalarıyla kullanabilir. Diffie-Hellman veri şifrelemesi yapmaz. Bu, sonraki simetrik şifreleme için güvenli anahtar değişimini sağlar.