SHA (Secure Hash Algorithm) কীভাবে কাজ করে?
সিকিউর হ্যাশ অ্যালগরিদম (SHA) ন্যাশনাল সিকিউরিটি এজেন্সি (NSA) দ্বারা আবিষ্কৃত এবং ১৯৯৩ সালে ন্যাশনাল ইনস্টিটিউট অফ স্ট্যান্ডার্ড অ্যান্ড টেকনোলজি (NIST) দ্বারা ইউ.এস. ফেডারেল ইনফরমেশন প্রসেসিং স্ট্যান্ডার্ড (FIPS PUB 180) হিসেবে প্রকাশিত।
SHA, MD4 অ্যালগরিদমের ওপর নির্ভরশীল এবং একই বিল্ডিং ব্লক শেয়ার করে। SHA-র ডিজাইন কমপ্রেশন ফাংশনে ১৬-ওয়ার্ড মেসেজ ব্লক ইনপুট কে ৮০-ওয়ার্ড ব্লকে এক্সপ্যান্ড করার নতুন প্রক্রিয়া যোগ করে (অন্যান্য বিষয়ের পাশাপাশি)।
SHA প্রসেসিং ধাপসমূহ
ধাপ ১: প্যাডিং বিট যোগ করা (Append padding bits)
মূল মেসেজ প্যাড করা হয় যাতে এর দৈর্ঘ্য ৪৪৮ মডুলো ৫১২ এ সম্মত (congruent) হয়। মেসেজ ইতিমধ্যেই প্রয়োজনীয় দৈর্ঘ্যের হলেও প্যাডিং যোগ করা হয়। প্যাডিং: একটি '১' এবং তারপর প্রয়োজনীয় সংখ্যক '০' বিট।
ধাপ ২: দৈর্ঘ্য যোগ করা (Append length)
একটি ৬৪-বিট ব্লক (আনসাইনড ৬৪-বিট ইন্টিজার, মোস্ট সিগনিফিক্যান্ট বাইট প্রথম) যা মূল মেসেজের দৈর্ঘ্য নির্দেশ করে (ধাপ ১-এ প্যাডিং আগে), মেসেজের সাথে যোগ করা হয়। সম্পূর্ণ মেসেজের দৈর্ঘ্য ৫১২-র গুণিতক হয়।
ধাপ ৩: বাফার ইনিশিয়ালাইজ করা (Initialize the buffer)
বাফারে পাঁচটি (৫) ৩২-বিট রেজিস্টার থাকে: A, B, C, D, E। এই ১৬০-বিট বাফার কমপ্রেশন ফাংশনের ইন্টারমিডিয়েট ও চূড়ান্ত ফলাফল ধারণ করে। পাঁচটি রেজিস্টার নিচের ৩২-বিট ইন্টিজার দিয়ে ইনিশিয়ালাইজ করা হয় (হেক্সাডেসিমেল নোটেশন):
A = 67 45 23 01 B = ef cd ab 89 C = 98 ba dc fe D = 10 32 54 76 E = c3 d2 e1 f0
রেজিস্টার A, B, C, D আসলে MD5 অ্যালগরিদমে ব্যবহৃত চার রেজিস্টারের মতো। কিন্তু SHA-1-এ এই মানগুলো বিগ-এন্ডিয়ান (big-endian) ফরম্যাটে সংরক্ষিত হয়—অর্থাৎ ওয়ার্ডের মোস্ট সিগনিফিক্যান্ট বাইট লো-অ্যাড্রেস বাইট পজিশনে থাকে। তাই ইনিশিয়ালাইজেশন ভ্যালু (হেক্সाडেসিমেল) নিচের মতো দৃশ্যমান হয়:
word A = 67 45 23 01 word B = ef cd ab 89 word C = 98 ba dc fe word D = 10 32 54 76 word E = c3 d2 e1 f0
ধাপ ৪: ৫১২-বিট ব্লকে মেসেজ প্রসেস করা (Process message in 512-bit blocks)
কমপ্রেশন ফাংশন ২০ ধাপের অনুক্রমিক প্রসেসিং-এ ভাগ করা হয় যাতে চারটি রাউন্ড প্রসেসিং থাকে (প্রতিটি রাউন্ড ২০ ধাপ)। চারটি রাউন্ড স্ট্রাকচার্যালি একই, পার্থক্য: প্রতিটি রাউন্ড একটি ভিন্ন বুলিয়ান ফাংশন (f1, f2, f3, f4) এবং চারটি ভিন্ন অ্যাডিটিভ কনস্ট্যান্ট Kt (0 ≤ t ≤ 79) ব্যবহার করে যা বিবেচনাাধীন স্টেপের ওপর নির্ভর করে।
ধাপ ৫: আউটপুট (Output)
চূড়ান্ত ৫১২-বিট মেসেজ ব্লক t প্রসেস করার পর (মেসেজ tটি ৫১২-বিট ব্লকে ভাগ করা হয়েছে ধরে), ১৬০-বিট মেসেজ ডাইজেস্ট প্রাপ্ত হয়।