ثغرة أمنية في تطبيقات خوارزمية التشفير ما بعد الكمي Kyber

في تنفيذ خوارزمية تشفير Kyber، التي فازت في منافسة خوارزميات التشفير المقاومة للقوة الغاشمة على الكمبيوتر الكمي، تم التعرف على ثغرة أمنية تسمح لهجمات القناة الجانبية بإعادة إنشاء مفاتيح سرية بناءً على قياس وقت العمليات أثناء فك تشفير التشفير. النص المشفر الذي يقدمه المهاجم. تؤثر المشكلة على كل من التنفيذ المرجعي لآلية تغليف مفتاح CRYSTALS-Kyber KEM والعديد من مكتبات التشفير التي تدعم Kyber التابعة لجهات خارجية، بما في ذلك مكتبة pqcrypto المستخدمة في Signal messenger.

جوهر الثغرة الأمنية، التي حصلت على الاسم الرمزي KyberSlash، يكمن في استخدام عملية التقسيم “t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;” في عملية فك تشفير الرسالة. ، حيث يحتوي المقسوم على القيمة السرية "t" من النوع "double"، والمقسوم عليه هو القيمة العامة المعروفة KYBER_Q. تكمن المشكلة في أن وقت عملية القسمة ليس ثابتًا، وفي بيئات مختلفة، يعتمد عدد دورات وحدة المعالجة المركزية التي يتم إجراؤها للقسمة على البيانات المدخلة. وبالتالي، بناءً على التغييرات في أوقات التشغيل، يمكن الحصول على فكرة عن طبيعة البيانات المستخدمة في القسمة.

تمكن دانييل ج. بيرنشتاين، الخبير المعروف في مجال التشفير، من إعداد عرض عملي لإثبات إمكانية تنفيذ الهجوم عمليًا. في اثنتين من التجارب الثلاث التي تم إجراؤها، عند تشغيل التعليمات البرمجية على لوحة 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 ديسمبر)،
  • رمزيسوفت/كايبر-k2so (19 ديسمبر)،
  • كلاودفلير/سيركل (8 يناير)،
  • aws/aws-lc/crypto/kyber (4 يناير)،
  • liboqs/src/kem/kyber (8 يناير).

المكتبات التي لم تتأثر في البداية بالثغرة الأمنية:

  • مملة/تشفير/كايبر،
  • filippo.io/mlkem768،
  • formosa-crypto/libjade/tree/main/src/crypto_kem،
  • كيبر/مشترك/amd64/avx2،
  • formosa-crypto/libjade/tree/main/src/crypto_kem/kyber/common/amd64/ref,
  • pq-بلورات/كايبر/avx2،
  • pqclean/crypto_kem/kyber*/avx2.

لا تزال الثغرة الأمنية غير مُصححة في المكتبات:

  • أنتونتوتوفينو/بلورات-كايبر-جافا سكريبت،
  • أرجايل-سوفت وير/كايبر،
  • ديبيان/src/liboqs/غير مستقر/src/kem/kyber،
  • kudelskisecurity / بلورات الذهاب،
  • mupq/pqm4/crypto_kem/kyber* (في 20 ديسمبر، تم إصلاح إصدار واحد فقط من الثغرة الأمنية)،
  • بي كيو كلين/بي كيو كلين/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean،
  • Randbit/botan (في 20 ديسمبر، تم إصلاح ثغرة أمنية واحدة فقط)،
  • rustpq/pqcrypto/pqcrypto-kyber (تمت إضافة إصلاح إلى libsignal في 5 يناير، ولكن لم يتم إصلاح الثغرة الأمنية حتى الآن في pqcrypto-kyber نفسها).

المصدر: opennet.ru

إضافة تعليق