Data Encryption

ডাটা এনক্রিপশন (Data Encryption) হলো এমন একটি প্রযুক্তি, যা ডাটাকে এক ফরম্যাট থেকে আরেক ফরম্যাটে রূপান্তরিত করে, যাতে অনুমোদিত ব্যবহারকারী ছাড়া অন্য কেউ সেটি বুঝতে না পারে। সাইবার সিকিউরিটির অন্যতম গুরুত্বপূর্ণ স্তম্ভ হিসেবে এটি ব্যক্তিগত তথ্য, লেনদেন এবং সেনসিটিভ ডাটাকে নিরাপদ রাখে।

প্লেনটেক্সট (Plaintext) বা সাধারণ ডাটাকে একটি নির্দিষ্ট এনক্রিপশন অ্যালগরিদম ব্যবহার করে সাইফারটেক্সট (Ciphertext) বা এনক্রিপ্টেড ফরম্যাটে পরিণত করাই এর মূল কাজ। সঠিক ডিক্রিপশন কি (Decryption Key) ছাড়া এই ডাটা ডিকোড করা সম্ভব হয় না। উদাহরণস্বরূপ, "HELLO" শব্দটি এনক্রিপ্ট করার পর সেটি "5G$#2b@9z!" এর মতো দুর্বোধ্য একটি স্ট্রিংয়ে পরিণত হতে পারে।

সিস্টেম ডিজাইনে মূলত দুই ধরনের এনক্রিপশন ব্যবহৃত হয়:

১. Symmetric Encryption

এই মেথডে একই Key ব্যবহার করে ডাটা এনক্রিপ্ট এবং ডিক্রিপ্ট করা হয়। এটি ফাস্ট এবং সহজ, তবে প্রধান চ্যালেঞ্জ হলো Key ম্যানেজমেন্ট—যদি কোনোভাবে Key লিক হয়ে যায়, তাহলে হ্যাকার সহজেই ডাটা ডিকোড করতে পারবে। এর সবচেয়ে জনপ্রিয় উদাহরণ হলো AES (Advanced Encryption Standard)।

Python ইমপ্লিমেন্টেশন (AES):

from Crypto.Cipher import AES
import base64

# 16-byte (128-bit) Key
key = b'Sixteen byte key'  

def encrypt_message(message):
    cipher = AES.new(key, AES.MODE_EAX)
    nonce = cipher.nonce
    ciphertext, tag = cipher.encrypt_and_digest(message.encode('utf-8'))
    return base64.b64encode(nonce + ciphertext).decode('utf-8')

def decrypt_message(encrypted_message):
    encrypted_message = base64.b64decode(encrypted_message)
    nonce = encrypted_message[:16]
    ciphertext = encrypted_message[16:]
    cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
    return cipher.decrypt(ciphertext).decode('utf-8')

# Running the example
encrypted = encrypt_message("Hello, World!")
print("Encrypted:", encrypted)

decrypted = decrypt_message(encrypted)
print("Decrypted:", decrypted)

Java ইমপ্লিমেন্টেশন (AES):

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;

public class SymmetricEncryptionDemo {
    public static void main(String[] args) throws Exception {
        // Generate a 128-bit AES key
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128);
        SecretKey secretKey = keyGenerator.generateKey();

        Cipher cipher = Cipher.getInstance("AES");

        // Encrypt the message
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal("Hello, World!".getBytes());
        String encryptedMessage = Base64.getEncoder().encodeToString(encryptedBytes);
        System.out.println("Encrypted: " + encryptedMessage);

        // Decrypt the message
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedMessage));
        System.out.println("Decrypted: " + new String(decryptedBytes));
    }
}

২. Asymmetric Encryption

এই পদ্ধতিতে দুটি আলাদা Key ব্যবহার করা হয়: একটি Public Key (যা সবার জন্য উন্মুক্ত এবং এনক্রিপশনের কাজে ব্যবহৃত হয়) এবং একটি Private Key (যা গোপন থাকে এবং শুধুমাত্র অনুমোদিত ব্যক্তি ডাটা ডিক্রিপ্ট করতে পারে)। এর একটি ক্লাসিক উদাহরণ হলো RSA Algorithm।

Python ইমপ্লিমেন্টেশন (RSA):

