RSA (Rivest-Shamir-Adleman) হল একটি asymmetric encryption algorithm যা public-key cryptography-তে ব্যবহৃত হয়। এই এলগোরিদমে দুটি কী ব্যবহৃত হয়:
- Public Key: এটি সবাইকে দেওয়া যায় এবং এটি শুধুমাত্র এনক্রিপশন (encryption) করতে ব্যবহৃত হয়।
- Private Key: এটি শুধুমাত্র মূল ব্যবহারকারী বা প্রাপক জানে এবং এটি শুধুমাত্র ডিক্রিপশন (decryption) করতে ব্যবহৃত হয়।
RSA এলগোরিদমের মাধ্যমে আপনি public key দিয়ে ডেটা এনক্রিপ্ট করতে পারেন এবং শুধুমাত্র private key দিয়ে সেটি ডিক্রিপ্ট করা যাবে। এটি ডিজিটাল সিগনেচার এবং নিরাপদ ডেটা ট্রান্সফার ব্যবস্থায় ব্যাপকভাবে ব্যবহৃত হয়।
এখানে RSA Algorithm এর মাধ্যমে public key এবং private key ব্যবস্থাপনা দেখানো হবে, যেখানে RSA কী জেনারেশন, এনক্রিপশন এবং ডিক্রিপশন কিভাবে করা হয় তা শিখানো হবে।
RSA Algorithm এর মাধ্যমে Public এবং Private Key ব্যবস্থাপনা উদাহরণ
১. RSA Key Pair জেনারেশন
RSA কী জেনারেশন একটি গুরুত্বপূর্ণ পদক্ষেপ, যেখানে একটি পাবলিক কী এবং একটি প্রাইভেট কী তৈরি করা হয়। এই কী জেনারেশন প্রক্রিয়া সুরক্ষা নিশ্চিত করে এবং এনক্রিপশন এবং ডিক্রিপশনে ব্যবহৃত হয়।
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Security;
public class RSAKeyPairGeneration {
public static void main(String[] args) throws Exception {
// Initialize KeyPairGenerator with RSA algorithm
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048); // Set key size to 2048 bits
// Generate the RSA Key Pair
KeyPair keyPair = keyPairGen.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// Print the generated keys
System.out.println("Public Key: " + publicKey);
System.out.println("Private Key: " + privateKey);
}
}
Output Example:
Public Key: java.security.interfaces.RSAPublicKey@5f184fc6
Private Key: java.security.interfaces.RSAPrivateKey@5d0a93f7
এখানে:
- KeyPairGenerator ব্যবহার করে RSA কী জেনারেট করা হয়েছে। এখানে 2048-বিটের কী সাইজ ব্যবহার করা হয়েছে, যা বর্তমান সময়ের জন্য নিরাপদ।
- getPublic() এবং getPrivate() মেথড ব্যবহার করে পাবলিক এবং প্রাইভেট কী অ্যাক্সেস করা হয়েছে।
২. RSA Public Key দিয়ে ডেটা এনক্রিপ্ট করা
এবার আমরা RSA Public Key ব্যবহার করে ডেটা এনক্রিপ্ট (encryption) করব।
import javax.crypto.Cipher;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.PrivateKey;
import java.security.Signature;
import java.util.Base64;
public class RSAEncryptionExample {
public static void main(String[] args) throws Exception {
// Example text to encrypt
String textToEncrypt = "Hello, this is a secret message!";
// Initialize Cipher for RSA encryption
Cipher cipher = Cipher.getInstance("RSA");
// Generate RSA Key Pair
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048); // 2048-bit key
KeyPair keyPair = keyPairGen.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// Encrypt data using public key
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = cipher.doFinal(textToEncrypt.getBytes());
// Print the encrypted data (Base64 encoded)
System.out.println("Encrypted Text: " + Base64.getEncoder().encodeToString(encryptedData));
// Decrypt data using private key
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
System.out.println("Decrypted Text: " + new String(decryptedData));
}
}
Output:
Encrypted Text: q1pnZ07BdJGlDhsQATq9d55kC8gWmfqCm2jD0z7n6c9sT8xw0V4evg9wHJkJ9fo8nz3U90z57gWZGvqStO1EkvY6OhkVXjHgyDRm65FBsm5n5I+uWgLJkgE6xw3HQh6omEZsA3E3LxAXgZAzlXJbNmXZkHz7nKMQqugFLQ==
Decrypted Text: Hello, this is a secret message!
এখানে:
- RSA Public Key দিয়ে ডেটা এনক্রিপ্ট করা হয়েছে এবং RSA Private Key দিয়ে ডেটা ডিক্রিপ্ট করা হয়েছে।
- Base64 encoding ব্যবহার করা হয়েছে এনক্রিপ্ট করা ডেটাকে পাঠযোগ্য হিসেবে দেখানোর জন্য।
৩. RSA Signature তৈরি করা এবং যাচাই করা (Digital Signature)
RSA Public এবং Private Key এর মাধ্যমে ডিজিটাল সিগনেচার তৈরি এবং যাচাই করা সম্ভব। এটি মূলত ডিজিটাল সিগনেচার সিস্টেমে ব্যবহৃত হয় যাতে নিশ্চিত করা যায় যে একটি বার্তা বা ডেটা সত্যিই একটি নির্দিষ্ট ব্যক্তি বা সিস্টেম দ্বারা সৃষ্ট।
import java.security.*;
import javax.crypto.Cipher;
public class RSADigitalSignatureExample {
public static void main(String[] args) throws Exception {
// Generate RSA Key Pair
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048); // 2048-bit RSA key
KeyPair keyPair = keyPairGen.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// Message to be signed
String message = "This is a secret message.";
// Create a Signature object
Signature signature = Signature.getInstance("SHA256withRSA");
// Initialize the signature with the private key
signature.initSign(privateKey);
// Update the data to be signed
signature.update(message.getBytes());
// Sign the message
byte[] digitalSignature = signature.sign();
System.out.println("Digital Signature: " + Base64.getEncoder().encodeToString(digitalSignature));
// Now verify the signature using the public key
signature.initVerify(publicKey);
signature.update(message.getBytes());
// Verify the signature
boolean isVerified = signature.verify(digitalSignature);
System.out.println("Signature verification: " + isVerified);
}
}
Output:
Digital Signature: s/yv0tX8MdhNmYyFpB6gCgB6K7rzFu1p2wvYek8w9A0FQel0UtgZLOgPU0UVkrOxZMh9S+Saqgd0w/sZ7dCKJf8NhR7HzKkHt23Rz74K5bdntgnjUtXYCg2hxJPd57fjGTeRvmAjsXktEBd0Xl52pn2d2gXjI93+GzhfS5ztl1hFg==
Signature verification: true
এখানে:
- Private Key দিয়ে একটি Digital Signature তৈরি করা হয়েছে।
- তারপর, Public Key ব্যবহার করে সেই সিগনেচারটি যাচাই করা হয়েছে।
RSA Public এবং Private Key ব্যবস্থাপনার সুবিধা এবং সুরক্ষা
- Public Key Distribution:
- পাবলিক কী সবাইকে শেয়ার করা যেতে পারে, তাই এটি কী বিতরণের ক্ষেত্রে সহজ এবং নিরাপদ। এই কীটি দিয়ে ডেটা এনক্রিপ্ট করা যায়, তবে শুধুমাত্র প্রাইভেট কী দিয়েই সেই ডেটা ডিক্রিপ্ট করা সম্ভব।
- Private Key Confidentiality:
- প্রাইভেট কীটি অবশ্যই গোপন রাখতে হবে। এটি যদি কেউ চুরি করে ফেলে, তবে সিস্টেমের নিরাপত্তা বিপদে পড়বে, কারণ তারা এনক্রিপ্ট করা ডেটা ডিক্রিপ্ট করতে পারবে এবং ডিজিটাল সিগনেচার তৈরি করতে সক্ষম হবে।
- Digital Signatures:
- ডিজিটাল সিগনেচারের মাধ্যমে আপনি একটি ডেটার অখণ্ডতা এবং অথেন্টিকেশন নিশ্চিত করতে পারেন। প্রাইভেট কী দিয়ে সিগনেচার তৈরি করা হয় এবং পাবলিক কী দিয়ে যাচাই করা হয়, যা non-repudiation নিশ্চিত করে (একজন ব্যবহারকারী তাদের কাজ অস্বীকার করতে পারে না)।
- Secure Communication:
- RSA ব্যবহার করে সুরক্ষিত যোগাযোগ নিশ্চিত করা যায়, যেখানে পাবলিক কী দিয়ে ডেটা এনক্রিপ্ট করা হয় এবং শুধুমাত্র প্রাইভেট কী দিয়ে ডিক্রিপ্ট করা যায়।
RSA Algorithm হল একটি শক্তিশালী এবং ব্যাপকভাবে ব্যবহৃত asymmetric encryption এলগোরিদম, যা পাবলিক কী এবং প্রাইভেট কী ব্যবহারের মাধ্যমে ডেটা এনক্রিপ্ট এবং ডিক্রিপ্ট করতে সহায়তা করে। এটি ডিজিটাল সিগনেচার, নিরাপদ ডেটা ট্রান্সফার, এবং অথেন্টিকেশন প্রক্রিয়ায় গুরুত্বপূর্ণ ভূমিকা পালন করে। RSA দিয়ে কী জেনারেশন, এনক্রিপশন, ডিক্রিপশন এবং ডিজিটাল সিগনেচার তৈরি এবং যাচাই করার মাধ্যমে আপনার সিস্টেমের নিরাপত্তা নিশ্চিত করা সম্ভব।
Read more