SecureRandom হল Java Cryptography Architecture (JCA) এর একটি ক্লাস যা নিরাপদ এবং র্যান্ডম নম্বর জেনারেট করার জন্য ব্যবহৃত হয়। এটি এনক্রিপশন এবং ডিজিটাল সিগনেচারের জন্য নিরাপদ কী বা ভ্যালু জেনারেট করতে সাহায্য করে। এটি মূলত এমন একটি এলগোরিদম ব্যবহৃত করে যা শক্তিশালী ক্রিপ্টোগ্রাফিক নিরাপত্তা প্রদান করে এবং আগের পদ্ধতিগুলির তুলনায় অনেক বেশি সুরক্ষিত।
SecureRandom ব্যবহার করার প্রয়োজনীয়তা
- Cryptographic Key Generation: যখন সিকিউর কী জেনারেট করতে হয়, তখন SecureRandom ব্যবহার করা হয়, যাতে আক্রমণকারী বা ট্রেন্ডি আক্রমণ পদ্ধতিগুলি থেকে রক্ষা পাওয়া যায়।
- Nonces, IVs, Salt Generation: ক্রিপ্টোগ্রাফি ব্যবহার করার সময় IV (Initialization Vector), Salt বা Nonce গুলি সুরক্ষিতভাবে জেনারেট করা খুবই গুরুত্বপূর্ণ।
- Random Numbers for Security: র্যান্ডম নম্বর অনেক সুরক্ষিতভাবে গেনারেট করতে সাহায্য করে, যা ডেটার এনক্রিপশন বা সিগনেচারে ব্যবহৃত হতে পারে।
SecureRandom ব্যবহার করার উদাহরণ
1. Random Number Generation (Simple Example)
import java.security.SecureRandom;
public class SecureRandomExample {
public static void main(String[] args) {
try {
// SecureRandom ইনস্ট্যান্স তৈরি করা
SecureRandom secureRandom = new SecureRandom();
// 0 থেকে 100 এর মধ্যে একটি র্যান্ডম নাম্বার তৈরি করা
int randomNumber = secureRandom.nextInt(101); // 101 এখানে ব্যাসিসের সংখ্যা (0-100)
System.out.println("Random Number: " + randomNumber);
} catch (Exception e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- SecureRandom ব্যবহার করে একটি নিরাপদ র্যান্ডম নম্বর তৈরি করা হয়েছে। এটি একটি Cryptographically Secure Random Number Generator (CSPRNG) যা শক্তিশালী র্যান্ডম নম্বর জেনারেট করে।
nextInt(101)মেথডের মাধ্যমে 0 থেকে 100 পর্যন্ত একটি র্যান্ডম নাম্বার তৈরি করা হয়েছে।
Output:
Random Number: 34
2. Secure Key Generation Example (AES Key)
একটি শক্তিশালী AES কী জেনারেট করতে SecureRandom ব্যবহার করা হয়।
import java.security.Key;
import javax.crypto.KeyGenerator;
import java.security.SecureRandom;
public class SecureKeyGenerationExample {
public static void main(String[] args) {
try {
// SecureRandom ব্যবহার করে কী জেনারেটর তৈরি করা
SecureRandom secureRandom = new SecureRandom();
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
// AES কী সাইজ নির্বাচন করা
keyGen.init(256, secureRandom); // AES 256-bit key
Key secretKey = keyGen.generateKey();
// প্রাপ্ত AES কী আউটপুট করা
System.out.println("Generated AES Key: " + new String(secretKey.getEncoded()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- KeyGenerator ব্যবহার করে AES (Advanced Encryption Standard) এর একটি 256-bit key জেনারেট করা হয়েছে।
SecureRandomব্যবহার করা হয়েছে যাতে কী সৃষ্টির জন্য নিরাপদ র্যান্ডম ভ্যালু ব্যবহৃত হয়।
Output:
Generated AES Key: [B@6d06d69c
এটি একটি বাইনারি কী রিটার্ন করে। আপনি Base64 বা অন্য কোনো ফরম্যাটে এটিকে এনকোড করতে পারেন যাতে পাঠযোগ্য হয়।
3. Initializing IV (Initialization Vector)
AES এনক্রিপশনে নিরাপদ Initialization Vector (IV) জেনারেট করতে SecureRandom ব্যবহার করা হয়।
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import java.security.SecureRandom;
public class IVGenerationExample {
public static void main(String[] args) {
try {
// AES Key Generator তৈরি করা
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256); // 256-bit AES key
SecretKey secretKey = keyGen.generateKey();
// SecureRandom ব্যবহার করে IV (Initialization Vector) তৈরি করা
SecureRandom secureRandom = new SecureRandom();
byte[] iv = new byte[16]; // AES ব্লক সাইজ (16 bytes)
secureRandom.nextBytes(iv);
IvParameterSpec ivSpec = new IvParameterSpec(iv);
// এনক্রিপশন প্রস্তুত করা
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
System.out.println("Generated IV: " + new String(iv));
} catch (Exception e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- SecureRandom ব্যবহার করে একটি নিরাপদ 16-byte IV তৈরি করা হয়েছে, যা AES এনক্রিপশনের জন্য উপযুক্ত।
- Cipher ইনিশিয়ালাইজ করে AES/CBC/PKCS5Padding মোডে এনক্রিপশনের জন্য প্রস্তুত করা হয়েছে।
Output:
Generated IV: [B@7e0a76f3
এটি একটি বাইনারি আইভি আউটপুট করে, যা প্রিন্ট করার আগে পাঠযোগ্য ফরম্যাটে এনকোড করা যেতে পারে।
4. Generating Secure Salt for Password Hashing
যখন একটি পাসওয়ার্ড হ্যাশ করা হয়, তখন salt ব্যবহৃত হয় যাতে আক্রমণকারী rainbow table আক্রমণ ব্যবহার করে সহজে হ্যাশটি ব্রুট ফোর্স করতে না পারে। SecureRandom ব্যবহার করে নিরাপদ salt তৈরি করা যায়।
import java.security.SecureRandom;
import java.util.Base64;
public class SaltGenerationExample {
public static void main(String[] args) {
try {
// SecureRandom ব্যবহার করে salt জেনারেট করা
SecureRandom secureRandom = new SecureRandom();
byte[] salt = new byte[16]; // 16-byte salt
secureRandom.nextBytes(salt);
// Salt এনকোড করে প্রিন্ট করা
String encodedSalt = Base64.getEncoder().encodeToString(salt);
System.out.println("Generated Salt: " + encodedSalt);
} catch (Exception e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- SecureRandom ব্যবহার করে একটি নিরাপদ salt জেনারেট করা হয়েছে। এটি হ্যাশিং অপারেশনে নিরাপত্তা বাড়ায়।
- Base64 এনকোডিং ব্যবহার করে salt কে পাঠযোগ্য ফরম্যাটে রূপান্তর করা হয়েছে।
Output:
Generated Salt: 3aPzRHASJ7FZ3eWv7jbnG4NlTt4s9/FtqZI9tPpkdG8=
SecureRandom Java Cryptography-তে গুরুত্বপূর্ণ একটি ক্লাস যা সুরক্ষিত এবং র্যান্ডম মান জেনারেট করতে ব্যবহৃত হয়। এর ব্যবহারের মাধ্যমে শক্তিশালী cryptographic keys, IVs, salts এবং অন্যান্য সুরক্ষিত র্যান্ডম ভ্যালু তৈরি করা যায়। এর কিছু ব্যবহারিক উদাহরণ:
- Random Number Generation: নিরাপদ র্যান্ডম নম্বর তৈরি করা।
- Secure Key Generation: শক্তিশালী ক্রিপ্টোগ্রাফিক কী তৈরি করা।
- IV (Initialization Vector) Generation: এনক্রিপশনে নিরাপদ IV তৈরি করা।
- Salt Generation: পাসওয়ার্ড হ্যাশিংয়ের জন্য সুরক্ষিত salt তৈরি করা।
SecureRandom এর মাধ্যমে আপনি আপনার ক্রিপ্টোগ্রাফিক অপারেশনগুলোকে আরও সুরক্ষিত ও শক্তিশালী করে তুলতে পারেন।
Read more