Diffie-Hellman Algorithm

মনে করি X Y কে একটি ম্যাসেজ পাঠাবে । এখন ম্যাসেজটাকে আমরা আগে কোনো একটা এনক্রিপশন এলগরিদম ব্যবহার করে এনক্রিপ্ট করে নেই । ম্যসেজ ট্রান্সফার হওয়ার সময় যাতে হ্যাকার ওই এনক্রিপশন এ ব্যবহৃত key বের করতে না পারে তার জন্য Diffie Hellman key exchaning algorithm ব্যবহৃত হয় । 

ধরো Alice এবং Bob এই এলগরিদম ব্যবহার করে ম্যসেজ পাঠাবে । ধরি একটি বড় প্রাইম সংখ্যা p এবং একটি সংখ্যা g নেই p এর primitive root modulo হিসেবে ( 0 < g < p এবং  0 < a < p হবে যদি g ^ k ≡ a mod p এর প্রতিটা ক্ষেত্রের জন্য k এর বাস্তব মান থাকে ) । এখন Alice এর জন্য প্রাইভেট key a আর Bob এর জন্য প্রাইভেট key b । Alice হিসাব করল A = g^a mod p এবং Bob হিসাব করল B = g^b mod p । এখন Alice এবং Bob তাদের পাবলিক মানটা একটা মাধ্যমে আদান-প্রদান করল । এখানে থেকে Alice বের করবে s1 = B^a mod p এবং s2 = A^b mod p । এখন যদি s1 = s2 হয় তাহলে তারা পরবর্তী কাজ করার জন্য প্রস্তুত । এভাবে একজনের কাছ থেকে অন্যজনের কাছে তথ্য যাওয়ার সময় হ্যাকার তাদের মধ্যবর্তী key অনুমান করতে পারবে না এবং মাধ্যমটি আরো বেশি নিরাপদ থাকবে ।

নিচে এর পাইথন কোড দেওয়া হলোঃ

        
from random import randint

def mod_exp(base, exp, mod):
    # Modular exponentiation function to efficiently compute (base^exp) mod mod
    result = 1
    base = base % mod

    while exp > 0:
        if exp % 2 == 1:
            result = (result * base) % mod
        exp = exp // 2
        base = (base * base) % mod

    return result

def diffie_hellman():
    # Step 1: Choose prime number and primitive root (generator)
    prime = 23  # You should choose a large prime number in practice
    generator = 5  # You should choose a primitive root of the chosen prime

    # Step 2: Both parties choose a private key
    private_key_alice = randint(1, prime - 1)
    private_key_bob = randint(1, prime - 1)

    # Step 3: Both parties calculate their public keys
    public_key_alice = mod_exp(generator, private_key_alice, prime)
    public_key_bob = mod_exp(generator, private_key_bob, prime)

    # Step 4: Exchange public keys

    # Step 5: Both parties calculate the shared secret
    shared_secret_alice = mod_exp(public_key_bob, private_key_alice, prime)
    shared_secret_bob = mod_exp(public_key_alice, private_key_bob, prime)

    # The shared secrets should be the same for both parties
    return shared_secret_alice, shared_secret_bob

# Example usage:
alice_secret, bob_secret = diffie_hellman()

print(f"Alice's shared secret: {alice_secret}")
print(f"Bob's shared secret: {bob_secret}")

        
    
Share on:

Category:

Leave a Reply

Your email address will not be published. Required fields are marked *

RECENT POST