Encryption হল একটি প্রক্রিয়া যা ডেটাকে রূপান্তরিত করে নিরাপদে সংরক্ষণ বা প্রেরণ করতে সহায়তা করে, যাতে শুধুমাত্র অনুমোদিত পক্ষগুলি সেই ডেটাকে পড়তে পারে। Java Cryptography সিস্টেমে, Symmetric Encryption এবং Asymmetric Encryption দুটি প্রধান ক্রিপ্টোগ্রাফি প্রযুক্তি ব্যবহার করা হয়। এই দুইটি প্রযুক্তি একে অপরের থেকে আলাদা, এবং তাদের নিজস্ব সুবিধা ও সীমাবদ্ধতা রয়েছে।
নিচে Symmetric এবং Asymmetric Encryption-এর মধ্যে পার্থক্য বিস্তারিতভাবে আলোচনা করা হয়েছে:
1. Symmetric Encryption (সমমুদ্রিক এনক্রিপশন)
Symmetric Encryption-এ, একই কী (secret key) ব্যবহার করে ডেটা এনক্রিপ্ট (encrypt) এবং ডিক্রিপ্ট (decrypt) করা হয়। অর্থাৎ, প্রেরক এবং প্রাপক উভয়ের কাছে একই গোপন কী থাকতে হবে।
বিশেষত্ব:
- একই কী: এনক্রিপশন এবং ডিক্রিপশন উভয়ের জন্য একটিই কী ব্যবহার করা হয়।
- গতি: Symmetric Encryption দ্রুত এবং কার্যকরী, কারণ এটি তুলনামূলকভাবে কম কম্পিউটেশনাল শক্তি প্রয়োজন।
- সুরক্ষা: যদি গোপন কী হ্যাকারদের কাছে চলে যায়, তবে ডেটা সুরক্ষিত থাকবে না।
বিশেষ ব্যবহারের উদাহরণ:
- AES (Advanced Encryption Standard)
- DES (Data Encryption Standard)
ফায়দা:
- দ্রুত এবং কম্পিউটেশনাল শক্তি কম প্রয়োজন।
- সহজ এবং কার্যকরী।
সীমাবদ্ধতা:
- কী বিতরণ একটি সমস্যা। সুরক্ষিতভাবে কী ভাগ করা কঠিন।
2. Asymmetric Encryption (অসামমুদ্রিক এনক্রিপশন)
Asymmetric Encryption-এ দুটি কী ব্যবহৃত হয়:
- একটি পাবলিক কী (Public Key), যা সবাই জানে।
- একটি প্রাইভেট কী (Private Key), যা শুধুমাত্র প্রাপক জানে এবং গোপন রাখা হয়।
এনক্রিপশন এবং ডিক্রিপশন দুটি আলাদা কী দ্বারা করা হয়:
- পাবলিক কী দিয়ে ডেটা এনক্রিপ্ট করা হয়।
- প্রাইভেট কী দিয়ে ডেটা ডিক্রিপ্ট করা হয়।
বিশেষত্ব:
- পাবলিক এবং প্রাইভেট কী: দুটি ভিন্ন কী ব্যবহৃত হয়—একটি পাবলিক এবং একটি প্রাইভেট।
- গতি: এটি Symmetric Encryption এর তুলনায় ধীর গতির হয় কারণ এটি বেশি কম্পিউটেশনাল শক্তি ব্যবহার করে।
- সুরক্ষা: প্রাইভেট কী কখনো পাবলিকভাবে শেয়ার করা হয় না, যা এটি আরও সুরক্ষিত করে তোলে।
বিশেষ ব্যবহারের উদাহরণ:
- RSA (Rivest–Shamir–Adleman)
- ECC (Elliptic Curve Cryptography)
ফায়দা:
- কী বিতরণ সহজ এবং নিরাপদ। পাবলিক কী দিয়ে ডেটা এনক্রিপ্ট করা যায়, আর প্রাইভেট কী দিয়ে শুধুমাত্র প্রাপক ডিক্রিপ্ট করতে পারে।
- প্রাইভেট কী নিরাপদভাবে রেখে দেওয়া সম্ভব, এবং এটি পাবলিক কী এর মাধ্যমে নিরাপদে শেয়ার করা যায়।
সীমাবদ্ধতা:
- ধীর গতির কারণ বেশি কম্পিউটেশনাল শক্তি প্রয়োজন।
- বড় ডেটা সেটের জন্য এটি কার্যকরী নয়, কারণ সেগুলি এনক্রিপ্ট বা ডিক্রিপ্ট করতে অনেক বেশি সময় নেবে।
Symmetric Encryption এবং Asymmetric Encryption এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Symmetric Encryption | Asymmetric Encryption |
|---|---|---|
| কী সংখ্যা | একটিই কী (Secret Key) | দুটি কী (Public Key, Private Key) |
| এনক্রিপশন এবং ডিক্রিপশন | একক কী দিয়ে এনক্রিপ্ট এবং ডিক্রিপ্ট | পাবলিক কী দিয়ে এনক্রিপ্ট এবং প্রাইভেট কী দিয়ে ডিক্রিপ্ট |
| গতি | দ্রুত | ধীর (যেহেতু বেশি কম্পিউটেশনাল শক্তি প্রয়োজন) |
| কী বিতরণ সমস্যা | কী বিতরণ কঠিন, সুরক্ষিতভাবে কী শেয়ার করা কঠিন | সহজ এবং নিরাপদভাবে কী বিতরণ করা যায় |
| ব্যবহার | ছোট এবং দ্রুত ডেটা এনক্রিপশন | নিরাপত্তা নিশ্চিত করার জন্য, ডিজিটাল সিগনেচার, ওয়েবসাইট সুরক্ষা |
| সুরক্ষা | যদি গোপন কী সুরক্ষিত না থাকে তবে বিপদজনক | প্রাইভেট কী গোপন রাখা হয়, আরও সুরক্ষিত |
| ফিচার সাপোর্ট | সীমিত (যেমন হ্যাশিং, MAC) | ডিজিটাল সিগনেচার, Key exchange, Confidentiality |
| উদাহরণ | AES, DES, 3DES | RSA, ECC, ElGamal |
যখন ব্যবহার করবেন
- Symmetric Encryption ব্যবহার করা উচিত যখন আপনি দ্রুত এবং কম্পিউটেশনাল শক্তি কম ব্যবহার করতে চান, বিশেষ করে ছোট ডেটা সেটের জন্য, যেখানে কী সুরক্ষিতভাবে ভাগ করা সহজ।
- Asymmetric Encryption ব্যবহার করা উচিত যখন আপনি নিরাপত্তা নিশ্চিত করতে চান এবং কী বিতরণ একটি সমস্যা হয়ে দাঁড়ায়, যেমন ডিজিটাল সিগনেচার এবং পাবলিক কী ইনফ্রাস্ট্রাকচারের জন্য। এটি সুরক্ষিত কী বিতরণের জন্য খুবই কার্যকরী।
Java Cryptography Example (AES - Symmetric) এবং RSA (Asymmetric)
Symmetric Encryption Example (AES)
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;
public class AESExample {
public static void main(String[] args) throws Exception {
// Generate AES key
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 128-bit AES key
SecretKey secretKey = keyGen.generateKey();
// Create Cipher instance for AES encryption
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// Encrypt data
byte[] encryptedData = cipher.doFinal("Hello, World!".getBytes());
// Print encrypted data
System.out.println("Encrypted data: " + Base64.getEncoder().encodeToString(encryptedData));
// Decrypt data
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
// Print decrypted data
System.out.println("Decrypted data: " + new String(decryptedData));
}
}
Asymmetric Encryption Example (RSA)
import javax.crypto.Cipher;
import java.security.*;
public class RSAExample {
public static void main(String[] args) throws Exception {
// Generate RSA key pair
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048); // 2048-bit RSA key
KeyPair keyPair = keyGen.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// Create Cipher instance for RSA encryption
Cipher cipher = Cipher.getInstance("RSA");
// Encrypt data using public key
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = cipher.doFinal("Hello, RSA!".getBytes());
// Print encrypted data
System.out.println("Encrypted data: " + Base64.getEncoder().encodeToString(encryptedData));
// Decrypt data using private key
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
// Print decrypted data
System.out.println("Decrypted data: " + new String(decryptedData));
}
}
Symmetric Encryption এবং Asymmetric Encryption দুটি ক্রিপ্টোগ্রাফি প্রযুক্তি বিভিন্ন পরিস্থিতিতে ব্যবহৃত হয়। Symmetric Encryption দ্রুত এবং কম্পিউটেশনাল শক্তি কম ব্যবহার করে, তবে কী বিতরণ একটি সমস্যা হয়ে দাঁড়ায়। অপরদিকে, Asymmetric Encryption শক্তিশালী এবং নিরাপদ, কিন্তু এটি ধীর গতির এবং বেশি কম্পিউটেশনাল শক্তি প্রয়োজন। আপনার প্রোজেক্টের প্রয়োজন অনুযায়ী আপনি এই দুটি প্রযুক্তি বেছে নিতে পারেন।
Read more