পাঠ ৩৫ · ৬০-এর মধ্যে · মডিউল ৭
Home / Courses / Cybersecurity & Ethical Hacking / এনক্রিপশন রিভিউ

সিমেট্রিক ও অ্যাসিমেট্রিক এনক্রিপশন রিভিউ

Symmetric & asymmetric encryption review
৮ মিনিট পড়া মধ্যবর্তী · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • সিমেট্রিক বনাম অ্যাসিমেট্রিক এনক্রিপশনের মূল পার্থক্য ও ট্রেড-অফ
  • কেন কী ডিস্ট্রিবিউশন সিমেট্রিক এনক্রিপশনের সবচেয়ে বড় সমস্যা, এবং অ্যাসিমেট্রিক কীভাবে সমাধান করে
  • কেন বাস্তব সিস্টেম একটি নয়, বরং একটি হাইব্রিড পদ্ধতি ব্যবহার করে
  • একটি XOR-cipher toy দিয়ে সিমেট্রিক এনক্রিপশনের মূল ধারণা হাতে-কলমে দেখা

১ · সিমেট্রিক এনক্রিপশন — একই কী, দুই দিকে

সিমেট্রিক এনক্রিপশন (Symmetric Encryption)Symmetric Encryptionএকই গোপন কী ব্যবহার করে ডেটা এনক্রিপ্ট এবং ডিক্রিপ্ট উভয়ই করা হয়। উদাহরণ: AES। -এ একটি একক গোপন কী দিয়েই ডেটা এনক্রিপ্ট এবং ডিক্রিপ্ট — দুটোই করা হয়। AES (Advanced Encryption Standard) এর শিল্প-মান উদাহরণ — গাণিতিকভাবে দ্রুত, তাই বড় পরিমাণ ডেটা এনক্রিপ্ট করার জন্য আদর্শ।

কিন্তু একটি মৌলিক সমস্যা থেকে যায়: দুই পক্ষকেই ঠিক একই গোপন কী জানতে হবে যোগাযোগ শুরুর আগেই। সেই কী একটি অবিশ্বস্ত চ্যানেলের (যেমন ইন্টারনেট) মধ্য দিয়ে নিরাপদে পাঠানো — এটিই কী ডিস্ট্রিবিউশন সমস্যা — অনেকটা এনক্রিপশন যে সমস্যা সমাধান করতে চায় সেই একই সমস্যায় ফিরে আসার মতো।

২ · অ্যাসিমেট্রিক এনক্রিপশন — পাবলিক/প্রাইভেট কী-জোড়া

অ্যাসিমেট্রিক এনক্রিপশন (Asymmetric Encryption)Asymmetric Encryptionএকটি গাণিতিকভাবে সম্পর্কিত পাবলিক/প্রাইভেট কী-জোড়া ব্যবহার করে — পাবলিক কী দিয়ে এনক্রিপ্ট করা ডেটা শুধুমাত্র সংশ্লিষ্ট প্রাইভেট কী দিয়ে ডিক্রিপ্ট করা যায়। উদাহরণ: RSA। কী ডিস্ট্রিবিউশন সমস্যাটি সরাসরি সমাধান করে — RSA-এর মতো অ্যালগরিদমে একটি গাণিতিকভাবে সম্পর্কিত পাবলিক/প্রাইভেট কী-জোড়া তৈরি হয়। পাবলিক কী প্রকাশ্যে শেয়ার করা যায় (কেউ দেখলেও ক্ষতি নেই), কিন্তু শুধুমাত্র সংশ্লিষ্ট প্রাইভেট কী-এর মালিকই সেই কী দিয়ে এনক্রিপ্ট করা ডেটা ডিক্রিপ্ট করতে পারে।

সমস্যা: অ্যাসিমেট্রিক অ্যালগরিদমের গাণিতিক অপারেশন সিমেট্রিকের চেয়ে অনেক বেশি ব্যয়বহুল (ধীর) — তাই বড় পরিমাণ ডেটা এনক্রিপ্ট করার জন্য এটি ব্যবহারিক নয়।

৩ · বাস্তব সিস্টেম উভয়ই ব্যবহার করে কেন — Hybrid Approach

এই দুটি ট্রেড-অফ একসাথে মিলিয়ে, বাস্তব সিস্টেম (যেমন TLS, ওয়েব ব্রাউজিং-এর জন্য) একটি hybrid approach ব্যবহার করে —

