• 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 के जरिए लगातार सुधार में मदद की जा सकती है

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.