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:
- Genel erişime açık parametrelerin seçimi: İki taraf (Alice ve Bob), büyük bir asal sayı
pve temel sayıg(döngüsel grubun üreteci) üzerinde anlaşır.g,pmodülünde bir ilkel kök olmalıdır. - Gizli sayıların üretilmesi: Her taraf kendi gizli rastgele sayısını üretir. Alice
a, Bobbyi seçer.avebgizli tutulur. - Açık anahtarların hesaplanması:
- Alice
A = g^a mod phesaplar. - Bob
B = g^b mod phesaplar. AveB, açık kanaldan güvenli bir şekilde gönderilebilecek açık anahtarlar olur.
- Alice
- Ortak gizli anahtarın hesaplanması:
- Alice
B'yi alır veS = B^a mod portak gizli anahtarını hesaplar. - Bob
A'yi alır ve aynı şekildeS = A^b mod phesaplar.
- Alice
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.