অ্যাসোসিয়েটেড ডেটা সহ যাচাইকৃত এনক্রিপশন (AEAD)

ডেটা এনক্রিপশনের জন্য সবচেয়ে সাধারণ প্রিমিটিভ হল অ্যাসোসিয়েটেড ডেটা (AEAD) প্রিমিটিভ সহ যাচাই করা এনক্রিপশন এবং এটি বেশিরভাগ প্রয়োজনের জন্য উপযুক্ত।

AEAD-এর নিম্নলিখিত প্রপার্টি আছে:

  • Secrecy: প্লেইনটেক্সটের দৈর্ঘ্য ছাড়া আর কিছুই জানা যায় না।
  • প্রমাণিকতা: সাইফারটেক্সটের নিচে থাকা এনক্রিপ্ট করা প্লেইনটেক্সট শনাক্ত না করে পরিবর্তন করা অসম্ভব।
  • সিমেট্রিক: একই 'কী' ব্যবহার করে প্লেইনটেক্সট এনক্রিপ্ট এবং সাইফারটেক্সট ডিক্রিপ্ট করা হয়।
  • র‍্যান্ডমাইজেশন: এনক্রিপশন র‍্যান্ডমাইজ করা হয়। একই প্লেইনটেক্সট সহ দুটি মেসেজ আলাদা সাইফারটেক্সট তৈরি করে। আক্রমণকারীরা জানতে পারে না যে কোন সাইফারটেক্সট প্রদত্ত প্লেইনটেক্সটের সাথে সম্পর্কিত। আপনি এটি এড়াতে চাইলে, এর পরিবর্তে ডিটারমিনিস্টিক AEAD ব্যবহার করুন।

সংশ্লিষ্ট ডেটা

AEAD ব্যবহার করে নির্দিষ্ট সংশ্লিষ্ট ডেটার সাথে সাইফারটেক্সট টাই করা যেতে পারে। ধরুন, আপনার কাছে user-id এবং encrypted-medical-history ফিল্ড সহ একটি ডেটাবেস আছে। এই পরিস্থিতিতে, encrypted-medical-history এনক্রিপ্ট করার সময় user-id সংশ্লিষ্ট ডেটা হিসেবে ব্যবহার করা যেতে পারে। এটি কোনও আক্রমণকারীকে একজন ব্যবহারকারীর থেকে অন্য ব্যবহারকারীর কাছে মেডিকেল ইতিহাস সরানো থেকে বাধা দেয়।

সংশ্লিষ্ট ডেটা ঐচ্ছিক। নির্দিষ্ট করা থাকলে, এনক্রিপ্ট ও ডিক্রিপ্ট, উভয় কলের ক্ষেত্রেই একই সংশ্লিষ্ট ডেটা পাস করা হলে তবেই ডিক্রিপশন সফল হয়।

'কী'-এর ধরন বেছে নিন

বেশিরভাগ ক্ষেত্রে আমরা AES128_GCM ব্যবহার করার সাজেশন দিলেও, বিভিন্ন প্রয়োজনের জন্য বিভিন্ন ধরনের 'কী' আছে। AES128-এ ১২৮-বিট নিরাপত্তা এবং AES256-এ ২৫৬-বিট নিরাপত্তা পাওয়া যায়।

কোনও মোড বেছে নেওয়ার সময় দুটি উল্লেখযোগ্য নিরাপত্তা সংক্রান্ত সীমাবদ্ধতা হল:

  1. QPS: একই 'কী' দিয়ে কতগুলি মেসেজ এনক্রিপ্ট করা হয়েছে?
  2. মেসেজের সাইজ: মেসেজগুলি কত বড়?

