কম্পিউটার টিউটোরিয়াল

ব্লোফিশ অ্যালগরিদমের অপারেশনগুলো কী কী?


ব্লোফিশ (Blowfish) অ্যালগরিদমের অপারেশনসমূহ

Blowfish একটি সিমেট্রিক ব্লক সাইফার অ্যালগরিদম যা একবারে ৬৪-বিট ব্লক ডেটা এনক্রিপ্ট করে। এটি ফাইস্টেল নেটওয়ার্ক অনুসরণ করে এবং এর ওয়ার্কিং প্রসেস দুটি অংশে ভাগ করা হয়:

দুটি মূল অংশ

  • সাব-কী জেনারেশন (Subkey Generation): ৪৪৮ বিট পর্যন্ত কীকে ৪১৬৮ বিট সাব-কীতে রূপান্তর করে।
  • ডেটা-এনক্রিপশন (Data Encryption): ১৬ বার ফাইস্টেল নেটওয়ার্ক ইটারেট করে। প্রতিটি রাউন্ডে কী-ডিপেন্ডেন্ট পারমিউটেশন এবং কী-অ্যান্ড-ডেটা-ডিপেন্ডেন্ট সাবস্টিটিউশন থাকে। অপারেশন: ৩২-বিট ওয়ার্ডে XOR বা Add। প্রতি রাউন্ডে চারটি ইন্ডেক্সড অ্যারে লুকআপ।

১. সাব-কী জেনারেশন (বিস্তারিত)

  • Blowfish বড় পরিমাণ সাব-কী ব্যবহার করে। ডেটা এনক্রিপশন/ডিক্রিপশন শুরু হওয়ার আগে এই কীগুলো তৈরি করা হয়।
  • P-অ্যারে: ১৮টি ৩২-বিট সাব-কী (P1, P2, ..., P18)।
  • ৪টি S-বক্স: প্রতিটি ২৫৬ এন্ট্রি ৩২-বিট (S1,0...S1,255, S2,0...S4,255)।

সাব-কী জেনারেশনের ধাপসমূহ

  1. ইনিশিয়ালাইজেশন: P-অ্যারে এবং চারটি S-বক্স ক्रमাগত একটি ফিক্সড স্ট্রিং (Pi-এর হেক্সাডেসিমাল ডিজিট) দিয়ে ইনিশিয়ালাইজ করা হয়।
    P1=0x243f6a88, P2=0x85a308d3, P3=0x13198a2e, P4=0x3707344...
  2. XOR উইথ কী: P1 XOR কীর প্রথম ৩২ বিট, P2 XOR দ্বিতীয় ৩২ বিট... P14 পর্যন্ত। কী বিট শেষ হলে আবার প্রথম থেকে শুরু (সাইক্লিক)। ছোট কীর জন্য সমান লম্বা কী তৈরি হয় (যেমন A ৬৪-বিট হলে AA, AAA সমান কী)।
  3. অল-জেরো এনক্রিপশন: ধাপ ১ ও ২-এর সাব-কী দিয়ে Blowfish অ্যালগরিদমে অল-জেরো স্ট্রিং এনক্রিপ্ট করা হয়।
  4. P1, P2 আপডেট: ধাপ ৩-এর ৬৪-বিট আউটপুট দিয়ে P1, P2 রিপ্লেস।
  5. পুনরাবৃত্তি এনক্রিপশন: ধাপ ৩-এর আউটপুটকে পরিবর্তিত সাব-কী দিয়ে আবার এনক্রিপ্ট করা হয়।
  6. P3, P4 আপডেট: ধাপ ৫-এর আউটপুট দিয়ে P3, P4 রিপ্লেস।
  7. সার প্রসেস রিপিট: 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 রিভার্স অর্ডারে ব্যবহার করা হয়।


  1. ব্লোফিশ এনক্রিপশন অ্যালগরিদম কী?

  2. সি ভাষায় টোকেন (C Tokens) কী?

  3. সি ভাষায় শিফট অপারেশন (লেফট, রাইট শিফট এবং কমপ্লিমেন্ট)

  4. C#-এ কমেন্ট (Comments) কী?