ব্রুট ফোর্স এটাক এর বিরুদ্ধে কার্যকারিতা কমে যাওয়ায় 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)
Leave a Reply