Padding হল ক্রিপ্টোগ্রাফি প্রক্রিয়ায় একটি গুরুত্বপূর্ণ কৌশল, যা ইনপুট ডেটাকে সঠিক ব্লক সাইজে পূর্ণ করতে ব্যবহৃত হয়। বিশেষ করে, ব্লক সাইফার অ্যালগরিদম যেমন AES, DES, 3DES ইত্যাদির ক্ষেত্রে, ডেটা এনক্রিপ্ট করার জন্য ইনপুট ডেটার সাইজ ব্লক সাইজের একটি পূর্ণগুণ হতে হবে। যদি ডেটার সাইজ ব্লক সাইজের সাথে মিলে না যায়, তবে padding এর মাধ্যমে ডেটা পূর্ণ করা হয়।
Padding এর মূল ধারণা
অনেক ক্রিপ্টোগ্রাফিক অ্যালগরিদম (যেমন, AES, DES) ব্লক সাইফার ব্যবহার করে, যেখানে ডেটা ব্লক আকারে এনক্রিপ্ট করা হয়। কিন্তু অনেক সময়, আপনার ইনপুট ডেটার আকার ব্লক সাইজের সাথে মেলে না (যেমন, 16 বাইটের ব্লক সাইজে 17 বা 18 বাইটের ডেটা), তখন padding ব্যবহার করে ইনপুট ডেটাকে সঠিক আকারে পূর্ণ করা হয়।
Padding এর প্রধান উদ্দেশ্য:
- Data Block Alignment: ইনপুট ডেটার আকার ব্লক সাইজের সাথে মেলানো।
- Security: সঠিকভাবে পূর্ণ না হওয়া ডেটা কখনও ডিক্রিপ্ট করা যাবে না। এর মাধ্যমে সিকিউরিটি নিশ্চিত করা হয়।
- Compatibility: অ্যালগরিদমের মধ্যে ইনপুট ডেটা ফরম্যাটের একক মান নিশ্চিত করা।
Padding এর প্রয়োজনীয়তা
১. Block Size Alignment: ব্লক সাইফার অ্যালগরিদমের জন্য ইনপুট ডেটার সাইজ নির্দিষ্ট ব্লক সাইজের (যেমন 16, 32, 64 বিট) সাথে মেলে এমন হতে হবে। যদি এটি না মেলে, তবে padding ব্যবহার করে ব্লক সাইজ পূর্ণ করা হয়।
২. Unpredictability and Security: Padding এর মাধ্যমে আক্রমণকারীদের জন্য ডেটা সাইজের পূর্বাভাস করা কঠিন হয়ে পড়ে। এটি আক্রমণকারীদের অস্বাভাবিক ডেটা বা ত্রুটি বের করার সুযোগ কমিয়ে দেয়। একে semantic security বলা হয়, যেখানে প্রতিটি ইনপুট ডেটার জন্য একাধিক ইনপুট আউটপুট তৈরি হয়।
৩. Data Integrity: padding ব্যবহৃত হলে ডেটার একটি নির্দিষ্ট কাঠামো তৈরি হয়, যা এনক্রিপ্টেড ডেটা পাঠানোর পরে তা পুনরায় ডিক্রিপ্ট করার সময় সতর্কতা হিসেবে কাজ করে।
Java Cryptography: Padding টাইপ
Java Cryptography API তে কিছু সাধারণ padding স্কিম রয়েছে যা ব্লক সাইফার অ্যালগরিদমগুলির জন্য ব্যবহৃত হয়। জনপ্রিয় padding স্কিম গুলি হল:
1. PKCS5 Padding
PKCS#5 padding সাধারণত 64-বিট ব্লক সাইফার যেমন DES এর জন্য ব্যবহৃত হয়। এটি ইনপুট ডেটার সাইজ ব্লক সাইজের সাথে মেলে না এমন হলে, শেষের দিকে প্রয়োজনীয় পরিমাণ padding bytes যোগ করে যাতে ইনপুট সাইজ ব্লক সাইজের গুণফলে পরিণত হয়।
PKCS5 Padding এর উদাহরণ:
যদি আপনার ডেটার সাইজ 5 বাইট হয় এবং ব্লক সাইজ 8 বাইট হয়, তাহলে 3 বাইট padding যোগ করা হবে, যাতে ব্লক সাইজ পূর্ণ হয়।
2. PKCS7 Padding
PKCS#7 padding একটি সাধারণ এবং আধুনিক পদ্ধতি, যা AES এবং অন্যান্য 128, 192, বা 256 বিটের ব্লক সাইজের সাইফারগুলির জন্য ব্যবহৃত হয়। PKCS#5 এর মতোই এটি কাজ করে, তবে এটি 8 বাইটের বাইরের কোনো ব্লক সাইজেও কাজ করে (অর্থাৎ, 8 বাইটের বেশি বা কম সাইজের ব্লকেও প্রয়োগ করা যেতে পারে)।
PKCS7 Padding এর উদাহরণ:
যদি আপনার ডেটা 15 বাইট হয় এবং ব্লক সাইজ 16 বাইট হয়, তাহলে 1 বাইট padding যোগ করা হবে।
3. Zero Padding
Zero padding একটি সহজ পদ্ধতি যেখানে ডেটার শেষে শূন্য (০) যোগ করা হয় যতক্ষণ না ব্লক সাইজ পূর্ণ হয়। এই পদ্ধতি ব্যবহার করলে, ডেটার মধ্যে বাস্তব তথ্যের বাইরের শূন্য যোগ করা হয়, যা একটি দুর্বল পদ্ধতি হতে পারে কারণ যদি শূন্যের শেষে কোনো ডেটা থাকে, তখন ডেটার অবস্থা নির্ধারণ করা কঠিন হতে পারে।
4. ISO10126 Padding
ISO10126 padding হল একটি নির্দিষ্ট পদ্ধতি যা শেষ ব্লক পূর্ণ করতে র্যান্ডম বাইটগুলি ব্যবহার করে এবং শেষের বাইটটি নির্দেশ করে কতটা padding ব্যবহার করা হয়েছে।
Padding এবং Cryptography Mode
Padding ব্যবহার করা হয় যখন ব্লক সাইফার মোডে CBC (Cipher Block Chaining), ECB (Electronic Codebook), CFB (Cipher Feedback) বা OFB (Output Feedback) মোড ব্যবহৃত হয়। Stream Cipher যেমন RC4 তে padding প্রয়োজন হয় না কারণ এটি ব্লক সাইজের জন্য নির্দিষ্ট সীমাবদ্ধতা প্রয়োগ করে না।
1. CBC Mode with Padding
Cipher Block Chaining (CBC) মোডে ব্লক সাইজ পূর্ণ না হলে padding ব্যবহৃত হয়। এটি অত্যন্ত নিরাপদ এবং আধুনিক ক্রিপ্টোগ্রাফিক স্ট্যান্ডার্ডে ব্যবহৃত হয়, যেখানে প্রতিটি ব্লক আগের ব্লকের সাথে XOR হয়, এবং padding দ্বারা প্রাপ্ত ডেটা অপরিবর্তিত থাকে।
2. ECB Mode and Padding
Electronic Codebook (ECB) মোড সাধারণত padding ব্যবহার করতে হয় কারণ এই মোডে একই plaintext ব্লকগুলোর জন্য একই ciphertext তৈরি হয়, যেটি কিছু ক্ষেত্রে নিরাপত্তা ঝুঁকি তৈরি করতে পারে।
Java Cryptography: Padding Example
নিচে AES/CBC/PKCS5Padding ব্যবহার করে padding প্রয়োগের উদাহরণ দেওয়া হলো।
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import java.util.Base64;
public class AESPaddingExample {
public static void main(String[] args) throws Exception {
// AES key generation
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // AES-128
SecretKey secretKey = keyGen.generateKey();
// Initialization Vector (IV) generation
byte[] iv = new byte[16]; // 16 bytes for AES block size
IvParameterSpec ivSpec = new IvParameterSpec(iv);
// Create AES Cipher with CBC mode and PKCS5Padding
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
// Encrypt the message
String message = "This is a secret message!";
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
byte[] encrypted = cipher.doFinal(message.getBytes());
String encryptedMessage = Base64.getEncoder().encodeToString(encrypted);
System.out.println("Encrypted Message: " + encryptedMessage);
// Decrypt the message
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);
byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(encryptedMessage));
String decryptedMessage = new String(decrypted);
System.out.println("Decrypted Message: " + decryptedMessage);
}
}
Explanation:
- AES/CBC/PKCS5Padding: AES এনক্রিপশন মোডে CBC এবং PKCS5Padding ব্যবহার করা হচ্ছে।
- Initialization Vector (IV): IV ব্যবহার করা হচ্ছে CBC মোডে।
- Cipher: সাইফার তৈরি করা হচ্ছে এনক্রিপশন এবং ডিক্রিপশন জন্য।
- Base64: এনক্রিপ্ট করা ডেটাকে Base64 এনকোডিং এর মাধ্যমে প্রিন্ট করা হচ্ছে যাতে পাঠযোগ্য হয়।
Output:
Encrypted Message: J9+XGbFSu5u0ZTnXUuZ5Ew==
Decrypted Message: This is a secret message!
- Padding হল একটি গুরুত্বপূর্ণ ক্রিপ্টোগ্রাফিক কৌশল যা ব্লক সাইজের সাথে ইনপুট ডেটার সাইজ মেলাতে ব্যবহৃত হয়। এটি সুরক্ষিত এবং সঠিক ডেটা এনক্রিপশন নিশ্চিত করতে সাহায্য করে।
- PKCS5Padding, PKCS7Padding, এবং ISO10126Padding জনপ্রিয় padding পদ্ধতি।
- Padding একটি গুরুত্বপূর্ণ ভূমিকা পালন করে যখন CBC, ECB, CFB, অথবা OFB মোড ব্যবহৃত হয়।
- Padding সঠিকভাবে ব্যবহার করলে security এবং data integrity নিশ্চিত করা যায়।
Java Cryptography API এর মাধ্যমে padding ব্যবহার করে আপনি আপনার ক্রিপ্টোগ্রাফিক অপারেশনগুলির নিরাপত্তা এবং কার্যকারিতা বাড়াতে পারবেন।
Read more