Digital Signature:
Digital Signature হলো একটি ক্রিপ্টোগ্রাফিক প্রযুক্তি যা ডেটার অখণ্ডতা (data integrity), প্রমাণীকরণ (authentication), এবং অস্বীকৃতিরোধ (non-repudiation) নিশ্চিত করতে ব্যবহৃত হয়। এটি একটি ডিজিটাল "স্বাক্ষর" যা সাধারণত কোনও ডেটার সঙ্গে সম্পর্কিত থাকে, যেমন একটি ই-মেইল, ডকুমেন্ট বা সোর্স কোড।
ডিজিটাল স্বাক্ষরের মাধ্যমে এটি নিশ্চিত করা যায় যে, একটি ডেটা বা বার্তা পরিবর্তন করা হয়নি এবং সেই বার্তাটি ওই ব্যক্তির পক্ষ থেকে এসেছে। এটি সাধারণত পাবলিক কীগ্রহণের (Public Key Infrastructure বা PKI) ভিত্তিতে কাজ করে।
Digital Signature এর কাজ করার প্রক্রিয়া:
- Message Digest:
- প্রথমে ডেটা বা বার্তার জন্য একটি message digest তৈরি করা হয়। এটি একটি একক হ্যাশ ভ্যালু যা ডেটার প্রতিনিধিত্ব করে এবং এটি খুবই সংক্ষিপ্ত (fixed size) হয়। হ্যাশ ফাংশন যেমন SHA-256 ব্যবহার করা হয়।
- Signing:
- এরপর, ব্যক্তিগত কীগুলির (Private Key) সাহায্যে হ্যাশ ভ্যালুটিকে sign করা হয়। এটি ডিজিটাল স্বাক্ষর তৈরি করে, যা আসলে একটি এনক্রিপ্টেড হ্যাশ ভ্যালু হয়।
- Verification:
- যখন অন্য কেউ ডিজিটাল স্বাক্ষর যাচাই করতে চায়, তখন তারা public key ব্যবহার করে সেই স্বাক্ষরটি যাচাই করে। যদি হ্যাশ ভ্যালু ঠিক থাকে, তবে এটি নিশ্চিত করে যে ডেটা বা বার্তা অপরিবর্তিত এবং প্রকৃত ব্যক্তি থেকে এসেছে।
Java তে Digital Signature এর প্রয়োগ:
Java তে ডিজিটাল স্বাক্ষর তৈরি এবং যাচাই করার জন্য java.security প্যাকেজে সরঞ্জামগুলি এবং API রয়েছে। এর মধ্যে Signature, KeyPairGenerator, এবং MessageDigest ক্লাসগুলি অন্যতম।
Java তে ডিজিটাল স্বাক্ষর তৈরির জন্য সাধারণত দুটি ধাপ রয়েছে:
- Create a Digital Signature
- Verify the Digital Signature
1. Digital Signature তৈরি করার প্রক্রিয়া:
প্রথমে, আপনাকে একটি KeyPair (পাবলিক এবং প্রাইভেট কীগুলি) তৈরি করতে হবে এবং তারপর প্রাইভেট কীগুলি দিয়ে হ্যাশ সাইন করতে হবে।
উদাহরণ:
import java.security.*;
import java.util.Base64;
public class DigitalSignatureExample {
public static void main(String[] args) throws Exception {
// Step 1: Create a KeyPair (Public and Private keys)
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048); // Size of the key
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// Step 2: Create a Signature object and initialize it with the private key
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(keyPair.getPrivate());
// Step 3: Update the data to be signed
String data = "This is the data to be signed.";
signature.update(data.getBytes());
// Step 4: Generate the digital signature
byte[] digitalSignature = signature.sign();
String signatureBase64 = Base64.getEncoder().encodeToString(digitalSignature);
System.out.println("Digital Signature: " + signatureBase64);
}
}
ব্যাখ্যা:
- KeyPairGenerator: এটি একটি পাবলিক এবং প্রাইভেট কীগুলি তৈরি করার জন্য ব্যবহৃত হয়।
- Signature: এটি
SHA256withRSAঅ্যালগরিদম ব্যবহার করে হ্যাশ সাইন করে এবং ডিজিটাল স্বাক্ষর তৈরি করে। - sign(): এটি ডিজিটাল স্বাক্ষর তৈরি করার জন্য ব্যবহার করা হয়।
2. Digital Signature যাচাই করার প্রক্রিয়া:
যখন আপনি ডেটার ডিজিটাল স্বাক্ষর যাচাই করতে চান, তখন পাবলিক কীগুলির সাহায্যে সাইনেচারটি যাচাই করবেন।
উদাহরণ:
import java.security.*;
import java.util.Base64;
public class VerifyDigitalSignatureExample {
public static void main(String[] args) throws Exception {
// Step 1: Create a KeyPair (Public and Private keys)
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// Step 2: Create a Signature object and initialize it with the private key
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(keyPair.getPrivate());
// Step 3: Update the data to be signed
String data = "This is the data to be signed.";
signature.update(data.getBytes());
// Step 4: Generate the digital signature
byte[] digitalSignature = signature.sign();
String signatureBase64 = Base64.getEncoder().encodeToString(digitalSignature);
// Step 5: Verify the digital signature using public key
Signature verifySignature = Signature.getInstance("SHA256withRSA");
verifySignature.initVerify(keyPair.getPublic());
verifySignature.update(data.getBytes());
boolean isVerified = verifySignature.verify(Base64.getDecoder().decode(signatureBase64));
if (isVerified) {
System.out.println("Digital signature is valid.");
} else {
System.out.println("Digital signature is not valid.");
}
}
}
ব্যাখ্যা:
- initVerify(): পাবলিক কীগুলির মাধ্যমে স্বাক্ষর যাচাই করার জন্য ব্যবহৃত হয়।
- verify(): এটি যাচাই করে যে, ডিজিটাল স্বাক্ষরটি সঠিক এবং ডেটা পরিবর্তিত হয়নি।
ডিজিটাল স্বাক্ষরের সুবিধাসমূহ:
- ডেটার অখণ্ডতা (Data Integrity):
- ডিজিটাল স্বাক্ষরের মাধ্যমে নিশ্চিত করা যায় যে, ডেটাটি পরিবর্তন করা হয়নি। যদি ডেটা পরিবর্তিত হয়, তবে স্বাক্ষরটি আর বৈধ থাকবে না।
- প্রমাণীকরণ (Authentication):
- ডিজিটাল স্বাক্ষর প্রমাণ করে যে, সংশ্লিষ্ট ডেটাটি প্রেরক দ্বারা সই করা হয়েছে। এটি নিশ্চিত করে যে, ডেটাটি যে ব্যক্তি প্রেরণ করেছে, সেটিই আসল।
- অস্বীকৃতিরোধ (Non-repudiation):
- একবার একটি ডেটা ডিজিটাল স্বাক্ষরিত হলে, প্রেরক সেই ডেটাকে অস্বীকার করতে পারবে না। এটি আইনি বা নিরাপত্তা ভিত্তিক প্রমাণ হিসেবে ব্যবহৃত হতে পারে।
Digital Signature হলো একটি অত্যন্ত গুরুত্বপূর্ণ নিরাপত্তা প্রযুক্তি যা ডেটার অখণ্ডতা, প্রমাণীকরণ এবং অস্বীকৃতিরোধ নিশ্চিত করে। Java তে এটি java.security প্যাকেজের মাধ্যমে কার্যকরভাবে বাস্তবায়িত করা যায়, যা ডেটার স্বাক্ষর তৈরি এবং যাচাই করতে সাহায্য করে।
Read more