DSA

DSA(Digital Signature Algorithm)

মনে করি দুইজন মানুষ X এবং Y । উদাহরণ হিসেবে  X Y কে  কোনো একটা মাধ্যমে চিঠি লিখে বলল যে আমি তোমার সাথে সোমবার দুপুর ২.৩০ এ অমুক জায়গায় দেখা করব । Y ম্যাসেজ টা পেয়ে সোমবার সেই জায়গায় গেল কিন্তু  X কে সেখানে পেল না । তাই Y  X কে ফোন দিয়ে জিজ্ঞেস করল,”কিরে তুই না ম্যসেজ দিলি যে দুপুর এ আসবি । কোথায় ? “ X অপরপাশ থেকে বলল ,” কই আমি তো কোনো ম্যাসেজ দেই নি । তাহলে ম্যসেজ কে দিল ? ” 

 এই কন্সেপ্ট টাই হলো ডিজিটাল সিগনেচার এলগরিদম । অর্থাৎ sender receiver কে ম্যসেজ দিলে ওই ম্যসেজ আসলেই sender এর সোর্স থেকে আসল কিনা ,নাকি তৃতীয় কোনো ব্যাক্তি পাঠাল তা বের করা। ডিজিটাল সিগনেচার এলগরিদম একটি Asymmetric Key এলগরিদম । অর্থাৎ এখানে প্রাইভেট এবং পাবলিক দুইটা key ব্যবহৃত হবে । DSA কে কয়েকটি ভাগ এ ভাগ করে এর প্রক্রিয়া গুলো বর্ণনা করব ।

চিত্র অনুযায়ী ধাপে ধাপে বর্ণনা করা হয়েছে – 

১.প্রথমত X এবং Y দুইজনের কাছেই পাবলিক এবং প্রাইভেট key থাকবে ।

২.এখন  X এর পাঠানো ম্যসেজ এর উপর আমরা হ্যাশ ফাংশন ব্যবহার করে হ্যাশ তৈরি করব । এই হ্যাশ এবং প্রাইভেট key এর উপর আমরা signature algorithm ব্যবহার করব । তাহলে আমাদের নতুন ব্লক এ থাকল (Data + Signature Algorithm) | এই পর্যন্ত অংশটুকুর নাম সিগনেচার জেনারেশন ।

৩.সিগনেচার জেনারেশন এর পরের পার্ট হলো সিগনেচার ভেরিফিকেশন । সিগনেচার ভেরিফিকেশন এ আমরা দুই ভাগ এর কাজ করব । ধরি এক পক্ষে ওই ম্যাসেজ এর উপর একই হ্যাশ ফাংশন (SHA-1) ব্যবহার করে ম্যসেজ ডাইজেস্ট জেনারেট করে একটা হ্যাশ বানিয়ে রাখব ।

অন্যদিকে Data + Signature Algorithm এর আরেকটি অংশের উপর ভেরিফিকেশন এলগরিদম ব্যবহার করব যেটা তে পাবলিক key ব্যবহৃত হবে । ওখান থেকে যেই হ্যাশ পাব সেই হ্যাশ আর একটু আগের হ্যাশ মিলিয়ে দেখব । যদি এই দুইটা টা হ্যাশ সমান হয় তাহলে সিগনেচার ভেরিফাইড,না হলে  X এর পাঠানো ম্যাসেজ সোর্স authentic না। 

DSA(Digital Signature Algorithm) এর ধাপসমূহ 

Key Generation