Python

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import base64

# Generate Key Pair
key = RSA.generate(2048)
public_key = key.publickey().export_key()
private_key = key.export_key()

def encrypt_message(message, pub_key):
    rsa_key = RSA.import_key(pub_key)
    cipher = PKCS1_OAEP.new(rsa_key)
    encrypted = cipher.encrypt(message.encode('utf-8'))
    return base64.b64encode(encrypted).decode('utf-8')

def decrypt_message(encrypted_message, priv_key):
    rsa_key = RSA.import_key(priv_key)
    cipher = PKCS1_OAEP.new(rsa_key)
    decrypted = cipher.decrypt(base64.b64decode(encrypted_message))
    return decrypted.decode('utf-8')

# Running the example
encrypted_msg = encrypt_message("Hello, Secure World!", public_key)
print("Encrypted:", encrypted_msg)

decrypted_msg = decrypt_message(encrypted_msg, private_key)
print("Decrypted:", decrypted_msg)

Java ইমপ্লিমেন্টেশন (RSA):

Java

import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Base64;

public class AsymmetricEncryptionDemo {
    public static void main(String[] args) throws Exception {
        // Generate a 2048-bit RSA Key Pair
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();

        Cipher cipher = Cipher.getInstance("RSA");

        // Encrypt using Public Key
        cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
        byte[] encryptedBytes = cipher.doFinal("Hello, Secure World!".getBytes());
        String encryptedMessage = Base64.getEncoder().encodeToString(encryptedBytes);
        System.out.println("Encrypted: " + encryptedMessage);

        // Decrypt using Private Key
        cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedMessage));
        System.out.println("Decrypted: " + new String(decryptedBytes));
    }
}

কেন Data Encryption গুরুত্বপূর্ণ?

  • Confidentiality: শুধুমাত্র অনুমোদিত ব্যবহারকারীই ডাটা পড়তে পারবে।

  • Integrity: ট্রান্সমিশনের সময় ডাটা পরিবর্তন করা হলে তা শনাক্ত করা যাবে।

  • Authentication: প্রমাণ করা যাবে যে ডাটা প্রকৃত এবং বিশ্বস্ত উৎস থেকে এসেছে।

  • Compliance: আধুনিক অনেক আইন এবং রেগুলেশন (যেমন: GDPR, HIPAA, PCI-DSS) ব্যবহারকারীর ডাটা সুরক্ষার জন্য এনক্রিপশন ব্যবহার বাধ্যতামূলক করেছে।

সিস্টেম ডিজাইনে Data Encryption এর ব্যবহার

তুমি যখন কোনো স্কেলেবল ব্যাকএন্ড সিস্টেম ডিজাইন করবে, তখন বিভিন্ন লেয়ারে এনক্রিপশন নিশ্চিত করতে হয়:

  • Web Applications: ডেটা ইন-ট্রানজিট (Data in Transit) সুরক্ষিত রাখতে HTTPS (SSL/TLS) ব্যবহার করা হয়।

  • Database & Storage: ক্লাউড স্টোরেজ বা রিলেশনাল ডেটাবেসে সংবেদনশীল তথ্য (যেমন ইউজার ক্রেডেনশিয়াল) ডেটা অ্যাট-রেস্ট (Data at Rest) এনক্রিপশন ব্যবহার করে স্টোর করা হয়।

  • Banking & Payments: অনলাইন পেমেন্ট গেটওয়েতে কার্ড ইনফরমেশন এনক্রিপশন এবং টোকেনাইজেশনের মাধ্যমে প্রসেস করা হয়।

  • API Security: মাইক্রোসার্ভিস আর্কিটেকচারে সার্ভিসগুলোর মধ্যে যোগাযোগের সময় পে-লোড এনক্রিপ্ট করে পাঠানো হয়।

বর্তমান যুগে Data Encryption ছাড়া সিকিউরিটি নিশ্চিত করা অসম্ভব। অ্যাপ্লিকেশন লেভেল থেকে শুরু করে ইনফ্রাস্ট্রাকচার লেভেল পর্যন্ত সঠিক এনক্রিপশন স্ট্র্যাটেজি মেইনটেইন করা যেকোনো সুরক্ষিত আর্কিটেকচারের মূল ভিত্তি।