
قائمة بمكتبات توقيع ed25519 غير الآمنة
قائمة بمكتبات توقيع ed25519 غير الآمنة احتماليًا والتي توفّر واجهة برمجة تطبيقات عامة يمكن من خلالها تمرير المفتاح السري والمفتاح العام بشكل مستقل كمدخلات لدالة التوقيع. يمكن أن يؤدي سوء استخدام هذه الواجهات العامة إلى كشف المفتاح الخاص.
معظم المستودعات في تحليلنا مدرجة في IANIX :: Things that use Ed25519.
عدد المكتبات المتأثرة: 45
عدد المكتبات التي أصلحت المشكلة بعد الإعلان: 8
آخر تحديث: 4 مايو 2023
لاحظ أنه في الوضع الطبيعي ووفقًا لـ rfc8032 المرتبط بالموضوع، تكون تواقيع EdDSA حتمية، وبالتالي لنفس رسالة الإدخال المراد توقيعها، يتم إرجاع مخرج توقيع فريد يتضمن عنصرين: نقطة منحنى R وكمية قياسية S.
من التفاصيل الخوارزمية أن المفتاح العام للموقّع يشارك فقط في الحساب الحتمي لجزء S من التوقيع، وليس في قيمة R. هذا الأخير يعني أنه إذا تمكن الخصم بطريقة ما من استخدام دالة التوقيع كـ Oracle (يتوقع مفاتيح عامة عشوائية كمدخلات)، فمن الممكن لنفس الرسالة الحصول على توقعين يتشاركان نفس R ويختلفان فقط في جزء S. لسوء الحظ، عند حدوث ذلك، يمكن للمرء بسهولة استخراج المفتاح الخاص؛ هذا منشور StackOverflow يشرح لماذا هذا ممكن.
ومع ذلك، يجب ألا تسمح الواجهات العامة بتمرير زوج مفاتيح خاص/عام منفصل كمدخل توقيع. ولتجنب ذلك، تقوم العديد من التطبيقات بتخزين المفتاح العام مع المفتاح الخاص (أو البذرة) وتعتبر زوج المفاتيح بأكمله هو السر، أو تقوم دائمًا بإعادة اشتقاق المفتاح العام داخل دالة التوقيع. لسوء الحظ، يفشل عدد كبير من المكتبات الموجودة في معالجة هذه المشكلة من خلال السماح بمفاتيح عامة عشوائية كمدخلات دون التحقق مما إذا كان المفتاح العام المُدخل يطابق المفتاح الخاص المُدخل.
بالطبع، هذا لا يعني أن جميع التطبيقات التي تعتمد على هذه المكتبات معرضة لهجمات كشف المفاتيح؛ في الواقع، معظمها آمن على الأرجح بسبب عدم كشف الواجهة المتأثرة عادةً لمستخدميها، وربط زوج المفاتيح العام/الخاص قبل استدعاء sign مباشرة. من ناحية أخرى، حتى عندما لا تكون هذه الواجهات مكشوفة، هناك تطبيقات تستخدم استراتيجيات نماذج تهديد TCB مختلفة حول كيفية إدارة وتخزين المفاتيح الخاصة والعامة. ومع ذلك، لمنع هذا الهجوم، يجب على المطورين أيضًا فرض بروتوكول حماية سلامة للمفاتيح العامة.
هنا، نسرد بعض المكتبات المتأثرة مع المراجع البرمجية ذات الصلة.
الشكل 1. مثال على إساءة استخدام واجهة برمجة التطبيقات في Rust crate باسم ed25519-dalek.
C: OpenGNB
https://github.com/gnbdev/opengnb/blob/master/libs/ed25519/sign.c#L7
C: GNU Nettle
https://github.com/gnutls/nettle/blob/fe7ae87d1b837e82f7c7968b068bca7d853a4cec/ed25519-sha512-sign.c#L43
ASM/C: iroha-ed25519 (مشروع Hyperledger)
https://github.com/hyperledger/iroha-ed25519/blob/main/lib/ed25519/ref10/ed25519.c#L27
و
https://github.com/hyperledger/iroha-ed25519/blob/main/lib/ed25519/amd64-64-24k-pic/ed25519.c#L30
C: ed25519-donna (Andrew Moon)
https://github.com/floodyberry/ed25519-donna/blob/master/ed25519.c#L59
C: ed25519 (Orson Peters)
https://github.com/orlp/ed25519/blob/master/src/sign.c#L7
C: libbrine (Kevin Smith)
https://github.com/kevsmith/libbrine/blob/master/src/ed25519/sign.c#L7