ব্লোফিশ (Blowfish) অ্যালগরিদমে সাব-কী জেনারেশন
Blowfish ব্রুস স্নাইয়ার দ্বারা ১৯৯৩ সালে আবিষ্কৃত সিমেট্রিক ব্লক সাইফার। DES বা IDEA-এর বিকল্প। সবচেয়ে জনপ্রিয় ফাইস্টেল নেটওয়ার্ক সাইফারের একটু। ৬৪-বিট ব্লক সাইজ এবং ৪২ থেকে ৪৪৮ বিট ভেরিয়েবল কী দৈর্ঘ্য। অ্যালগরিদমের দুটি অংশ: কী-এক্সপানশন এবং ডেটা-এনক্রিপশন।
সাব-কী আর্কিটেকচার
- Blowfish সর্বোচ্চ ৪৪৮-বিট কীকে Multiple সাব-কী অ্যারেতে রূপান্তর করে—মোট ১০৪২টি ৩২-বিট ভ্যালু বা ৪১৬৮ বাইট।
- ১৬-রাউন্ড ফাইস্টেল সিস্টেম, খুব বেশি কী-ডিপেন্ডেন্ট S-বক্স এবং ১৬ ইটারেশন সাপোর্ট করে।
- প্রতিটি রাউন্ড কী-এন্ড-ডেটা ডিপেন্ডেন্ট সাবস্টিটিউশন এবং কী-ডিপেন্ডেন্ট পারমিউটেশনের সাথে কাস্টোমাইজড।
- ৩২-বিট ওয়ার্ড ও XOR অপারেশন যোগ দিয়ে ইমপ্লিমেন্ট করা হয়।
- P-অ্যারে: ১৮টি ৩২-বিট সাব-কী (P1, P2, ..., P18)।
- ৪টি ৩২-বিট S-বক্স: প্রতিটি ২৫৬ এন্ট্রি (S1,0 ... S1,255, S2,0 ... S4,255)।
- ইনপুট: ৬৪-বিট ডেটা এলিমেন্ট।
সাব-কী জেনারেশন প্রসেস (Step-by-Step)
- কী স্ট্রিং অ্যারে: কী সাইজ ৩২-৪৪৮ বিট (১ থেকে ১৪টি ৩২-বিট ওয়ার্ড)। অ্যারে: K1, K2, ..., Kn (১ ≤ n ≤ ১৪)।
- P-অ্যারে ইনিশিয়ালাইজেশন: ১৮টি ৩২-বিট সাব-কী P1, P2, ..., P18।
- S-বক্স ইনিশিয়ালাইজেশন: চারটি ৩২-বিট S-বক্স, প্রতিটি ২৫৬ এন্ট্রি।
- ফিক্সড স্ট্রিং দিয়ে ইনিশিয়ালাইজ: প্রথমে P-অ্যারে, তারপর চারটি S-বক্স, একটি ফিক্সড স্ট্রিং (Pi-এর হেক্সাডেসিমাল ডিজিট) দিয়ে ইনিশিয়ালাইজ করা হয়।
- XOR ওয়াইজ K-অ্যারে: P-অ্যারের প্রতিটি এলিমেন্টকে K-অ্যারের ওয়ার্ড দিয়ে XOR করা হয় (P1 XOR প্রথম ৩২ বিট কী, P2 XOR دوم ৩২ বিট কী, ইত্যাদি)। K-অ্যারে রি-ইউজ করা হয় যতক্ষণ না পুরো P-অ্যারে XORed হয়।
- অল-জেরো এনক্রিপশন: বর্তমান P ও S অ্যারে দিয়ে ৬৪-বিট অল-জেরো ব্লক এনক্রিপ্ট করা হয়।
- P1, P2 আপডেট: এনক্রিপশনের আউটপুট দিয়ে P1, P2 রিপ্লেস করা হয়।
- পুনরাবৃত্তি: পরিবর্তিত সাব-কী দিয়ে আবার এনক্রিপ্ট করে P3, P4 আপডেট, এভাবে চলতে থাকা—P-অ্যারের সব এলিমেন্ট এবং চারটি S-বক্সই আপডেট হওয়া পর্যন্ত।
মোট ইটারেশন
সব সাব-কী তৈরি করতে মোট ৫২১ ইটারেশন দরকার। অ্যাপ্লিকেশনগুলো সাব-কী সংরক্ষণ করে রাখে যাতে বারবার ডেরাইভেশন করতে না হয়।