অথেনটিকেটেড এনক্রিপশন উইথ অ্যাসোসিয়েটেড ডেটা (AEAD) প্রিমিটিভটি ডেটা এনক্রিপশনের জন্য সবচেয়ে প্রচলিত এবং এটি অধিকাংশ প্রয়োজনের জন্য উপযুক্ত।
AEAD-এর নিম্নলিখিত বৈশিষ্ট্যগুলো রয়েছে:
- গোপনীয়তা : প্লেইনটেক্সটটির দৈর্ঘ্য ছাড়া এর সম্পর্কে আর কিছুই জানা যায় না।
- প্রামাণিকতা : সাইফারটেক্সটের অন্তর্নিহিত এনক্রিপ্টেড প্লেইনটেক্সট শনাক্ত না হয়ে পরিবর্তন করা অসম্ভব।
- সিমেট্রিক : প্লেইনটেক্সট এনক্রিপ্ট করা এবং সাইফারটেক্সট ডিক্রিপ্ট করা একই কী দিয়ে করা হয়।
- র্যান্ডমাইজেশন : এনক্রিপশন র্যান্ডমাইজড করা হয়। একই প্লেইনটেক্সট সহ দুটি মেসেজ ভিন্ন সাইফারটেক্সট তৈরি করে। আক্রমণকারীরা জানতে পারে না যে কোন সাইফারটেক্সটটি একটি নির্দিষ্ট প্লেইনটেক্সটের সাথে সম্পর্কিত। আপনি যদি এটি এড়াতে চান, তবে এর পরিবর্তে ডিটারমিনিস্টিক AEAD ব্যবহার করুন।
সংশ্লিষ্ট ডেটা
AEAD ব্যবহার করে সাইফারটেক্সটকে নির্দিষ্ট সংশ্লিষ্ট ডেটার সাথে যুক্ত করা যায়। ধরুন, আপনার একটি ডাটাবেস আছে যেখানে user-id এবং encrypted-medical-history ফিল্ডগুলো রয়েছে। এই ক্ষেত্রে, encrypted-medical-history এনক্রিপ্ট করার সময় user-id সংশ্লিষ্ট ডেটা হিসেবে ব্যবহার করা যেতে পারে। এটি একজন আক্রমণকারীকে এক ব্যবহারকারীর মেডিকেল হিস্ট্রি অন্য ব্যবহারকারীর কাছে স্থানান্তর করা থেকে বিরত রাখে।
সংযুক্ত ডেটা ঐচ্ছিক। যদি তা নির্দিষ্ট করা হয়, তবে ডিক্রিপশন তখনই সফল হবে যখন এনক্রিপ্ট এবং ডিক্রিপ্ট উভয় কলে একই সংযুক্ত ডেটা প্রদান করা হবে।
একটি কী-টাইপ বেছে নিন
যদিও আমরা বেশিরভাগ ব্যবহারের জন্য AES128_GCM সুপারিশ করি, বিভিন্ন প্রয়োজনের জন্য বিভিন্ন ধরণের কী রয়েছে। AES128 ১২৮-বিট নিরাপত্তা এবং AES256 ২৫৬-বিট নিরাপত্তা প্রদান করে।
মোড বেছে নেওয়ার ক্ষেত্রে দুটি উল্লেখযোগ্য নিরাপত্তা সীমাবদ্ধতা হলো:
- QPS: একই কী দিয়ে কতগুলো মেসেজ এনক্রিপ্ট করা হয়েছে?
- বার্তার আকার: বার্তাগুলো কতটা বড়?
সমর্থিত কী-টাইপ:
- ১৬-বাইট ইনিশিয়ালাইজেশন ভেক্টর (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-SIV (AES128_GCM_SIV, AES256_GCM_SIV) প্রায় AES-GCM-এর মতোই দ্রুত। মেসেজের সংখ্যা এবং মেসেজের আকারের ক্ষেত্রে AES-GCM-এর মতোই এর সীমাবদ্ধতা রয়েছে, কিন্তু যখন এই সীমা অতিক্রম করা হয়, তখন এটি তুলনামূলকভাবে কম মারাত্মকভাবে ব্যর্থ হয়: এটি কেবল দুটি মেসেজ সমান হওয়ার তথ্যটি ফাঁস করতে পারে। এই কারণে এটি AES-GCM-এর চেয়ে ব্যবহারে বেশি নিরাপদ, কিন্তু বাস্তবে এর ব্যবহার ততটা ব্যাপক নয়। জাভাতে এটি ব্যবহার করার জন্য আপনাকে Conscrypt ইনস্টল করতে হবে।
- ADGKLS কী-কমিট করা হচ্ছে না।
- AES-GCM-এর তুলনায় XChaCha20-Poly1305 (XCHACHA20_POLY1305)-এর মেসেজের সংখ্যা এবং মেসেজের আকারের উপর অনেক বেশি সীমাবদ্ধতা রয়েছে, কিন্তু যখন এটি ব্যর্থ হয় (যা হওয়ার সম্ভাবনা খুবই কম), তখন এটি কী-মেটেরিয়ালও লিক করে। এটি হার্ডওয়্যার অ্যাক্সিলারেটেড নয়, তাই যেসব ক্ষেত্রে হার্ডওয়্যার অ্যাক্সিলারেশন উপলব্ধ থাকে, সেখানে এটি AES মোডগুলোর চেয়ে ধীরগতির হতে পারে।
- LGR কী-কমিট করা হচ্ছে না।
AEAD সাইফারটেক্সটের ওয়্যার ফরম্যাট সম্পর্কে আরও জানুন।
নিরাপত্তা গ্যারান্টি
AEAD বাস্তবায়নগুলো প্রদান করে:
- CCA2 নিরাপত্তা।
- কমপক্ষে ৮০-বিট প্রমাণীকরণ শক্তি।
- মোট ২⁵⁰ বাইট ব্যবহার করে কমপক্ষে ২³² টি বার্তা এনক্রিপ্ট করার ক্ষমতা। ২³² টি পর্যন্ত নির্বাচিত প্লেইনটেক্সট বা নির্বাচিত সাইফারটেক্সট ব্যবহার করে করা কোনো আক্রমণের সফলতার সম্ভাবনা ২⁻³² এর চেয়ে বেশি নয়।
ব্যবহারের উদাহরণ
দেখুন, আমি ডেটা এনক্রিপ্ট করতে চাই এবং সাইফারটেক্সটকে তার কনটেক্সটের সাথে যুক্ত করতে চাই।