- libsodium के low-level फ़ंक्शन
crypto_core_ed25519_is_valid_point() में Edwards25519 curve पर point validation की त्रुटि पाई गई
- इस फ़ंक्शन को यह जांचना चाहिए कि point मुख्य cryptographic group का हिस्सा है या नहीं, लेकिन इसने mixed order (subgroup) के कुछ points को गलत तरीके से पास कर दिया
- वजह internal coordinate validation में code bug थी, जहाँ सिर्फ X=0 की जांच की गई और Y=Z validation छूट गई, जिससे गलत points को valid माना जा सकता था
- patched version में दोनों शर्तें (X=0, Y=Z) जांची जाती हैं, और 1.0.20 या उससे नीचे के versions या 30 दिसंबर 2025 से पहले की releases प्रभावित हैं
- high-level API (
crypto_sign_*) प्रभावित नहीं है, और सुरक्षा व performance के लिए Ristretto255 group का उपयोग recommended है
libsodium प्रोजेक्ट का अवलोकन
- libsodium 13 साल पहले शुरू हुआ प्रोजेक्ट है, जिसका उद्देश्य cryptography को आसानी से उपयोग करने के लिए simple API देना है
- इसे इस तरह डिज़ाइन किया गया कि users को internal algorithms जाने बिना high-level operations करने की सुविधा मिले
- API की compatibility बनाए रखने पर ज़ोर दिया गया है, और NaCl API के आधार पर अब तक consistency रखी गई है
- कुछ users ने documentation में बताए गए limits से आगे बढ़कर low-level functions का सीधे उपयोग किया, जिससे library का उपयोग cryptography toolkit की तरह बढ़ा है
मिले bug का कारण
- समस्या वाला फ़ंक्शन:
crypto_core_ed25519_is_valid_point()
- इसे Edwards25519 curve पर मुख्य group (order L) में शामिल न होने वाले points को reject करना चाहिए
- लेकिन mixed order (2L, 4L, 8L आदि) के कुछ points validation पार कर गए
- internal रूप से point का order जांचने के लिए L से गुणा किया जाता है, फिर यह देखा जाता है कि result identity है या नहीं
- identity को X=0, Y=Z के रूप में दर्शाया जाता है, लेकिन पुराने code में सिर्फ X=0 की जांच थी
- इसी वजह से Y≠Z वाले गलत points को भी valid माना गया
- उदाहरण: मुख्य group के point Q में order 2 वाला point (0, -1) जोड़ने पर बना Q+(0, -1) गलत point है, लेकिन fix से पहले यह पास हो जाता था
क्या बदला गया
- patch commit में यह बदलाव किया गया
- पुराना code:
return fe25519_iszero(pl.X);
- नया code:
fe25519_sub(t, pl.Y, pl.Z); return fe25519_iszero(pl.X) & fe25519_iszero(t);
- अब X=0 और Y=Z दोनों conditions की जांच करके सही validation किया जाता है
प्रभाव का दायरा
- निम्न शर्तों में प्रभाव संभव है
- 1.0.20 या उससे नीचे का version, या 30 दिसंबर 2025 से पहले की release उपयोग में हो
crypto_core_ed25519_is_valid_point() से untrusted input points validate किए जा रहे हों
- user Edwards25519 curve operations को सीधे implement कर रहा हो
- लेकिन अधिकांश users प्रभावित नहीं हैं
- high-level API (
crypto_sign_*) इस फ़ंक्शन का उपयोग नहीं करती
crypto_scalarmult_ed25519 में गलत public key होने पर भी information leak नहीं होता
crypto_sign_keypair और crypto_sign_seed_keypair से बनी keys सही group में होती हैं
सुझाए गए कदम
- Ristretto255 group का उपयोग recommended है
- यह 2019 से libsodium में शामिल है और cofactor से जुड़ी समस्याओं को हल करता है
- decoded points अपने-आप सुरक्षित होते हैं, इसलिए अतिरिक्त validation की ज़रूरत नहीं
- Edwards25519 से तेज़ operation performance देता है
- यदि update संभव न हो, तो दिए गए application-level alternative function (
is_on_main_subgroup) से validation किया जा सकता है
संशोधित वितरण और समर्थन
- समस्या मिलते ही तुरंत fix कर दिया गया, और 30 दिसंबर 2025 के बाद जारी सभी stable versions में यह शामिल है
- official tarball, Visual Studio/MingW binaries, NuGet package, Android builds,
swift-sodium xcframework, Rust libsodium-sys-stable, libsodium.js शामिल हैं
- नया point release भी निर्धारित है
- प्रोजेक्ट single maintainer द्वारा चलाया जाता है, और OpenCollective support के जरिए लगातार सुधार में मदद की जा सकती है
अभी कोई टिप्पणी नहीं है.