অ্যাসিমেট্রিক দিয়ে সিমেট্রিক কী বিনিময় উভয়ে একই সিমেট্রিক কী পেল AES দিয়ে দ্রুত ডেটা ট্রান্সফার
অ্যাসিমেট্রিক ক্রিপ্টো শুধু হ্যান্ডশেকে ব্যবহৃত হয়ে একটি ভাগাভাগি সিমেট্রিক কী নিরাপদে প্রতিষ্ঠা করে — তারপর দ্রুত সিমেট্রিক এনক্রিপশন বাকি সেশন চালায়।

প্রথমে অ্যাসিমেট্রিক ক্রিপ্টো ব্যবহার করে দুই পক্ষ নিরাপদে একটি সাধারণ সিমেট্রিক কী নিয়ে সম্মত হয় (কী ডিস্ট্রিবিউশন সমস্যা সমাধান), তারপর বাকি পুরো সেশনের প্রকৃত ডেটা ট্রান্সফারের জন্য সেই সিমেট্রিক কী দিয়ে দ্রুত AES এনক্রিপশন ব্যবহার করা হয় (গতির জন্য)। এটিই "সেরা দুই জগতের" পদ্ধতি — L38-এ TLS হ্যান্ডশেকের এই ঠিক এই প্যাটার্নটিই বিস্তারিতভাবে দেখব।

৪ · Code cell — একটি toy সিমেট্রিক XOR-cipher

নিচের কোডটি সিমেট্রিক এনক্রিপশনের ধারণাটি ("একই কী দিয়ে এনক্রিপ্ট এবং ডিক্রিপ্ট") হাতে-কলমে দেখানোর জন্য — এটি একটি বাস্তব, কার্যকরী XOR সিফার, কিন্তু স্পষ্টভাবে একটি শিক্ষামূলক দৃষ্টান্ত মাত্র, প্রোডাকশন-গ্রেড ক্রিপ্টো নয়।

Python
def xor_cipher(data: str, key: str) -> str:
    """শিক্ষামূলক XOR সিফার — সিমেট্রিক এনক্রিপশনের ধারণা দেখাতে, প্রোডাকশন-গ্রেড ক্রিপ্টো নয়।"""
    key_bytes = key.encode()
    result_bytes = bytes(
        byte ^ key_bytes[i % len(key_bytes)]
        for i, byte in enumerate(data.encode())
    )
    return result_bytes.hex()  # ciphertext-কে পড়ার-যোগ্য হেক্স হিসেবে দেখানো হলো

def xor_decipher(hex_data: str, key: str) -> str:
    key_bytes = key.encode()
    data_bytes = bytes.fromhex(hex_data)
    result_bytes = bytes(
        byte ^ key_bytes[i % len(key_bytes)]
        for i, byte in enumerate(data_bytes)
    )
    return result_bytes.decode()

shared_key = "ABCLTECH"
plaintext = "Meet at the north gate at 9pm"

ciphertext = xor_cipher(plaintext, shared_key)
decrypted = xor_decipher(ciphertext, shared_key)

print("মূল বার্তা (plaintext):     ", plaintext)
print("এনক্রিপ্ট করা (ciphertext): ", ciphertext)
print("ডিক্রিপ্ট করা:              ", decrypted)
print("সঠিকভাবে রাউন্ড-ট্রিপ হলো?  ", plaintext == decrypted)
print()
print("নোট: বাস্তব সিস্টেম এই ধরনের কাজে XOR নয়, AES (সিমেট্রিক) ব্যবহার করে —")
print("XOR এখানে শুধু 'একই কী দিয়ে এনক্রিপ্ট/ডিক্রিপ্ট' ধারণাটি দেখানোর জন্য।")

    
সতর্কতা · কেন XOR প্রোডাকশনে ব্যবহার করা উচিত নয়

একটি repeating-key XOR সিফার ফ্রিকোয়েন্সি অ্যানালাইসিস ও known-plaintext আক্রমণের কাছে সহজেই ভেঙে পড়ে — আক্রমণকারী যদি কোনো অংশের plaintext আন্দাজ/জানে (যেমন একটি সাধারণ হেডার), সে সেটিকে ciphertext-এর সাথে XOR করে সরাসরি কী বের করে ফেলতে পারে। AES বহু রাউন্ডের জটিল, নন-লিনিয়ার ট্রান্সফরমেশন ব্যবহার করে ঠিক এই ধরনের বিশ্লেষণ প্রতিরোধ করার জন্যই ডিজাইন করা — এই কারণেই বাস্তব সিস্টেম XOR নয়, AES ব্যবহার করে।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ কেন সিমেট্রিক এনক্রিপশন দ্রুত, কিন্তু কী ডিস্ট্রিবিউশন কঠিন?

