در اجرای الگوریتم رمزگذاری Kyber، که برنده رقابت الگوریتمهای رمزنگاری مقاوم در برابر نیروی بی رحم در یک کامپیوتر کوانتومی شد، آسیبپذیری شناسایی شد که به حملات کانال جانبی اجازه میدهد تا کلیدهای مخفی را بر اساس اندازهگیری زمان عملیات در حین رمزگشایی ایجاد کنند. متن رمزی ارائه شده توسط مهاجم این مشکل هم بر پیادهسازی مرجع مکانیسم کپسولهسازی کلید CRYSTALS-Kyber KEM و هم بسیاری از کتابخانههای رمزگذاری دارای قابلیت Kyber شخص ثالث، از جمله کتابخانه pqcrypto مورد استفاده در پیامرسان سیگنال، تأثیر میگذارد.
ماهیت آسیبپذیری که نام رمز KyberSlash را دریافت کرد، در استفاده از عملیات تقسیم "t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;" در فرآیند رمزگشایی یک پیام است. ، که در آن سود سهام حاوی مقدار مخفی "t" با نوع "double" است و مقسومکننده آن مقدار عمومی شناخته شده KYBER_Q است. مشکل این است که زمان عملیات تقسیم ثابت نیست و در محیط های مختلف تعداد سیکل های CPU انجام شده برای تقسیم به داده های ورودی بستگی دارد. بنابراین، بر اساس تغییرات در زمان عملیات، می توان ایده ای از ماهیت داده های مورد استفاده در تقسیم بندی داشت.
دانیل جی. برنشتاین، کارشناس معروف در زمینه رمزنگاری، توانست یک شواهد کارآمد برای اثبات اینکه حمله می تواند در عمل انجام شود، آماده کند. در دو آزمایش از سه آزمایش انجام شده، هنگام اجرای کد روی برد Raspberry Pi 2، امکان بازسازی کامل کلید خصوصی Kyber-512 بر اساس اندازهگیری زمان رمزگشایی دادهها وجود داشت. این روش همچنین می تواند برای کلیدهای Kyber-768 و Kyber-1024 تطبیق داده شود. برای انجام موفقیت آمیز یک حمله، لازم است متن رمز مشخص شده توسط مهاجم با استفاده از همان جفت کلید پردازش شود و بتوان زمان اجرای عملیات را به دقت اندازه گیری کرد.
نشت دیگری (KyberSlash2) در برخی از کتابخانه ها شناسایی شده است که به دلیل استفاده از یک مقدار مخفی هنگام انجام تقسیم نیز رخ می دهد. تفاوتهای گزینه اول به تماس در مرحله رمزگذاری (در توابع poly_compress و polyvec_compress) و نه در هنگام رمزگشایی میرسد. با این حال، گزینه دوم ممکن است برای حمله فقط در مواردی مفید باشد که رویه در عملیات رمزگذاری مجدد استفاده می شود که در آن خروجی متن رمز محرمانه در نظر گرفته می شود.
این آسیب پذیری قبلاً در کتابخانه ها رفع شده است:
- zig/lib/std/crypto/kyber_d00.zig (22 دسامبر)،
- pq-crystals/kyber/ref (30 دسامبر)،
- simbolicsoft/kyber-k2so (19 دسامبر)،
- cloudflare/circl (8 ژانویه)،
- aws/aws-lc/crypto/kyber (4 ژانویه)،
- liboqs/src/kem/kyber (8 ژانویه).
کتابخانههایی که در ابتدا تحت تأثیر این آسیبپذیری قرار نگرفتهاند:
- boringssl/crypto/kyber،
- filippo.io/mlkem768,
- formosa-crypto/libjade/tree/main/src/crypto_kem،
- kyber/common/amd64/avx2،
- formosa-crypto/libjade/tree/main/src/crypto_kem/kyber/common/amd64/ref,
- pq-crystals/kyber/avx2،
- pqclean/crypto_kem/kyber*/avx2.
این آسیب پذیری در کتابخانه ها بدون اصلاح باقی می ماند:
- antontutoveanu/crystals-kyber-javascript,
- Argyle-Software/kyber،
- debian/src/liboqs/unstable/src/kem/kyber،
- kudelskisecurity/crystals-go,
- mupq/pqm4/crypto_kem/kyber* (در 20 دسامبر، تنها 1 نسخه از آسیبپذیری رفع شد)،
- PQClean/PQClean/crypto_kem/kyber*/aarch64،
- PQClean/PQClean/crypto_kem/kyber*/clean,
- randombit/botan (در 20 دسامبر، تنها 1 آسیب پذیری رفع شد)،
- rustpq/pqcrypto/pqcrypto-kyber (اصلاحی در 5 ژانویه به libsignal اضافه شد، اما این آسیبپذیری هنوز در خود pqcrypto-kyber رفع نشده است).
منبع: opennet.ru