Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
ed25519-unsafe-libs — List of unsafe ed25519 signature libs | Kitploit
أدوات/GitHubGitHub/mystenlabs/ed25519-unsafe-libs
Vulnerability AnalysisExploitationCryptographyPapers & ResearchLearning & EducationCurated Resources
GitHubmystenlabs/ed25519-unsafe-libs

ed25519-unsafe-libs

List of unsafe ed25519 signature libs

عرض المستودع
25035منذ 2 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

ed25519-unsafe-libs

هجوم Oracle على دالة التوقيع بمفتاح عام مزدوج على Ed25519

قائمة بمكتبات توقيع ed25519 غير الآمنة احتماليًا والتي توفّر واجهة برمجة تطبيقات عامة يمكن من خلالها تمرير المفتاح السري والمفتاح العام بشكل مستقل كمدخلات لدالة التوقيع. يمكن أن يؤدي سوء استخدام هذه الواجهات العامة إلى كشف المفتاح الخاص.

معظم المستودعات في تحليلنا مدرجة في IANIX :: Things that use Ed25519.

عدد المكتبات المتأثرة: 45
عدد المكتبات التي أصلحت المشكلة بعد الإعلان: 8
آخر تحديث: 4 مايو 2023

تطبيقات إثبات المفهوم التي توضح هذا الاستغلال المحتمل:

  • Rust: ed25519-chalkias-exploit
  • Python: Ed25519 Vulnerability in Python, Buchanan, William J (2022). Ed25519 Vulnerability in Python (Recovering Private Key). Asecuritysite.com.

محاضرات:

  • محاضرة مدعوة إلى نادي قراءة التشفير في المعهد الوطني الأمريكي للمعايير والتقنية (NIST): الشرائح - Taming the Many EdDSAs (الصفحات 28-39)، Konstantinos Chalkias, François Garillot, Valeria Nikolaenko (2023). Taming the Many EdDSAs & Ed25519 Signing Attacks.

تغطية إخبارية وتغطية عبر شبكات التواصل لهذا الهجوم

  • NIST Crypto Reading Club "Taming the Many EdDSAs" (8 مارس 2023)
  • The Daily Swig "Dozens of cryptography libraries vulnerable to private key theft" (28 يونيو 2022)
  • Risky Biz News "New crypto vulnerability: Tens of cryptography libraries have misimplemented the Ed25519 digital signature algorithm" (28 يونيو 2022)
  • منشور SafeHeron "Analysis on Ed25519 Use Risks: Your Wallet Private Key Can Be Stolen" (17 يونيو 2022)
  • kryptera.se "Vulnerability in most ed25519 libraries" (بالسويدية) (29 يونيو 2022)
  • Difesa e Sicurezza و Yoroi "Librerie crittografiche ed25519 potenzialmente non sicure" (بالإيطالية) (1 يوليو و29 يونيو 2022)
  • منشور Medium بقلم البروفيسور Bill Buchanan OBE "Ed25519 is Great, But ..." (1 يوليو 2022)
  • Reddit r/crypto (أفضل منشور لهذا الشهر - 18 يونيو 2022)
  • Reddit r/cryptography (17 يونيو 2022)
  • تغريدات مثيرة للاهتمام:
    • تغريدة 1 (بقلم Kostas Kryptos - "المكتبات الـ26 الضعيفة الأصلية")
    • تغريدة 2 (بقلم Kostas Kryptos - "ما بعد المكتبات الـ40 الضعيفة")
    • تغريدة 3 (بقلم Catalin Cimpanu - "40 مكتبة تشفير متأثرة بنفس سوء تنفيذ Ed25519")

ما هي المشكلة؟

لاحظ أنه في الوضع الطبيعي ووفقًا لـ rfc8032 المرتبط بالموضوع، تكون تواقيع EdDSA حتمية، وبالتالي لنفس رسالة الإدخال المراد توقيعها، يتم إرجاع مخرج توقيع فريد يتضمن عنصرين: نقطة منحنى R وكمية قياسية S.

من التفاصيل الخوارزمية أن المفتاح العام للموقّع يشارك فقط في الحساب الحتمي لجزء S من التوقيع، وليس في قيمة R. هذا الأخير يعني أنه إذا تمكن الخصم بطريقة ما من استخدام دالة التوقيع كـ Oracle (يتوقع مفاتيح عامة عشوائية كمدخلات)، فمن الممكن لنفس الرسالة الحصول على توقعين يتشاركان نفس R ويختلفان فقط في جزء S. لسوء الحظ، عند حدوث ذلك، يمكن للمرء بسهولة استخراج المفتاح الخاص؛ هذا منشور StackOverflow يشرح لماذا هذا ممكن.