যেসব ধরনের 'কী' কাজ করে:

  • ১৬-বাইট ইনিশিয়ালাইজেশন ভেক্টর (IV) সহ AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) হল ভাল বাউন্ড সহ সবচেয়ে রক্ষণশীল মোড।
    • কী-কমিটিং।
  • AES-EAX (AES128_EAX, AES256_EAX) হল AES128_CTR_HMAC_SHA256-এর তুলনায় সামান্য কম রক্ষণশীল এবং সামান্য দ্রুত।
    • MLGR-এ কী-কমিট করা হয়নি।
  • AES-GCM (AES128_GCM, AES256_GCM) সাধারণত সবচেয়ে দ্রুত মোড, যেখানে মেসেজের সংখ্যা (২৩২) এবং মেসেজের সাইজের (~৬৪ জিবি প্রতি মেসেজ) উপর কঠোর সীমা থাকে। এইসব সীমা অতিক্রম করলে, AES-GCM প্লেনটেক্সট এবং AES-GCM ইন্টার্নাল কী-এর যাচাইকরণ অংশ ফাঁস করে দিয়ে বিপর্যয়করভাবে ব্যর্থ হয়।
    • AES-GCM রোবাস্ট [ABN] বা কী-কমিটিং [GLR] নয়। দুটি আলাদা কী ব্যবহার করে ডিক্রিপ্ট করা যায় এমন সাইফারটেক্সট জেনারেট করা সম্ভব। এর ফলে প্র্যাকটিক্যাল অ্যাটাক হতে পারে [DGRW]। প্রতিপক্ষ 'কী' বেছে নিলে, আপনার থ্রেট মডেল ভালভাবে পর্যালোচনা করুন।
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) [RFC8452] আকস্মিক ননস অপব্যবহারের প্রতিরোধক এবং AES-GCM-এর মতোই পারফর্ম করে। র‍্যান্ডম IV সহ AES-GCM-SIV-এর জন্য মেসেজের সংখ্যা এবং মেসেজের সাইজের সীমা AES-GCM-এর সীমার চেয়ে অনেক বেশি। এইসব সীমা অতিক্রম করা হলে, AES-GCM-SIV কম বিপর্যয়করভাবে ব্যর্থ হয়: এটি শুধু ফাঁস করে যে দুটি মেসেজ সমান। AES-GCM-SIV ব্যবহার করা নিরাপদ, তবে বাস্তবে এটি খুব বেশি ব্যবহার করা হয় না।
    • র‍্যান্ডম ননসের সীমা:
      • 232 মেসেজ, যেখানে প্রতিটি প্লেইনটেক্সট সর্বাধিক ৮ GiB
      • 248 মেসেজ, যেখানে প্রতিটি প্লেইনটেক্সট সর্বাধিক 32 MiB
      • 264 মেসেজ, যেখানে প্রতিটি প্লেইনটেক্সট সর্বাধিক ১২৮ KiB
    • Java-তে ব্যবহার করতে, Conscrypt ইনস্টল করুন।
    • কী-কমিটিং ADGKLS নয়।
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305)-এর মেসেজের সংখ্যা ও সাইজের উপর AES-GCM-এর থেকে অনেক বেশি সীমা আছে, কিন্তু এটি ব্যর্থ হলে (খুবই অসম্ভাব্য), এটি কী মেটেরিয়ালও ফাঁস করে দেয়। এটি হার্ডওয়্যার অ্যাক্সিলারেটেড নয়, তাই হার্ডওয়্যার অ্যাক্সিলারেশন উপলভ্য আছে এমন পরিস্থিতিতে এটি AES মোডের চেয়ে ধীরগতির হতে পারে।
    • কী-কমিটিং LGR নয়।

AEAD সাইফারটেক্সটের ওয়্যার ফর্ম্যাট সম্পর্কে আরও জানুন।

নিরাপত্তা সংক্রান্ত গ্যারান্টি

AEAD ইমপ্লিমেন্টেশন এই সুবিধাগুলি অফার করে:

  • CCA2 নিরাপত্তা।
  • অন্তত ৮০-বিট যাচাইকরণ ক্ষমতা।
  • মোট 250 বাইট সহ অন্তত 232 মেসেজ এনক্রিপ্ট করার ক্ষমতা। ২৩২ পর্যন্ত বেছে নেওয়া প্লেইনটেক্সট বা বেছে নেওয়া সাইফারটেক্সট সহ কোনও অ্যাটাকের সাফল্যের সম্ভাবনা ২-৩২-এর বেশি নয়।

ব্যবহারের উদাহরণ

দেখুন, আমি ডেটা এনক্রিপ্ট করতে এবং সাইফারটেক্সটকে এর কনটেক্সটের সাথে বাইন্ড করতে চাই।