সিমেট্রিক অ্যালগরিদম (যেমন AES) তুলনামূলক সরল, দ্রুত গাণিতিক অপারেশন ব্যবহার করে, তাই বড় পরিমাণ ডেটা এনক্রিপ্ট করা কম্পিউটেশনালি সস্তা। কিন্তু দুই পক্ষকেই ঠিক একই গোপন কী আগে থেকে জানতে হয়, এবং সেই কী একটি অবিশ্বস্ত চ্যানেলে নিরাপদে পাঠানো — এটিই এনক্রিপশন যে সমস্যা সমাধান করতে চায় সেই একই সমস্যায় ফিরে আসার মতো — এটি অ্যাসিমেট্রিক কী-এক্সচেঞ্জ দিয়ে সমাধান করা হয়।

প্র ০২ TLS কেন পুরো সেশনের জন্য শুধু অ্যাসিমেট্রিক এনক্রিপশন ব্যবহার করে না?

RSA-স্টাইল অ্যাসিমেট্রিক অপারেশন সিমেট্রিকের চেয়ে গাণিতিকভাবে অনেক বেশি ব্যয়বহুল। পুরো সেশনের ডেটার (যা মেগাবাইট পরিমাণ হতে পারে) জন্য এটি ব্যবহার করলে অনেক ধীর হয়ে যেত। তাই TLS অ্যাসিমেট্রিক ব্যবহার করে শুধু হ্যান্ডশেকের সময় (একটি ভাগাভাগি সিক্রেট নিরাপদে প্রতিষ্ঠা করতে), তারপর দ্রুত সিমেট্রিক (AES) দিয়ে বাকি ডেটা পাঠায় — hybrid approach।

প্র ০৩ XOR সিফার কেন কখনো প্রোডাকশনে ব্যবহার করা উচিত না, এমনকি কী গোপন রাখা হলেও?

একই কী বারবার পুনরাবৃত্তি করে XOR করা হলে (repeating-key XOR) এটি ফ্রিকোয়েন্সি অ্যানালাইসিস ও known-plaintext আক্রমণে দুর্বল — আক্রমণকারী যদি কোনো অংশের plaintext অনুমান করতে পারে, সে সরাসরি কী বের করে ফেলতে পারে। AES-এর বহু-রাউন্ড নন-লিনিয়ার ডিজাইন বিশেষভাবে এই ধরনের বিশ্লেষণ প্রতিরোধ করার জন্য তৈরি — এই কারণে বাস্তব সিস্টেম XOR-এর বদলে AES ব্যবহার করে।

অনুশীলন

  1. চিন্তা করুন: কী ডিস্ট্রিবিউশন সমস্যাটি সিমেট্রিক ও অ্যাসিমেট্রিক এনক্রিপশনে যথাক্রমে কীভাবে ভিন্নভাবে মোকাবিলা করা হয়, নিজের ভাষায় লিখুন।

    সিমেট্রিক এনক্রিপশন সমস্যাটি এড়িয়ে যায় না — এটি ধরে নেয় কী ইতিমধ্যে নিরাপদে শেয়ার করা হয়েছে (এবং সেই "কীভাবে" প্রশ্নটিই সবচেয়ে বড় দুর্বলতা)। অ্যাসিমেট্রিক এনক্রিপশন সমস্যাটি সরাসরি সমাধান করে — পাবলিক কী প্রকাশ্যে শেয়ার করা নিরাপদ, কারণ শুধু প্রাইভেট কী-এর মালিকই সেটি দিয়ে এনক্রিপ্ট করা ডেটা ডিক্রিপ্ট করতে পারে, ফলে গোপন কী কখনো ট্রান্সমিট করার প্রয়োজনই হয় না।

  2. পরীক্ষা করুন: উপরের কোডে xor_decipher কল করার সময় shared_key-এর বদলে একটি ভুল/ভিন্ন key ব্যবহার করুন — Run করে দেখুন আউটপুট কী হয়।

    ভুল কী দিয়ে ডিক্রিপ্ট করলে কোনো এরর হয় না — বরং সম্পূর্ণ অপঠনযোগ্য/অর্থহীন টেক্সট আউটপুট হয়। এটি দেখায় যে সিমেট্রিক এনক্রিপশনে ঠিক সঠিক কী থাকাটাই অপরিহার্য — "প্রায় সঠিক" কী দিয়ে আংশিক সঠিক ডিক্রিপশন হয় না।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
রুটকিট ও পার্সিস্টেন্স মেকানিজম