Secure Hash Algorithm-2

ব্রুট ফোর্স এটাক এর বিরুদ্ধে কার্যকারিতা কমে যাওয়ায় SHA-1 এর পরিবর্তে ২০০১ সালে National Security Agency অন্য একটি এলগোরিদম ফ্যামিলি SHA-2 প্রস্তাব করে। এটি মুলত ৬ ধরনের হ্যাশ ফাংশনের সমষ্টি । 

এর মধ্যে SHA-256 এবং SHA-512 বহুল ব্যবহৃত । এখানে আমরা এই দুইটা এলগোরিদম নিয়ে কথা বলব । 

SHA-256

SHA-256 এ ২৫৬ বিটের ম্যসেজ প্যাডিং করা হয় যেখানে  SHA-1 এ ১৬০ বিটের প্যাডিং করা হয় । ১৬০ থেকে ২৫৬ করে ফেলার ফলে এটার প্যাডিং তুলনামুলকভাবে জটিল হয় এবং বেশি সিকিউরড হয় । SHA-256 কে আমরা কয়েকটি ভাগ এ ভাগ করে ধাপে ধাপে বর্ণনা করব । 

Padding Bits

মেইন ডাটাকে বিটে কনভার্ট করে এটাকে ৫১২ দিয়ে ভাগ করলে যদি ভাগশেষ ৪৪৮ আসে তাহলে আমাদের অতিরিক্ত কোনো বিট যোগ করে ম্যাসেজটা প্যাডিং করা লাগবে না । আর যদি  ভাগশেষ ৪৪৮ এর কম আসে  তাহলে তাহলে এই মড ভ্যালু ৪৪৮ বানাতে আমাদের অতিরিক্ত বিট যোগ করা লাগবে । 

Padding Length

এখন এই ডাটাবিট % ৫১২ =৪৪৮ হয় । অতএব বাকি ৫১২-৪৪৮= ৬৪ বিটে আমরা এক্সট্রা বিট রেখে টোটাল ম্যাসেজটাকে ৫১২ এর গুনিতক আকারে রেখে দিব । 

Initializing Buffers

এখানে আমাদের কে ৮ টি বাফার এর ডিফল্ট ভ্যালু ইনিশিয়ালাইজ করতে হবে।

এরপর আমরা আমাদের ৫১২ বিটের ম্যাসেজ কে কয়েকটা ব্লক এ ভাগ করব এবং প্রতিটা ব্লক আলাদা আলাদা ভাবে ৬৪ টি আলাদা রাউন্ড পার হয়ে এনক্রিপ্টেড হতে থাকবে । এদের কে এনক্রিপ্টেড করতে হলে আমাদের ৬৪ টা আলাদা আলাদা কী দরকার হবে । এটাকে আমরা একটা এরে এর মধ্যে রাখব । 

 Compression Function 

পুরো ম্যাসেজটাকে আমরা কয়কেটা ব্লকে ভাগ করব যার প্রতিটা ব্লক ৫১২ বিটের । আগেই বলেছি প্রতিটা ব্লক ৬৪ টা রাউন্ড এর মধ্যে দিয়ে যাবে । নিচের ছবি অনুযায়ি প্রতিটা ইনপুট কে আমরা W এরে দিয়ে আর প্রতিটা কী কে আমরা K এরে দিয়ে চিহ্নিত করব । 

এভাবে ৬৪ রাউন্ড এ আমরা প্রত্যেক রাউন্ড এর ইনপুট পাব আগের রাউন্ড থেকে ক্যালকুলেট করে । এই পুরো সাইকেল টা রিপিট করতে থাকবে যতক্ষণ না আমরা ৫১২ নাম্বার বিটের ব্লক পর্যন্ত যেতে পারি । এটাই হবে আমাদের কাঙ্ক্ষিত হ্যাশ ডাইজেস্ট । যেটা হবে ২৫৬ বিটের SHA-256 এর নাম অনুযায়ী।

SHA-512

SHA-512 আর SHA-256 এর মধ্যে পার্থক্য শুধুমাত্র ইনিশিয়াল ম্যাসেজ প্যাডিং এর ক্ষেত্রে । SHA-256 তে আমরা যেমন ৫১২ বিটের ম্যসেজ প্যাডিং করেছি SHA-512 তে আমরা ১০২৪ বিটের ম্যাসেজ প্যাডিং করব । এবং প্যাডিং বিট হবে ১০২৪-৬৪*২=৮৯৬ বিটের । অর্থাৎম্যাসেজ এর লেন্থ কে ১০২৪ দিয়ে মড করলে যেন মড ভ্যালু ৮৯৬ হয় এমন । পরবর্তীতে এই ৮৯৬ বিট কে অতিরিক্ত ১২৮ বিট দিয়ে পুরণ করে ১০২৪ বিটের গুনিতক বিট এ পরিণত করা হয় । এরপর এই ১০২৪ বিটের অথবা ১৬ টি ৬৪ বিটের ওয়ার্ডকে ৮০ টি ম্যাসেজ কম্প্রেশন এর রাউন্ড পার করে যেতে হবে । ম্যাসেজ কম্প্রেশনের রাউন্ড টা SHA-256 এর মত একই । পরবর্তীতে ৮০ তম রাউন্ড এ আমরা যেই মানটা পাব ওটাই আমাদের কাংখিত ডাইজেস্ট ভ্যালু ৫১২ বিটের । 

তাহলে SHA-256 এর জায়গায় SHA-512 কখন এবং কেনো ব্যবহার করব?

যখন ম্যসেজটা যথাসম্ভব সিকিউর করাই উদ্দেশ্য । ম্যসেজ প্যাডিংএর লেন্থ মুখ্য না , তখন আমরা ১০২৪ বিটের প্যডিং অর্থাৎ SHA-512 ব্যবহার করতে পারি । কারণ এর ডাইজেস্ট হ্যাশ তৈরি করতে সময় বেশি লাগে এবং এর সিকিউরিটি আরো বেশি শক্তিশালি SHA-256 এর তুলনায় । ফলে এটা হ্যাক করা আরো কষ্টসাধ্য হয়ে পরে ।

তবে মজার ব্যাপার হল আপনি যদি হাতে কলমে কোনো ম্যসেজ এর হ্যাশ আউটপুট দেখতে চা্ন তাহলে এর জন্যে পাইথন এ বিল্ট ইন লাইব্রেরী আছে । নিচে একটা স্যাম্পল কোড দেওয়া হল :

        
import hashlib

message = "hello world"
hash_object = hashlib.sha256(message.encode())
hex_dig = hash_object.hexdigest()
print(hex_dig)
        
    

৫১২ এর জন্য :

        
import hashlib

message = "hello world"
hash_object = hashlib.sha512(message.encode())
hex_dig = hash_object.hexdigest()
print(hex_dig)
        
    
Share on:

Category:

Leave a Reply

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

RECENT POST