ومع ذلك، يجب ألا تسمح الواجهات العامة بتمرير زوج مفاتيح خاص/عام منفصل كمدخل توقيع. ولتجنب ذلك، تقوم العديد من التطبيقات بتخزين المفتاح العام مع المفتاح الخاص (أو البذرة) وتعتبر زوج المفاتيح بأكمله هو السر، أو تقوم دائمًا بإعادة اشتقاق المفتاح العام داخل دالة التوقيع. لسوء الحظ، يفشل عدد كبير من المكتبات الموجودة في معالجة هذه المشكلة من خلال السماح بمفاتيح عامة عشوائية كمدخلات دون التحقق مما إذا كان المفتاح العام المُدخل يطابق المفتاح الخاص المُدخل.

بالطبع، هذا لا يعني أن جميع التطبيقات التي تعتمد على هذه المكتبات معرضة لهجمات كشف المفاتيح؛ في الواقع، معظمها آمن على الأرجح بسبب عدم كشف الواجهة المتأثرة عادةً لمستخدميها، وربط زوج المفاتيح العام/الخاص قبل استدعاء sign مباشرة. من ناحية أخرى، حتى عندما لا تكون هذه الواجهات مكشوفة، هناك تطبيقات تستخدم استراتيجيات نماذج تهديد TCB مختلفة حول كيفية إدارة وتخزين المفاتيح الخاصة والعامة. ومع ذلك، لمنع هذا الهجوم، يجب على المطورين أيضًا فرض بروتوكول حماية سلامة للمفاتيح العامة.

هنا، نسرد بعض المكتبات المتأثرة مع المراجع البرمجية ذات الصلة.

إساءة استخدام واجهة Ed25519 مما يؤدي إلى استخراج المفتاح الشكل 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

  • C++: Ed25519 (ArduinoLibs)
    https://rweather.github.io/arduinolibs/classEd25519.html#a36ecf67b4c5d2d39a31888f56af1f8a5

  • C#: ed25519 (Hans Wolff)
    https://github.com/hanswolff/ed25519/blob/master/Ed25519/Ed25519.cs#L146

  • C#: Ed25519 (CryptoManiac)
    https://github.com/CryptoManiac/Ed25519/blob/972829ac688847895d5105f19ca1e5777131b421/Chaos.NaCl/Internal/Ed25519Ref10/keypair.cs#L7

  • Dart: ed25519_dart (Oleksii Semeshchuk)
    https://github.com/semolex/ed25519_dart/blob/master/lib/src/ed25519_dart_base.dart#L200

المكتبات التي أصلحت المشكلة

  • C: Trezor firmware
    أُصلحت في هذا الـ PR: https://github.com/trezor/trezor-firmware/pull/2349 (تم دمج الإصلاح في 27 يونيو 2022)

  • Java: ed25519-elisabeth (Jack Grigg)
    أُصلحت في هذا الـ commit: https://github.com/cryptography-cafe/ed25519-elisabeth/commit/49545ce47d550fed807522dff86546c812ccbbac (تم دمج الإصلاح في 19 يونيو 2022)

  • C: Harbour (Viktor Szakats)
    أُصلحت في هذا الـ commit: https://github.com/vszakats/hb/commit/bae610b63d35c6c1793d94a3bf9467c3b1eded18 (تم دمج الإصلاح في 30 يونيو 2022)

  • Rust/Wasm: polkadot-js/wasm
    أُصلحت في هذا الـ PR: https://github.com/polkadot-js/wasm/pull/381/files (تم دمج الإصلاح في 3 يوليو 2022)

  • C: horse25519 (Yawning Angel)
    أُصلحت في هذا الـ PR: https://github.com/Yawning/horse25519/pull/3 (تم دمج الإصلاح في 15 أغسطس 2022)

  • Erlang: erlang-libdecaf
    أُصلحت في هذا الـ commit: https://github.com/potatosalad/erlang-libdecaf/commit/16ba07ea122660e95f6cfa9107e28ed58bada713. تمت معالجة المنطق في هذه القضية: ed25519-unsafe-libs/issues/7 (تم دمج الإصلاح في 28 أغسطس 2022)

  • Rust: ed25519-dalek (Isis Agora Lovecruft)
    أُصلحت في هذا الـ PR: https://github.com/dalek-cryptography/ed25519-dalek/pull/205 (تم دمج الإصلاح في 22 أكتوبر 2022)

  • C: Monocypher (Loup Vaillant)
    أُصلحت في هذا الـ commit: https://github.com/LoupVaillant/Monocypher/commit/da7b5407d20329f21a53ea993f516fb55e2f5e26 (تم دمج الإصلاح في 27 فبراير 2023)

