ব্লোফিশ একটি symmetric key এনক্রিপশন সিস্টেম,যেখানে প্রাপক এবং প্রেরক উভয়ই একই প্রাইভেট কী ব্যবহার করে ডেটা এনক্রিপশন ও ডিক্রিপশন করে।
ব্লোফিশ বাস্তবায়ন করতে আমরা ফেইস্তেল নেটওয়ার্ক স্কিম ব্যবহার করে থাকি। ব্লোফিশ DES এর চেয়ে দ্রুতগতিসম্পন্ন এবং অধিক নিরাপদ, যে কারণে এটি এখনো বহুল ব্যবহৃত সিমেট্রিক key গুলোর মধ্যে অন্যতম। এটির কোনো পেটেন্ট নেই, ফলে যে কেউ এটি ডেটা সিকিউরিটির জন্য ব্যবহার করতে পারে।
Components
ব্লকঃ ৬৪ বিট
ইনপুট কীঃ ৩২ থেকে ৪৪৮ বিট
সাব-কীঃ ১৮টি (প্রতিটি ৩২ বিটের কী,একটি অ্যারে p[18] এর সেলগুলোতে স্টোর করে রাখা হয়)
রাউন্ডঃ ১৬টি
সাবস্টিটিউশন বক্সঃ ৪টি (প্রতিটি ৩২ বিটের ২৫৬টি এন্ট্রির ১৬X১৬ সাইজের একেকটি টেবিল)
Overview
— দুটো মূল অপারেশন হলো,
(১) Key Generation
(২) Encryption/Decryption
— ইনিশিয়াল sub-key গুলো ইনপুট key দিয়ে XOR অপারেশন করে রিপ্লেস করা হয়।
— ফেইস্তেল নেটওয়ার্কের প্রতিটি রাউন্ডে ৩২ বিটের sub-key,প্লেইনটেক্সটের ৩২ বিটস,একটি সাবস্টিটিউশন ফাংশন ইনভলভড থাকে; রাউন্ডের বাইরে থাকে দুটো অতিরিক্ত XOR operation ।
Subkey Generation
আমরা ধরে নিচ্ছি, আমাদের কাছে ৪৪৮ বিটের ইনপুট key আছে, (১৪টি ওয়ার্ডের প্রতিটির সাইজ ৩২ বিট); ১৮টি sub-key এর ১৬টি, ১৬টি রাউন্ডের জন্য এবং বাকি দুটো অতিরিক্ত XOR operation এর জন্য। আমরা p[18] অ্যারের প্রতিটি sub-key এর ইনিশিয়াল ভেল্যুকে, ঐ ভেল্যুর সাথে ইনপুট কীয়ের ৩২ বিটের XOR operation করে রিপ্লেস করে দেবো ।
p[0] = p[0] ⊕ 1st 32 bits of input key (of 448 bit key)
p[1] = p[1] ⊕ 2nd 32 bits of input key
– – – – – – – – – – – – – – – – – – – – – – – – – –
– – – – – – – – – – – – – – – – – – – – – – – – – –
p[13] = p[13] ⊕ 14th 32 bits of input key
এই পর্যায়ে এসে ৪৪৮বিটের ইনপুট key এর সবকটি বিট,১৮টি sub-key এর মধ্যে ১৪টির সাথে একবার করে এক্সর অপারেশনে ব্যবহার করে ফেলেছি আমরা। অবশিষ্ট ৪টি sub-key রিপ্লেস করব নিচের মতো করেঃ
p[14] = p[14] ⊕ 1st 32 bits of input key
p[15] = p[15] ⊕ 2nd 32 bits of input key
– – – – – – – – – – – – – – – – – – – – – – – – – –
p[17] = p[17] ⊕ 4th 32 bits of input key
Encryption
এটি ১৬টি রাউন্ড ও সাব-কীয়ের ২টি অতিরিক্ত XOR operation এর সমন্বয়ে গঠিত।
Algorithm:
1. Divide the plaintext into 2 equal halves – 32 bit left and 32 bit right block, indicated as L0 and R0
2. For i=0 to 16, do: [ Outputs of round-i
Li = Li-1 ⊕ p[i-1] are Li and Ri ]
Ri = F(Li) ⊕ Ri-1
Swap Li, Ri (i.e., Li = Ri, Ri = Li)
3. Undo the last swap
4. Do:
L16=L16 ⊕ p[17]
R16=R16 ⊕ p[16]
5. Concatenate L16 and R16 to obtain 64 bit ciphertext.
কীভাবে ফাংশন F কাজ করে?
Algorithm:
১/ F এর প্রতিটি ৩২ বিট ইনপুটকে ৪টি ৮বিটের সাবব্লকে ভাগ করে, S1,S2,S3,S4 – এই ৪টি S-box এর প্রতিটিতে আমরা ইনপুট দেবো।
২/ প্রতিটি S-box সাবস্টিটিউশন অপারেশনের ক্ষেত্রে,
২.১/ সাবব্লকের প্রথম ৪ বিট এস-বক্সের রো এবং শেষের ৪ বিট কলাম নির্দেশ করে।
২.২/ ২.১ থেকে প্রাপ্ত রো-কলাম পজিশনে থাকা ৩২বিটের ভেল্যুটি আউটপুট হিসেবে পাই। আউটপুটগুলোকে S1,S2,S3,S4 দিয়ে চিহ্নিত করি।
৩/ যেকোনো একটি ভেরিয়েবল V নিই এবং নিচের অপারেশনগুলো করিঃ
i. V = S1 + S2
ii. V = V ⊕ S3
iii. V = V + S4
৪/ V-ই হচ্ছে F এর চূড়ান্ত আউটপুট।
Decryption
এনক্রিপশনের মতোই ডিক্রিপশনে একই পদ্ধতি অনুসরণ করা হয়, শুধু sub-key এর ক্রম পালটে যায়, অর্থাৎ ১ম রাউন্ডে p[0] এর পরিবর্তে p[17], ২য় রাউন্ডে p[1] এর পরিবর্তে p[16], এভাবে sub-key XOR করতে করতে আমরা এনক্রিপশনের মতো একই অ্যালগরিদম ব্যবহার করে সাইফারটেক্সটকে প্লেইনটেক্সটে ডিক্রিপ্ট করে ফেলতে পারবো।
Pros and Cons:
– DES এর চেয়ে দ্রুতগতির এবং নিরাপদ ।
– Java ডেভেলপড সফটওয়ারসমূহের নিরাপত্তা বিধানে বিশেষভাবে কার্যকর।
– নিরাপদ রিমোট এক্সেসের জন্যও বেশ কাজের।
এই অ্যালগরিদমের মূল সমস্যা হলো এর key সাইজ, ৬৪ বিটের ছোট key, বিশেষ ধরনের ব্রুট-ফোর্স অ্যাটাকের (বার্থডে অ্যাটাক) মুখে অনিরাপদ।
Leave a Reply