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

रिपॉजिटरी देखें
250352 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

ed25519-unsafe-libs

Ed25519 पर डबल पब्लिक की साइनिंग फंक्शन Oracle अटैक

एड25519 सिग्नेचर लाइब्रेरियों की एक सूची जो एक सार्वजनिक API की अनुमति देती हैं जहाँ गुप्त और सार्वजनिक कुंजी को साइनिंग फंक्शन इनपुट के रूप में स्वतंत्र रूप से प्रदान किया जा सकता है। इन सार्वजनिक APIs के दुरुपयोग से प्राइवेट की उजागर हो सकती है।

हमारे विश्लेषण में अधिकांश रिपॉजिटरी IANIX :: Things that use Ed25519 में सूचीबद्ध हैं।

प्रभावित लाइब्रेरियों की संख्या: 45
घोषणा के बाद समस्या ठीक करने वाली लाइब्रेरियों की संख्या: 8
अंतिम अद्यतन: मई 04, 2023

इस संभावित शोषण को प्रदर्शित करने वाले प्रूफ ऑफ कॉन्सेप्ट कार्यान्वयन:

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

वार्ताएँ:

  • USA के नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड्स एंड टेक्नोलॉजी (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" (मार्च 08, 2023)
  • The Daily Swig "दर्जनों क्रिप्टोग्राफी लाइब्रेरियाँ प्राइवेट की चोरी के प्रति संवेदनशील" (जून 28, 2022)
  • Risky Biz News "नई क्रिप्टो भेद्यता: दर्जनों क्रिप्टोग्राफी लाइब्रेरियों ने Ed25519 डिजिटल हस्ताक्षर एल्गोरिथ्म का गलत कार्यान्वयन किया है" (जून 28, 2022)
  • SafeHeron blogpost "Ed25519 उपयोग जोखिमों का विश्लेषण: आपका वॉलेट प्राइवेट की चोरी हो सकती है" (जून 17, 2022)
  • kryptera.se "अधिकांश ed25519 लाइब्रेरियों में भेद्यता" (स्वीडिश में) (जून 29, 2022)
  • Difesa e Sicurezza & Yoroi "Librerie crittografiche ed25519 potenzialmente non sicure" (इतालवी में) (जुलाई 1 और जून 29, 2022)
  • Medium post by Prof Bill Buchanan OBE "Ed25519 महान है, लेकिन ..." (जुलाई 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 हस्ताक्षर नियतात्मक (deterministic) होते हैं, और इस प्रकार हस्ताक्षर किए जाने वाले समान इनपुट संदेश के लिए, एक अद्वितीय हस्ताक्षर आउटपुट लौटाया जाता है जिसमें दो तत्व शामिल होते हैं: एक वक्र बिंदु R और एक स्केलर S।

एक एल्गोरिथ्मिक विवरण यह है कि हस्ताक्षरकर्ता की सार्वजनिक कुंजी केवल हस्ताक्षर के S भाग की नियतात्मक गणना में शामिल होती है, लेकिन R मान में नहीं। बाद का तात्पर्य है कि यदि कोई प्रतिद्वंद्वी किसी तरह साइनिंग फंक्शन को Oracle के रूप में उपयोग कर सकता है (जो इनपुट के रूप में मनमानी सार्वजनिक कुंजियों की अपेक्षा करता है), तो यह संभव है कि समान संदेश के लिए दो हस्ताक्षर प्राप्त हों जो समान R साझा करते हैं और केवल S भाग में भिन्न होते हैं। दुर्भाग्यवश, जब ऐसा होता है, तो कोई भी आसानी से प्राइवेट की निकाल सकता है; यह StackOverflow पोस्ट पोस्ट बताती है कि यह क्यों संभव है।

यह कहने के बाद, सार्वजनिक APIs को साइनिंग इनपुट के रूप में एक अलग किए गए प्राइवेट/पब्लिक की-पेयर की अनुमति नहीं देनी चाहिए। इससे बचने के लिए, कई कार्यान्वयन सार्वजनिक कुंजी को प्राइवेट की (या सीड) के साथ संग्रहीत करते हैं और पूरे की-पेयर को गुप्त मानते हैं, या वे हमेशा साइनिंग फंक्शन के अंदर सार्वजनिक कुंजी को पुनः व्युत्पन्न (re-derive) करते हैं। दुर्भाग्यवश, बड़ी संख्या में मौजूदा लाइब्रेरियाँ इनपुट सार्वजनिक कुंजी को इनपुट प्राइवेट की के अनुरूप होने की जाँच किए बिना मनमानी सार्वजनिक कुंजियों को इनपुट के रूप में अनुमति देकर इस समस्या का समाधान नहीं कर पाती हैं।

बेशक, इसका मतलब यह नहीं है कि इन लाइब्रेरियों पर निर्भर सभी एप्लिकेशन कुंजी एक्सपोज़र हमलों के प्रति संवेदनशील हैं; वास्तव में, अधिकांश शायद सुरक्षित हैं क्योंकि वे आमतौर पर प्रभावित API को अपने उपयोगकर्ताओं के लिए सार्वजनिक रूप से उजागर नहीं करते हैं और sign कॉल से ठीक पहले अपने पब/प्राइवेट की-पेयर को जोड़ते हैं। दूसरी ओर, भले ही ये APIs उजागर न हों, ऐसे एप्लिकेशन हैं जिनमें प्राइवेट और पब्लिक की को प्रबंधित और संग्रहीत करने के तरीके के बारे में अलग-अलग TCB थ्रेट मॉडल रणनीतियाँ होती हैं। फिर भी, इस हमले को रोकने के लिए, डेवलपर्स को सार्वजनिक कुंजियों के लिए भी एक अखंडता संरक्षण प्रोटोकॉल लागू करना चाहिए।

Ed25519 API दुरुपयोग से कुंजी निष्कर्षण चित्र 1. ed25519-dalek Rust crate में API दुरुपयोग का एक उदाहरण।

प्रभावित लाइब्रेरियाँ

  • 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 Project)
    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. इस issue में तर्क संबोधित किया गया: 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 प्राइवेट की पुनर्प्राप्ति की संभावना, cf. 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 authors)
    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 (लेखकों ने फ़ंक्शन को संशोधित करके मूल nacl 64-बाइट sk के बजाय pk स्वीकार किया, जिसमें 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 वैनिटी कीपेयर जनरेशन करता है। हालाँकि यह API को एक अजीब तरीके से उपयोग करता है, यह जानबूझकर है क्योंकि यह पहले से ही कुंजी जनरेशन के संबंध में अत्यंत असामान्य और विदेशी कुछ कर रहा है और यह लाइब्रेरी हस्ताक्षर करने के लिए उपयोग किए जाने के लिए नहीं है।