> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/security/data-encryption.md).

# Data Encryption

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

আমরা প্রতিদিনই বিভিন্ন ওয়েবসাইট, মোবাইল অ্যাপ, এবং ক্লাউড সার্ভিস ব্যবহার করি যেখানে আমাদের পার্সোনাল ডাটা যেমন পাসওয়ার্ড, ব্যাংক ডিটেইলস, এবং মেসেজ ট্রান্সমিট করা হয়। সঠিক এনক্রিপশন ছাড়া এই তথ্যগুলো সহজেই হ্যাকারদের হাতে পড়ে যেতে পারে।

***

### **কীভাবে Data Encryption কাজ করে?**

Data Encryption মূলত **plaintext** (যে তথ্য সহজ ভাষায় আছে) কে **ciphertext** (একটি এনক্রিপ্টেড ফরম্যাট) এ রূপান্তরিত করে। এটি একটি নির্দিষ্ট **Encryption Algorithm** ব্যবহার করে সম্পন্ন হয় এবং এনক্রিপশন **key** ছাড়া এই ডাটা ডিকোড করা সম্ভব হয় না।

উদাহরণস্বরূপ, যদি কেউ "HELLO" শব্দটি এনক্রিপ্ট করে, তবে এটি এমন কিছু হয়ে যেতে পারে যেমন:\
👉 `5G$#2b@9z!`

এখন, শুধুমাত্র যাদের কাছে সঠিক **Decryption Key** আছে, তারাই এটি ডিক্রিপ্ট করে মূল মেসেজটি ফিরে পেতে পারবে।

***

### **Data Encryption এর প্রধান ধরণ**

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

1️⃣ Symmetric Encryption (একই Key দিয়ে এনক্রিপশন ও ডিক্রিপশন)\
2️⃣ Asymmetric Encryption (আলাদা Public এবং Private Key ব্যবহার করে এনক্রিপশন ও ডিক্রিপশন)

#### **1️⃣ Symmetric Encryption**

এই মেথডে **একই Key** ব্যবহার করে ডাটা এনক্রিপ্ট এবং ডিক্রিপ্ট করা হয়। এটি ফাস্ট এবং সহজ, তবে সমস্যা হলো – যদি কোনোভাবে Key চুরি হয়ে যায়, তাহলে হ্যাকার সহজেই ডাটা ডিকোড করতে পারবে।

🔹 **উদাহরণ:** **AES (Advanced Encryption Standard)**

নিচে Python ব্যবহার করে Symmetric Encryption দেখানো হলো:

```python
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')

# এনক্রিপশন এবং ডিক্রিপশন
encrypted = encrypt_message("Hello, World!")
print("Encrypted:", encrypted)

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

➡️ এখানে, **AES Algorithm** ব্যবহার করে একটি মেসেজ এনক্রিপ্ট এবং ডিক্রিপ্ট করা হয়েছে।

***

#### **2️⃣ Asymmetric Encryption**

এই পদ্ধতিতে দুটি আলাদা Key ব্যবহার করা হয়:\
🔹 **Public Key:** এনক্রিপশনের জন্য ব্যবহৃত হয়।\
🔹 **Private Key:** শুধুমাত্র অনুমোদিত ব্যক্তি এটি ব্যবহার করে ডাটা ডিক্রিপ্ট করতে পারে।

🔹 **উদাহরণ:** **RSA Algorithm**

নিচে Python ব্যবহার করে Asymmetric Encryption দেখানো হলো:

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

# Key pair তৈরি করা
key = RSA.generate(2048)
public_key = key.publickey().export_key()
private_key = key.export_key()

def encrypt_message(message, public_key):
    rsa_key = RSA.import_key(public_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, private_key):
    rsa_key = RSA.import_key(private_key)
    cipher = PKCS1_OAEP.new(rsa_key)
    decrypted = cipher.decrypt(base64.b64decode(encrypted_message))
    return decrypted.decode('utf-8')

# এনক্রিপশন এবং ডিক্রিপশন
encrypted = encrypt_message("Hello, Secure World!", public_key)
print("Encrypted:", encrypted)

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

➡️ এখানে, **Public Key দিয়ে মেসেজ এনক্রিপ্ট** করা হয়েছে এবং **Private Key দিয়ে সেটি ডিক্রিপ্ট** করা হয়েছে।

***

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

✅ **Confidentiality :** শুধুমাত্র অনুমোদিত ব্যবহারকারী ডাটা পড়তে(Read) পারবে।\
✅ **Integrity :** ডাটা পরিবর্তন করা হলে তা শনাক্ত করা যাবে।\
✅ **Authentication :** প্রমাণ করা যাবে যে ডাটা প্রকৃত উৎস থেকে এসেছে।\
✅ **Compliance :** অনেক আইন এবং নিয়মাবলী (যেমন GDPR, HIPAA) এনক্রিপশন ব্যবহারের কথা বলে।

***

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

💻 **Web Applications:** HTTPS (SSL/TLS) ব্যবহার করে ওয়েবসাইট এনক্রিপ্ট করা হয়।\
📱 **Mobile Apps:** অ্যাপের মধ্যে থাকা ডাটা এনক্রিপশন করা হয় যেন সিকিউরিটি নিশ্চিত থাকে।\
💳 **Banking & Payments:** অনলাইন লেনদেন এবং কার্ড ইনফরমেশন এনক্রিপশন করা হয়।\
☁️ **Cloud Storage:** ক্লাউডে সংরক্ষিত ফাইলগুলো এনক্রিপশন করা থাকে যেন শুধুমাত্র অনুমোদিত ব্যবহারকারী তা ডিক্রিপ্ট করতে পারে।

***

বর্তমান যুগে **Data Encryption** ছাড়া **সিকিউরিটি নিশ্চিত করা প্রায় অসম্ভব**। সিস্টেম ডিজাইনের সময় ডাটা এনক্রিপশন ইমপ্লিমেন্ট করা মানে **ব্যবহারকারীদের তথ্যকে হ্যাকিং, ডাটা ব্রিচ এবং সাইবার আক্রমণ থেকে রক্ষা করা**।

আপনি যদি একজন **ডেভেলপার** বা **সিস্টেম আর্কিটেক্ট** হয়ে থাকেন, তাহলে এনক্রিপশন স্ট্র্যাটেজি সম্পর্কে জানা এবং এটি সঠিকভাবে ইমপ্লিমেন্ট করা **অত্যন্ত গুরুত্বপূর্ণ**।
