ব্লোফিশ (Blowfish) অ্যালগরিদমে এনক্রিপশন ও ডিক্রিপশন
Blowfish ব্রুস স্নাইয়ার (Bruce Schneier) দ্বারা ১৯৯৩ সালের ডিসেম্বরে আবিষ্কৃত একটি সিমেট্রিক ব্লক সাইফার অ্যালগরিদম। এর বেশ কিছু সুবিধা আছে: হার্ডওয়্যার ইমপ্লিমেন্টেশনে উপযোগী ও কার্যকর, কোনো লাইসেন্স লাগে না। মৌলিক অপারেটর: টেবিল লুকআপ, যোগ, XOR। টেবিলে চারটি S-বক্স এবং একটি P-অ্যারে থাকে।
Blowfish-এর কাঠামো
- ফাইস্টেল রাউন্ড বেসড সাইফার। F-ফাংশনের ডিজাইন DES-এর সিদ্ধান্তগুলো সরলীকরণ করে সফটওয়্যারে বেশি গতি ও দক্ষতা দিয়ে একই নিরাপত্তা দেয়।
- ৬৪-বিট সিমেট্রিক ব্লক সাইফার, ভেরিয়েবল-লেন্থ কী: ৩২ থেকে ৪৪৮ বিট (১৪ বাইট)।
- ৬৪-বিট প্লেইনটেক্সটকে কার্যকর ও নিরাপদে ৬৪-বিট সাইফারটেক্সটে রূপান্তর করে।
- অপারেটর: টেবিল লুকআপ, মডুলাস, যোগ, বিটওয়াইজ XOR—৩২-বিট প্রসেসরে এনক্রিপশন/ডিক্রিপশন টাইম মিনিমাইজ করতে।
DES와의 পার্থক্য
- DES-এর মতো Blowfish-ও ১৬ রাউন্ড ফাইস্টেল নেটওয়ার্ক ব্যবহার করে।
- DES শুধু ডান ৩২ বিট পরিবর্তন করে পরবর্তী রাউন্ডের বাম ৩২ বিট তৈরি করে।
- Blowfish-এ প্রতিটি রাউন্ডে বাম ও ডান ৩২ বিট দুটোই পরিবর্তন হয়।
- Blowfish বাম ৩২ বিটে XOR অপারেশন করে F-ফাংশনে যাওয়ার আগে বা ডান ৩২ বিটে প্রপগেট করার আগে।
- ১৬ রাউন্ডের পর দুটি XOR অপারেশন এবং একটি সোয়াপ অপারেশন থাকে—DES-এর পারমিউটেশন ফাংশন থেকে আলাদা।
এনক্রিপশন প্রসেস
- দুই ইনপুট: প্লেইন টেক্সট (ইমেজ/ডেটা) এবং এনক্রিপশন কী।
- ওরিজিনাল ইমেজ ডেটা বিট স্ট্রিমকে Blowfish ব্লক দৈর্ঘ্য অনুযায়ী ব্লকে ভাগ করা হয়।
- ইমেজ হেডার এনক্রিপ্ট করা হয় না; বিটম্যাপ পিক্সেল/অ্যারে হেডারের ঠিক পরে শুরু হয়।
- বাইট কম্পোনেন্ট রো-অর্ডারে (বাম থেকে ডান) সংরক্ষিত, প্রতিটি রো একটি স্ক্যান লাইন। রোগুলো টপ টু বটম এনক্রিপ্ট হয়।
ডিক্রিপশন প্রসেস
- এনক্রিপ্টেড ইমেজকে একই ব্লক দৈর্ঘ্যে (টপ টু বটম) ভাগ করা হয়।
- প্রথম ব্লক ডিক্রিপশন ফাংশনে যায়, একই এনক্রিপশন কী ব্যবহার হয় কিন্তু সাব-কীগুলো রিভার্স অর্ডারে প্রয়োগ হয়।
- প্রক্রিয়া টপ টু বটম সব ব্লকে সম্প্রসারিত হয়।
Blowfish বেসিক অ্যালগরিদম
Divide x into two 32-bit halves: 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