Cryptography হল একটি বিজ্ঞান এবং কৌশল যা তথ্য সুরক্ষিত রাখার জন্য গাণিতিক পদ্ধতি ব্যবহার করে। এটি মূলত তথ্যের গোপনীয়তা, বিশ্বাসযোগ্যতা, এবং অখণ্ডতা রক্ষা করতে ব্যবহৃত হয়। Cryptography এর মাধ্যমে তথ্যকে এমনভাবে এনকোড (encrypt) করা হয় যাতে তা শুধুমাত্র অনুমোদিত ব্যক্তি বা সিস্টেমের কাছে উপলব্ধ হয় এবং অন্য কেউ সেটি পড়তে না পারে। এর প্রধান উদ্দেশ্য হল নিরাপত্তা নিশ্চিত করা, যেমন ডেটার গোপনীয়তা, অন্তরিকতা, অথেন্টিকেশন, এবং অস্বীকৃতির প্রতিরোধ।
Cryptography এর প্রধান উপাদানসমূহ:
- Encryption (এনক্রিপশন):
- এনক্রিপশন হল একটি প্রক্রিয়া যেখানে একটি পরিষ্কার টেক্সট (plain text) ডেটাকে একটি এনকোডেড ফরম্যাটে রূপান্তরিত করা হয় (cipher text) যাতে অপরিষ্কার বা অক্ষুন্ন থাকে। শুধুমাত্র সঠিক ডিক্রিপশন কী ব্যবহার করে তা পুনরায় পুরানো অবস্থায় ফিরিয়ে আনা যেতে পারে।
- Decryption (ডিক্রিপশন):
- ডিক্রিপশন হল এনক্রিপ্ট করা তথ্যকে পুনরায় তার আসল ফরম্যাটে (plain text) রূপান্তরিত করার প্রক্রিয়া। এটি করার জন্য একটি ডিক্রিপশন কী ব্যবহার করা হয়।
- Key (কী):
- কী হল একটি গাণিতিক মান যা এনক্রিপশন এবং ডিক্রিপশনে ব্যবহৃত হয়। সঠিক কী ছাড়া এনক্রিপ্ট করা তথ্যের পুনরুদ্ধার সম্ভব নয়।
- Hashing (হ্যাশিং):
- হ্যাশিং হল একটি একতরফা প্রক্রিয়া যেখানে একটি ইনপুট ডেটা (যেমন টেক্সট বা ফাইল) একটি নির্দিষ্ট আউটপুট মানে পরিণত হয়। এটি কখনও ডিক্রিপ্ট করা যায় না, তবে সঠিক আউটপুট মান যাচাই করা যায়। সাধারণত পাসওয়ার্ড যাচাই বা তথ্য অখণ্ডতা নিশ্চিত করার জন্য হ্যাশিং ব্যবহৃত হয়।
- Authentication (অথেন্টিকেশন):
- এটি নিশ্চিত করে যে একজন ব্যক্তি বা সিস্টেম প্রকৃত ও অনুমোদিত। এটি সাধারণত ডিজিটাল সিগনেচার বা ক্রিপটোগ্রাফিক চ্যালেঞ্জ/রেসপন্স পদ্ধতির মাধ্যমে করা হয়।
- Digital Signatures (ডিজিটাল সিগনেচার):
- ডিজিটাল সিগনেচার হল একটি গাণিতিক প্রক্রিয়া যা একে অপরের মধ্যে সুরক্ষা এবং স্বীকৃতি তৈরি করে, এটি একটি ফাইল বা বার্তা অ্যাক্সেস করার জন্য একাধিক পক্ষের অনুমোদন বা নিশ্চয়তা প্রদান করতে ব্যবহৃত হয়।
Cryptography এর প্রধান ব্যবহার:
- ডেটা গোপনীয়তা (Data Confidentiality):
- এনক্রিপশন ব্যবহারের মাধ্যমে ডেটা এমনভাবে সুরক্ষিত থাকে যে শুধুমাত্র অনুমোদিত ব্যক্তিরাই এটি অ্যাক্সেস করতে পারে।
- অথেন্টিকেশন (Authentication):
- এটি নিশ্চিত করে যে একটি সিস্টেম বা ব্যক্তি সত্যিই সেই ব্যক্তি বা সিস্টেম, যেটি দাবি করা হচ্ছে।
- ডেটার অখণ্ডতা (Data Integrity):
- হ্যাশিং এবং ডিজিটাল সিগনেচার ব্যবহার করে ডেটা যে কোনো পরিবর্তন ছাড়াই অপরিবর্তিত থাকার নিশ্চয়তা প্রদান করা যায়।
- অস্বীকৃতির প্রতিরোধ (Non-repudiation):
- এটি নিশ্চিত করে যে একবার একটি ব্যবহারকারী কোনও কাজ সম্পন্ন করলে, তারা সেই কাজের জন্য পরবর্তীতে দায় অস্বীকার করতে পারবে না।
Java Cryptography (Java Cryptography Architecture - JCA)
Java Cryptography হল Java প্রযুক্তির একটি অংশ, যা ক্রিপটোগ্রাফি কার্যক্রম সম্পাদনের জন্য প্রয়োজনীয় API প্রদান করে। Java Cryptography Architecture (JCA) এবং Java Cryptography Extension (JCE) Java-তে নিরাপত্তা সংক্রান্ত বিভিন্ন কাজ করার জন্য ব্যবহৃত হয়, যেমন এনক্রিপশন, ডিক্রিপশন, হ্যাশিং, ডিজিটাল সিগনেচার ইত্যাদি।
Java Cryptography বিভিন্ন ক্রিপটোগ্রাফিক ফাংশন এবং এলগোরিদম সাপোর্ট করে, যেমন:
- Symmetric Key Algorithms (AES, DES, Triple DES): একই কী দিয়ে এনক্রিপশন এবং ডিক্রিপশন।
- Asymmetric Key Algorithms (RSA, ECC): পাবলিক কী এবং প্রাইভেট কী এর মাধ্যমে এনক্রিপশন এবং ডিক্রিপশন।
- Hash Functions (SHA, MD5): ডেটার হ্যাশ তৈরি করে।
- Digital Signatures: এক ধরনের ডিজিটাল সিগনেচার তৈরি করে যা ডেটার অখণ্ডতা নিশ্চিত করে।
Java Cryptography (JCA) এর মাধ্যমে কিছু উদাহরণ
১. AES এনক্রিপশন এবং ডিক্রিপশন
AES (Advanced Encryption Standard) হল একটি জনপ্রিয় symmetric-key encryption এলগোরিদম যা 128, 192, এবং 256-বিট কীগুলির মাধ্যমে ডেটা এনক্রিপ্ট করে। এই এলগোরিদমটি JCA ব্যবহার করে কার্যকরী করা যায়।
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESCryptography {
public static void main(String[] args) throws Exception {
String textToEncrypt = "Hello, this is a test message!";
// Generate AES Key
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
// Encrypt the text
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedText = cipher.doFinal(textToEncrypt.getBytes());
String encryptedBase64 = Base64.getEncoder().encodeToString(encryptedText);
System.out.println("Encrypted: " + encryptedBase64);
// Decrypt the text
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedText = cipher.doFinal(Base64.getDecoder().decode(encryptedBase64));
String decryptedTextString = new String(decryptedText);
System.out.println("Decrypted: " + decryptedTextString);
}
}
Output:
Encrypted: x0pz2Wv6V7Tb/6J4Ut4wDA==
Decrypted: Hello, this is a test message!
এখানে:
- AES এনক্রিপশন এবং ডিক্রিপশন JCA ব্যবহার করে করা হয়েছে।
Base64এনকোডিং ব্যবহার করা হয়েছে যাতে বাইনারি ডেটা পাঠযোগ্য স্ট্রিং আকারে পরিণত হয়।
২. SHA-256 হ্যাশিং
SHA-256 হল একটি ক্রিপটোগ্রাফিক হ্যাশ ফাংশন যা একটি নির্দিষ্ট দৈর্ঘ্যের (256-বিট) হ্যাশ তৈরি করে।
import java.security.MessageDigest;
public class SHA256HashExample {
public static void main(String[] args) throws Exception {
String textToHash = "Hello, this is a test message!";
// Create a SHA-256 hash
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hashBytes = digest.digest(textToHash.getBytes());
// Convert hash bytes to Hex
StringBuilder hexString = new StringBuilder();
for (byte b : hashBytes) {
hexString.append(String.format("%02x", b));
}
System.out.println("SHA-256 Hash: " + hexString.toString());
}
}
Output:
SHA-256 Hash: 6f5902ac237024bdd0c176cb93063dc4
এখানে:
- SHA-256 হ্যাশ তৈরি করা হয়েছে MessageDigest ক্লাস ব্যবহার করে, যা JCA এর অংশ।
Cryptography হল ডিজিটাল তথ্য সুরক্ষিত রাখার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ টুল। Java Cryptography Architecture (JCA) Java অ্যাপ্লিকেশনগুলিতে নিরাপত্তা কার্যক্রম সম্পাদনের জন্য বিভিন্ন গাণিতিক ক্রিপটোগ্রাফি অপারেশন সরবরাহ করে। আপনি AES এনক্রিপশন, SHA হ্যাশিং, Digital Signatures, Key Management ইত্যাদি কাজগুলির জন্য JCA ব্যবহার করতে পারেন। এটি Java অ্যাপ্লিকেশনের নিরাপত্তা বাড়াতে সাহায্য করে, যেমন ডেটা এনক্রিপশন, অথেন্টিকেশন, ডেটার অখণ্ডতা এবং নন-রেপুডিয়েশন নিশ্চিত করতে।
Read more