প্রথমে যেকোনো একটি প্রাইম সংখ্যা p নেই । এরপর আরেকটি প্রাইম সংখ্যা q নেই যাতে করে  (p – 1) mod q = 0 হয় । এখন একটি সংখ্যা g নেই ( 1 < g < p ) যাতে ( g ^ q ) mod p = 1 হয় । এবং  g কে  p এর primitive root modulo হতে হবে । অর্থাৎ যেকোনো সংখ্যা 0 < i < q এর জন্যে ( g ^ i ) mod p এর মান স্বতন্ত্র হবে । এখন একটা প্রাইভেট key লাগবে । ধরি প্রাইভেট  key টি x ( 0 < x < q ) । এর থেকে পাই পাবলিক key y = ( g ^ x ) mod p । এখন আমাদের প্রাইভেট  key = ( p , q , g , x ) এবং পাবলিক  key = ( p , q , g , y ) ।

Signature Generation

এখন আমরা যেই ম্যাসেজ পেয়েছি ওটার উপর হ্যাশ ফাংশন ( SHA – 1 ) ব্যবহার করে হ্যশ h তৈরি করি । যেকোনো সংখ্যা k ( 0 < k < q ) নেই । এখন  ধরি , a = ( g ^ k mod p ) mod q । যদি a = 0 হয় তাহলে kএর জন্য ভিন্ন মান নেই । এখন যেকোনো ভেরিয়েবল i এর জন্য k এর মডিউলার মাল্টিপ্লিকেটিভ ইনভার্স বের করি ( k ^ ( -1 ) mod q ) । এখন যেকোনো ভেরিয়েবল s এর জন্য (i * (h + a * x)) mod q বের করি । তাহলে আমাদের ডিজিটাল সিগনেচার হল = ( a , s ) ।

Signature Verification

ওই ম্যসেজ টির উপর এক ই হ্যাশ ফাংশন প্রয়োগ করে হ্যাশ h1 তৈরি করি । যেকোনো ভেরিয়েবল j বের করি যাতে ( s * j ) mod q = 1 হয় । এখন a1 = ( h1 * j ) mod q এবং a2 = ( a * j ) mod q বের করি । এখান থেকে d = ((( g ^ a1 ) * ( y ^ a2 )) mod p ) mod q । যদি a=d হয় তাহলে signature টা বৈধ । 

কেন DSA(Digital Signature Algorithm) ?

DSA আমরা ব্যবহার করি sender এর ডাটা বৈধ source থেকে এসেছে কিনা দেখতে ।  আবার অনেক সময় বৈধ source থেকে আসলেও হ্যাকার মাঝখান দিয়ে ডাটা মডিফাই করে দিতে পারে । এর জন্য আমরা হ্যাশ ফাংশন ব্যবহার করি । কারণ যদি ডাটা তে সামান্য রকমের ও চেঞ্জ হয় তাহলে এর হ্যাশ ফাংশন পুরাটাই পাল্টে যাবে । এভাবে DSA এর মাধ্যমে ম্যসেজ ভেরিফিকেশন করা হয় ।

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

        
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import dsa


def generate_key_pair():
    private_key = dsa.generate_private_key(
        key_size=1024,
        backend=default_backend()
    )
    public_key = private_key.public_key()
    return private_key, public_key


def sign_message(private_key, message):
    signature = private_key.sign(
        message.encode('utf-8'),
        hashes.SHA256()
    )
    return signature


def verify_signature(public_key, message, signature):
    try:
        public_key.verify(
            signature,
            message.encode('utf-8'),
            hashes.SHA256()
        )
        print("Signature is valid.")
    except Exception as e:
        print("Signature is invalid:", e)


# Example usage
private_key, public_key = generate_key_pair()
message = "Hello, World!"
signature = sign_message(private_key, message)


# Modify the message to demonstrate an invalid signature
modified_message = "Hello, World! (Modified)"
verify_signature(public_key, modified_message, signature)
verify_signature(public_key, message, signature)

        
    

তবে “cryptography” লাইব্রেরি টা ইন্সটল করা না থাকলে আগে “pip install cryptography” কমান্ড দিয়ে ইন্সটল করে নিতে হবে। 

Share on:

Category:

One response to “DSA(Digital Signature Algorithm)”

  1. Tasfia Zaman Samiha Avatar

    .

Leave a Reply

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

RECENT POST