نتائج إيجابية خاطئة (آمنة على الأرجح)

مكتبات أُبلغ في الأصل أنها ضعيفة، ولكن تمت إزالتها من القائمة بناءً على ملاحظات المجتمع.

  • Go: threshold-ed25519 — تواقيع العتبة باستخدام Ed25519
    https://gitlab.com/unit410/threshold-ed25519/-/blob/main/pkg/ed25519.go#L161 -> انظر التقرير https://github.com/MystenLabs/ed25519-unsafe-libs/pull/9 (أُبلغ في 27 أكتوبر 2022 بواسطة nitronit)
تنزيل الأداة
  • تغريدة 4 (بقلم Kenny Paterson - "إمكانية واسعة لاستعادة المفاتيح الخاصة في EdDSA، راجع http://kopenpgp.com حيث تم استغلال نفس المتجه في مكتبات OpenPGP")
  • تغريدة 5 (بقلم Steven Galbraith - "خطر على التواقيع الحتمية: من الأفضل التحقق من أنه المفتاح العام الصحيح!")
  • تغريدة 6 (بقلم Riyaz Faizullabhoy - "إذا كنت تستخدم EdDSA في بيئة الإنتاج، يرجى إلقاء نظرة")
  • تغريدة 7 (بقلم Bart Preneel - "تذكير بأن تنفيذ الخوارزميات التشفيرية بشكل آمن وصحيح أمر صعب").
  • تحديات CTF (التقاط العلم) التي تعرض هذا الهجوم:
    • ImaginaryCTF - JWT25519 (200pts) (30 يونيو 2022)
  • Dart: riclava_ed25519 (riclava)
    https://github.com/riclava/ed25519/blob/master/lib/ed25519.dart#L125

  • Clojure: ed25519 (Kevin Downey)
    https://github.com/hiredman/ed25519/blob/master/src/ed25519/core.clj#L168

  • Haskell: hs-scraps (Vincent Hanquez)
    https://github.com/vincenthz/hs-scraps/blob/master/Crypto/Signature/Ed25519.hs#L115

  • Java: ed25519-java (k3d3)
    https://github.com/k3d3/ed25519-java/blob/master/ed25519.java#L144

  • Java: ed25519 (Bjorn Arnelid)
    https://github.com/BjornArnelid/ed25519/blob/master/src/ed25519/application/Ed25519.java#L32

  • Java: Punisher.NaCl (Arpan Jati)
    https://github.com/arpanj/Punisher.NaCl/blob/c9619ca3028b90d0556c0473e4eba1d429a3744c/Punisher.NaCl/src/Punisher/NaCl/Ed25519Operations.java#L72

  • Java: ED25519 (Mick Michalski)
    https://github.com/michami/ED25519/blob/master/ED25519.java#L60

  • Java: vRallev/ECC-25519 (Ralf Wondratschek)
    https://github.com/vRallev/ECC-25519/blob/master/ECC-25519-Java/src/main/java/net/vrallev/java/ecc/Ecc25519Helper.java#L102

  • Perl: Crypt::Ed25519 (Marc Lehmann)
    https://metacpan.org/release/MLEHMANN/Crypt-Ed25519-0.9/view/Ed25519.pm#$signature-=-Crypt::Ed25519::sign-$message,-$public_key,-$private_key

  • Python: ed25519.py (مؤلفو Ed25519)
    https://ed25519.cr.yp.to/python/ed25519.py

  • Python: ed25519 (Python Cryptographic Authority)
    https://github.com/pyca/ed25519/blob/main/ed25519.py#L243 (يذكر المؤلفون أنها غير آمنة ضد القنوات الجانبية على أي حال)

  • Python: python-pure25519 (Brian Warner)
    https://github.com/warner/python-pure25519/blob/master/pure25519/eddsa.py#L21

  • Python: nmed25519 (naturalmessage)
    https://github.com/naturalmessage/nmed25519/blob/master/nmed25519.py#L150

  • Python: ed25519.py (Shiho Midorikawa)
    https://gist.github.com/elliptic-shiho/f41fd75cc30646a61d7ad63043fdd56e#file-ed25519-py-L77

  • Python: روابط لـ ed25519-dalek: py-ed25519-bindings
    https://github.com/polkascan/py-ed25519-bindings/blob/master/src/lib.rs#L111

  • Swift: ed25519swift (pebble8888)
    https://github.com/pebble8888/ed25519swift/blob/master/Ed25519ref/ed25519s.swift#L120

  • JS: supercop.js (1p6 Flynx)
    https://github.com/1p6/supercop.js/blob/master/index.js#L29

  • JS: substack/ed25519-supercop (James Halliday)
    https://github.com/substack/ed25519-supercop/blob/master/index.js#L3

  • C: libeddsa (Philipp Lay)
    https://github.com/phlay/libeddsa/blob/master/lib/ed25519-sha512.c#L85

  • C#: SommerEngineering/Ed25519 (Thorsten Sommer)
    https://github.com/SommerEngineering/Ed25519/blob/master/Ed25519/Signer.cs#L80

  • CUDA: ChorusOne/solanity
    https://github.com/ChorusOne/solanity/blob/master/src/cuda-ecc-ed25519/sign.cu#L10

  • C: ncme/c25519 (Daniel Beer and Nikolas Rösener)
    https://github.com/ncme/c25519/blob/master/src/edsign.c#L115

  • C: luazen (Phil Leblanc)
    https://github.com/philanc/luazen/blob/master/src/x25519.c#L508 (قام المؤلفون بتعديل الدالة لقبول pk بدلاً من sk الأصلي المكوّن من 64 بايت والخاص بـ nacl والذي يتضمن pk كآخر 32 بايت)

  • C++: amber (Pelayo Bernedo)
    https://github.com/bernedogit/amber/blob/master/src/group25519.cpp#L1661

  • C: FLD ECC AVX2 (Armando Faz-Hern'{a}ndez and Julio L'{o}pez and Ricardo Dahab)
    https://github.com/armfazh/fld-ecc-vec/blob/master/src/sign255.c#L391

  • Elixir: mwmiller/ed25519_ex (Matt Miller)
    https://github.com/mwmiller/ed25519_ex/blob/master/lib/ed25519.ex#L146(المفتاح العام اختياري. وفقًا لتعليق المؤلف: إذا تم توفير المفتاح السري فقط، فسيتم اشتقاق المفتاح العام منه. وهذا يضيف عبئًا كبيرًا)

  • PHP (غلاف C): php-ed25519-ext
    https://github.com/encedo/php-ed25519-ext/blob/master/ed25519-ext.c#L93

  • Nim: niv/ed25519.nim (Bernhard Stöckner)
    https://github.com/niv/ed25519.nim/blob/master/ed25519.nim#L26

  • Typescript: mipher (Marco Paland)
    https://github.com/mpaland/mipher/blob/master/src/x25519.ts#L936

  • Lua: LuaMonocypher
    https://github.com/philanc/luamonocypher/blob/main/src/luamonocypher.c#L268

  • Crystal: monocypher.cr
    https://github.com/konovod/monocypher.cr/blob/master/src/monocypher.cr#L39

  • Python: py_ssh_keygen_ed25519 (Péter Szabó)
    https://github.com/pts/py_ssh_keygen_ed25519/blob/master/ed25519_compact.py#L128 (المفتاح العام اختياري)

  • Javascript: KinomaJS
    https://github.com/Kinoma/kinomajs/blob/701879d37e7fe5001420e0053cd60df6b91e4553/xs6/extensions/crypt/crypt_ed25519.js#L92 (المفتاح العام اختياري)

  • Haskell: gen-ed25-keypair
    https://github.com/awakesecurity/gen-ed25-keypair

  • C: horse25519 (Yawning Angel)
    https://github.com/Yawning/horse25519/blob/master/src/ref10/sign.c#L7 ملاحظة: يتضمن هذا المستودع نسخة من تنفيذ djb ref10 لـ ed25519 مأخوذة من supercop لتجنب إضافة اعتماد آخر، لكن القصد هو توفير ملف تنفيذي مستقل يقوم بتوليد أزواج مفاتيح ed25519 vanity. على الرغم من أنه يستخدم الواجهة بطريقة غريبة، إلا أن هذا مقصود لأنه يقوم بالفعل بشيء غريب وغير مألوف للغاية فيما يتعلق بتوليد المفاتيح، والمكتبة غير مخصصة للاستخدام في التوقيع.