ব্লোফিশ (Blowfish) অ্যালগরিদমের অপারেশনসমূহ
Blowfish একটি সিমেট্রিক ব্লক সাইফার অ্যালগরিদম যা একবারে ৬৪-বিট ব্লক ডেটা এনক্রিপ্ট করে। এটি ফাইস্টেল নেটওয়ার্ক অনুসরণ করে এবং এর ওয়ার্কিং প্রসেস দুটি অংশে ভাগ করা হয়:
দুটি মূল অংশ
- সাব-কী জেনারেশন (Subkey Generation): ৪৪৮ বিট পর্যন্ত কীকে ৪১৬৮ বিট সাব-কীতে রূপান্তর করে।
- ডেটা-এনক্রিপশন (Data Encryption): ১৬ বার ফাইস্টেল নেটওয়ার্ক ইটারেট করে। প্রতিটি রাউন্ডে কী-ডিপেন্ডেন্ট পারমিউটেশন এবং কী-অ্যান্ড-ডেটা-ডিপেন্ডেন্ট সাবস্টিটিউশন থাকে। অপারেশন: ৩২-বিট ওয়ার্ডে XOR বা Add। প্রতি রাউন্ডে চারটি ইন্ডেক্সড অ্যারে লুকআপ।
১. সাব-কী জেনারেশন (বিস্তারিত)
- Blowfish বড় পরিমাণ সাব-কী ব্যবহার করে। ডেটা এনক্রিপশন/ডিক্রিপশন শুরু হওয়ার আগে এই কীগুলো তৈরি করা হয়।
- P-অ্যারে: ১৮টি ৩২-বিট সাব-কী (P1, P2, ..., P18)।
- ৪টি S-বক্স: প্রতিটি ২৫৬ এন্ট্রি ৩২-বিট (S1,0...S1,255, S2,0...S4,255)।
সাব-কী জেনারেশনের ধাপসমূহ
- ইনিশিয়ালাইজেশন: P-অ্যারে এবং চারটি S-বক্স ক्रमাগত একটি ফিক্সড স্ট্রিং (Pi-এর হেক্সাডেসিমাল ডিজিট) দিয়ে ইনিশিয়ালাইজ করা হয়।
P1=0x243f6a88, P2=0x85a308d3, P3=0x13198a2e, P4=0x3707344... - XOR উইথ কী: P1 XOR কীর প্রথম ৩২ বিট, P2 XOR দ্বিতীয় ৩২ বিট... P14 পর্যন্ত। কী বিট শেষ হলে আবার প্রথম থেকে শুরু (সাইক্লিক)। ছোট কীর জন্য সমান লম্বা কী তৈরি হয় (যেমন A ৬৪-বিট হলে AA, AAA সমান কী)।
- অল-জেরো এনক্রিপশন: ধাপ ১ ও ২-এর সাব-কী দিয়ে Blowfish অ্যালগরিদমে অল-জেরো স্ট্রিং এনক্রিপ্ট করা হয়।
- P1, P2 আপডেট: ধাপ ৩-এর ৬৪-বিট আউটপুট দিয়ে P1, P2 রিপ্লেস।
- পুনরাবৃত্তি এনক্রিপশন: ধাপ ৩-এর আউটপুটকে পরিবর্তিত সাব-কী দিয়ে আবার এনক্রিপ্ট করা হয়।
- P3, P4 আপডেট: ধাপ ৫-এর আউটপুট দিয়ে P3, P4 রিপ্লেস।
- সার প্রসেস রিপিট: P-অ্যারের সব এন্ট্রি, তারপর চারটি S-বক্স ক্রমানুসারে folyamantly চেঞ্জিং অ্যালগরিদমের আউটপুট দিয়ে রিপ্লেস করা হয়।
মোট ৫২১ ইটারেশন দরকার সাব-কী তৈরি করতে। অ্যাপ্লিকেশন সাব-কী সংরক্ষণ করে রাখে।
২. ডেটা এনক্রিপশন (Data Encryption)
Blowfish = 16-রাউন্ড ফাইস্টেল নেটওয়ার্ক
Input: 64-বিট ডেটা x
Divide x → xL, xR (৩২-বিট হাফ)
For i = 1 to 16:
xL = xL XOR Pi
xR = F(xL) XOR xR
Swap xL and xR
After 16th round: Swap xL and xR again (undo last swap)
Ciphertext = concatenation of xL and xR
xR = xR XOR P17
xL = xL XOR P18
Finally recombine xL and xR → ciphertext
ডিক্রিপশন: এনক্রিপশনের সমান, শুধু P1, P2, ..., P18 রিভার্স অর্ডারে ব্যবহার করা হয়।