ابتدایی «رمزگذاری اصالتسنجیشده با دادههای مرتبط» (AEAD) رایجترین ابتدایی برای رمزگذاری دادهها است و برای اکثر نیازها مناسب است.
AEAD ویژگیهای زیر را دارد:
- Secrecy: هیچچیز درباره متن ساده مشخص نیست، بهجز طول آن.
- اصالت: تغییر متن ساده رمزگذاریشده زیربنای متن رمزی بدون شناسایی شدن غیرممکن است.
- متقارن: رمزگذاری متن ساده و رمزگشایی متن رمزشده با یک کلید انجام میشود.
- تصادفیسازی: رمزگذاری تصادفیسازی شده است. دو پیام با متن ساده یکسان، متنهای رمزی متفاوتی تولید میکنند. مهاجمان نمیتوانند بدانند کدام متن رمزی با متن ساده دادهشده مطابقت دارد. اگر میخواهید از این امر جلوگیری کنید، بهجای آن از AEAD قطعی استفاده کنید.
دادههای مرتبط
از AEAD میتوان برای مرتبط کردن متن رمزی به دادههای مرتبط خاص استفاده کرد. فرض کنید پایگاه دادهای با فیلدهای user-id
و encrypted-medical-history دارید. در این سناریو، میتوان از user-id بهعنوان دادههای مرتبط هنگام رمزگذاری encrypted-medical-history استفاده کرد. این کار مانع از آن میشود که مهاجم سابقه پزشکی را از کاربری به کاربر دیگر منتقل کند.
دادههای منسوب اختیاری است. اگر مشخص شده باشد، رمزگشایی فقط درصورتی موفقیتآمیز است که همان دادههای مرتبط به هر دو فراخوانی رمزگذاری و رمزگشایی ارسال شود.
انتخاب نوع کلید
درحالیکه AES128_GCM را برای اکثر موارد استفاده توصیه میکنیم، انواع کلیدهای مختلفی برای نیازهای متفاوت وجود دارد. AES128 امنیت ۱۲۸ بیتی و AES256 امنیت ۲۵۶ بیتی ارائه میدهد.
دو محدودیت امنیتی قابلتوجه هنگام انتخاب حالت عبارتند از:
- QPS: چند پیام با یک کلید رمزگذاری شده است؟
- اندازه پیام: پیامها چقدر بزرگ هستند؟
انواع کلید پشتیبانیشده:
- AES-CTR-HMAC (AES128_CTR_HMAC_SHA256، AES256_CTR_HMAC_SHA256) با بردار مقداردهی اولیه (IV) ۱۶ بایتی محافظهکارانهترین حالت با حدود خوب است.
- کلید-تعهد.
- AES-EAX (AES128_EAX، AES256_EAX) کمی کمتر محافظهکارانه و کمی سریعتر از AES128_CTR_HMAC_SHA256 است.
- MLGR بدون تعهد کلید.
- AES-GCM (AES128_GCM, AES256_GCM) معمولاً سریعترین حالت با سختگیرانهترین محدودیتها در تعداد پیامها (232) و اندازه پیام (~64 گیگابایت برای هر پیام) است. وقتی از این محدودیتها فراتر برود، AES-GCM با نشت متن ساده و بخش اصالتسنجی کلید داخلی AES-GCM بهطور فاجعهباری ازکار میافتد.
- AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV)
[RFC8452] دربرابر سوءاستفاده تصادفی از
nonce مقاوم است و عملکردی تقریباً مشابه AES-GCM دارد. محدودیتهای مربوط به
تعداد پیامها و اندازه پیام برای AES-GCM-SIV با IVهای تصادفی بسیار
بالاتر از محدودیتهای AES-GCM است. وقتی از این محدودیتها فراتر برود، AES-GCM-SIV
با فاجعه کمتری مواجه میشود: فقط این را فاش میکند که
دو پیام برابر هستند.
استفاده از AES-GCM-SIV ایمنتر است، اما در عمل کمتر استفاده میشود.
- محدودههای اعداد تصادفی یکبارمصرف:
- ۲۳۲ پیام، که هر متن ساده حداکثر ۸ گیبیبایت است
- ۲۴۸ پیام، که هر متن ساده حداکثر ۳۲ مبیبایت است
- ۲۶۴ پیام، که هر متن ساده حداکثر ۱۲۸ کیبیبایت است
- برای استفاده در جاوا، Conscrypt را نصب کنید.
- غیرمتعهد به کلید ADGKLS.
- محدودههای اعداد تصادفی یکبارمصرف:
- XChaCha20-Poly1305 (XCHACHA20_POLY1305) حد بسیار بالاتری برای تعداد پیامها و اندازه پیام نسبتبه AES-GCM دارد، اما وقتی ناموفق باشد (که بسیار بعید است)، دادههای کلید را نیز لو میدهد. این حالت شتاب سختافزاری ندارد،
بنابراین در شرایطی که شتاب سختافزاری دردسترس باشد،
میتواند کندتر از حالتهای AES باشد.
- LGR غیرمتعهد به کلید.
درباره قالب سیمی رمزنگاری AEAD بیشتر بدانید.
تضمینهای امنیتی
پیادهسازیهای AEAD این موارد را ارائه میدهند:
- امنیت CCA2.
- قدرت اصالتسنجی حداقل ۸۰ بیتی.
- توانایی رمزگذاری حداقل ۲۳۲ پیام با مجموع ۲۵۰ بایت. هیچ حملهای با حداکثر ۲۳۲ متن ساده انتخابشده یا متن رمزنگاریشده انتخابشده احتمال موفقیت بیشتر از ۲-۳۲ ندارد.
نمونه موارد استفاده
به بخشهای میخواهم دادهها را رمزگذاری کنم و میخواهم متن رمزی را به بافت آن مقید کنم مراجعه کنید.