
क्वांटम-प्रतिरोधी क्रिप्टोग्राफी के साथ प्रोटोटाइपिंग और प्रयोग के लिए C लाइब्रेरी
liboqs क्वांटम-सुरक्षित क्रिप्टोग्राफिक एल्गोरिदम के लिए एक ओपन सोर्स C लाइब्रेरी है।
liboqs प्रदान करता है:
liboqs Open Quantum Safe (OQS) परियोजना का हिस्सा है, जिसका उद्देश्य वास्तविक दुनिया के संदर्भों में तैनाती और परीक्षण को सुविधाजनक बनाने के लिए क्वांटम-सुरक्षित क्रिप्टोग्राफी को विकसित करना और अनुप्रयोगों में एकीकृत करना है। विशेष रूप से, OQS हमारे OpenSSL 3 Provider के माध्यम से TLS, X.509, और S/MIME जैसे प्रोटोकॉल में liboqs के प्रोटोटाइप एकीकरण प्रदान करता है, और हम विभिन्न अन्य पोस्ट-क्वांटम-सक्षम डेमो प्रदान करते हैं।
OQS परियोजना को Linux Foundation के हिस्से के रूप में Post-Quantum Cryptography Alliance द्वारा समर्थित किया जाता है। Open Quantum Safe परियोजना के बारे में अधिक जानकारी openquantumsafe.org पर पाई जा सकती है।
OQS अपने समुदाय को बेहतर ढंग से समझने के लिए एक सर्वेक्षण चला रहा है। हम संगठनों और व्यक्तियों से Open Quantum Safe परियोजना में उनकी रुचि और उपयोग के बारे में सुनना चाहेंगे। कृपया सर्वेक्षण भरने के लिए कुछ मिनट लें: https://linuxfoundation.surveymonkey.com/r/oqssurvey
नीचे दी गई तालिका वर्तमान में liboqs में एकीकृत प्रत्येक एल्गोरिदम परिवार का सारांश प्रस्तुत करती है। प्रति-वैरिएंट विवरण (NIST स्तर, स्थिर-समय स्थिति, औपचारिक सत्यापन, और उपलब्ध अनुकूलन सहित) के लिए, ALGORITHMS.md देखें; अपस्ट्रीम स्रोतों और सलाहों के लिए, docs/algorithms के अंतर्गत प्रति-एल्गोरिदम पृष्ठ देखें।
NIST द्वारा मानकीकृत एल्गोरिदम के नाम — ML-KEM, ML-DSA, और SLH-DSA — स्थिर हैं; यदि NIST कार्यान्वयन विवरण बदलता है, तो liboqs समायोजित होगा ताकि उपयोगकर्ता ऐसे परिवर्तनों से सुरक्षित रहें। अन्य सभी नाम परिवर्तन के अधीन हैं। कौन से एल्गोरिदम बनाए जाते हैं, इसे OQS_ALGS_ENABLED के माध्यम से नियंत्रित किया जा सकता है; डिफ़ॉल्ट रूप से, liboqs तालिका में प्रत्येक एल्गोरिदम का समर्थन करते हुए बनाया जाता है, जिसमें प्रयोगात्मक वाले भी शामिल हैं।
जबकि इस लेखन के समय इस लाइब्रेरी में उपयोग किए गए किसी भी क्वांटम-सुरक्षित एल्गोरिदम में कोई ज्ञात कमजोरी नहीं है, क्वांटम-सुरक्षित एल्गोरिदम को तैनात करते समय सावधानी बरतने की सलाह दी जाती है क्योंकि अधिकांश एल्गोरिदम और सॉफ़्टवेयर वर्तमान में तैनात एल्गोरिदम के समान स्तर की जांच के अधीन नहीं रहे हैं। मानक समुदाय द्वारा प्रदान किए गए मार्गदर्शन पर विशेष ध्यान दिया जाना चाहिए, विशेष रूप से NIST Post-Quantum Cryptography Standardization परियोजना से। जैसे-जैसे शोध आगे बढ़ता है, समर्थित एल्गोरिदम की सुरक्षा में तेजी से बदलाव हो सकते हैं, और वे शास्त्रीय और क्वांटम दोनों कंप्यूटरों के खिलाफ असुरक्षित भी साबित हो सकते हैं। इसके अलावा, ध्यान दें कि sntrup761 केवल इंटरऑप परीक्षण के लिए शामिल है।
liboqs का उद्देश्य "विजेताओं का चयन" करना नहीं है: एल्गोरिदम समर्थन NIST PQC मानकीकरण परियोजना द्वारा सूचित किया जाता है। हम दृढ़ता से अनुशंसा करते हैं कि अनुप्रयोग और प्रोटोकॉल पोस्ट-क्वांटम क्रिप्टोग्राफी तैनात करते समय इस प्रयास के परिणामों पर भरोसा करें।
हम समझते हैं कि कुछ पक्ष NIST PQC मानकीकरण परियोजना के समापन से पहले क्वांटम-सुरक्षित क्रिप्टोग्राफी तैनात करना चाह सकते हैं। हम दृढ़ता से अनुशंसा करते हैं कि ऐसे प्रयास तथाकथित हाइब्रिड क्रिप्टोग्राफी का उपयोग करें, जिसमें क्वांटम-सुरक्षित सार्वजनिक-कुंजी एल्गोरिदम को पारंपरिक सार्वजनिक-कुंजी एल्गोरिदम (जैसे RSA या अण्डाकार वक्र) के साथ उपयोग किया जाता है ताकि समाधान कम से कम मौजूदा पारंपरिक क्रिप्टोग्राफी से कम सुरक्षित न हो।
हम वर्तमान में उत्पादन वातावरण में इस लाइब्रेरी पर भरोसा करने या किसी संवेदनशील डेटा की सुरक्षा के लिए इसका उपयोग करने की अनुशंसा नहीं करते हैं। यह लाइब्रेरी अनुसंधान और प्रोटोटाइपिंग में मदद करने के लिए है। जबकि हम सुरक्षा बग से बचने के लिए सर्वोत्तम प्रयास करते हैं, इस लाइब्रेरी को उच्च सुरक्षा उपयोग के लिए इस पर भरोसा करने के लिए आवश्यक स्तर का ऑडिट और विश्लेषण प्राप्त नहीं हुआ है।
कमजोरी की रिपोर्ट कैसे करें और OQS कमजोरी प्रतिक्रिया प्रक्रिया के विवरण के लिए कृपया SECURITY.md देखें।
समर्थन प्रयास को अनुकूलित करने के लिए,
निर्भरताएँ स्थापित करें:
Ubuntu पर:
sudo apt install astyle cmake gcc ninja-build libssl-dev unzip xsltproc doxygen graphviz valgrind
python3 -m venv .venv
source .venv/bin/activate
pip install --require-hashes -r requirements.txt
macOS पर, अपनी पसंद के पैकेज मैनेजर का उपयोग करके (हमने Homebrew चुना है):
brew install cmake ninja openssl@3 wget doxygen graphviz astyle valgrind
python3 -m venv .venv
source .venv/bin/activate
pip install --require-hashes -r requirements.txt
Nix का उपयोग करके:
nix develop
ध्यान दें कि, यदि आप चाहते हैं कि liboqs विभिन्न सममित क्रिप्टो एल्गोरिदम (AES, SHA-2, आदि) के लिए OpenSSL का उपयोग करे, तो आपके पास OpenSSL स्थापित होना चाहिए (संस्करण 3.x अनुशंसित है; EOL संस्करण 1.1.1 भी अभी भी संभव है)।
स्रोत प्राप्त करें:
git clone -b main https://github.com/open-quantum-safe/liboqs.git
cd liboqs
और बिल्ड करें:
mkdir build && cd build
cmake -GNinja ..
ninja
परिणामी आर्टिफैक्ट्स को अनुकूलित करने के लिए विभिन्न cmake बिल्ड विकल्प उपलब्ध हैं और CONFIGURE.md में प्रलेखित हैं। सभी समर्थित विकल्प .CMake/alg-support.cmake फ़ाइल में भी सूचीबद्ध हैं, और build निर्देशिका में cmake -LAH -N .. चलाकर देखे जा सकते हैं।
निम्नलिखित निर्देश मानते हैं कि हम build में हैं।
डिफ़ॉल्ट रूप से मुख्य बिल्ड परिणाम lib/liboqs.a है, जो एक स्थिर लाइब्रेरी है। यदि आप एक साझा/डायनामिक लाइब्रेरी बनाना चाहते हैं, तो ऊपर दिए गए cmake -GNinja .. कमांड में -DBUILD_SHARED_LIBS=ON जोड़ें और परिणाम lib/liboqs.so|dylib|dll होगा। सार्वजनिक हेडर include निर्देशिका में स्थित हैं। tests निर्देशिका के अंतर्गत विभिन्न प्रोग्राम भी बनाए गए हैं:
test_kem: कुंजी एनकैप्सुलेशन तंत्र के लिए सरल परीक्षण हार्नेसtest_sig: हस्ताक्षर योजनाओं के लिए सरल परीक्षण हार्नेसtest_sig_stfl: स्टेटफुल हस्ताक्षर योजनाओं के लिए सरल परीक्षण हार्नेसtest_kem_mem: कुंजी एनकैप्सुलेशन तंत्र की मेमोरी खपत की जाँच के लिए सरल परीक्षण हार्नेसtest_sig_mem: हस्ताक्षर योजनाओं की मेमोरी खपत की जाँच के लिए सरल परीक्षण हार्नेसबाइनरी CMake Tools एक्सटेंशन के साथ Visual Studio 2019 का उपयोग करके उत्पन्न की जा सकती हैं। Linux/macOS के लिए ऊपर बताए गए समान विकल्पों का उपयोग किया जा सकता है और बिल्ड आर्टिफैक्ट निर्दिष्ट build फ़ोल्डरों में उत्पन्न होते हैं।
यदि आप Visual Studio बिल्ड फ़ाइलें बनाना चाहते हैं, उदाहरण के लिए, यदि ninja का उपयोग नहीं कर रहे हैं, तो सुनिश्चित करें कि ऊपर दिखाए अनुसार cmake कमांड में पैरामीटर -GNinja न पास करें। फिर आप msbuild का उपयोग करके सभी घटकों को बना सकते हैं, उदाहरण के लिए: msbuild ALL_BUILD.vcxproj और सभी आर्टिफैक्ट्स को स्थापित करें, उदाहरण के लिए इस कमांड का उपयोग करके: msbuild INSTALL.vcxproj।
आप विभिन्न प्लेटफार्मों के लिए liboqs को क्रॉस संकलित कर सकते हैं। विस्तृत जानकारी Wiki में उपलब्ध है।
बिल्डिंग, वैकल्पिक बिल्ड पैरामीटर, उदाहरण अनुप्रयोगों, कोडिंग परंपराओं और अधिक के बारे में अधिक विस्तृत जानकारी wiki में पाई जा सकती है।
स्वीकृति मानदंडों को पूरा करने वाले योगदानों का स्वागत किया जाता है। अधिक विवरण के लिए हमारा योगदान गाइड देखें।
liboqs MIT लाइसेंस के अंतर्गत लाइसेंस प्राप्त है; विवरण के लिए LICENSE.txt देखें।
liboqs में कुछ तृतीय-पक्ष लाइब्रेरी या मॉड्यूल शामिल हैं जो अलग तरह से लाइसेंस प्राप्त हैं; संबंधित उपफ़ोल्डर में वह लाइसेंस होता है जो उस मामले में लागू होता है। विशेष रूप से:
.CMake/CMakeDependentOption.cmake: BSD 3-Clause लाइसेंसsrc/common/common.c: Apache लाइसेंस v2.0 वाले भाग शामिल हैंsrc/common/crypto/aes/aes_c.c: सार्वजनिक डोमेन या कोई भी OSI-अनुमोदित लाइसेंसsrc/common/crypto/aes/aes*_ni.c: सार्वजनिक डोमेनsrc/common/crypto/sha2/sha2_c.c: सार्वजनिक डोमेनsrc/common/crypto/sha3/xkcp_low : CC0 (सार्वजनिक डोमेन), brg_endian.h और KeccakP-1600-AVX2.s को छोड़करsrc/common/crypto/sha3/xkcp_low/.../brg_endian.h : BSD 3-Clause लाइसेंसsrc/common/crypto/sha3/xkcp_low/.../KeccakP-1600-AVX2.s : BSD-जैसा CRYPTOGAMS लाइसेंसsrc/common/rand/rand_nist.c: फ़ाइल देखेंOQS परियोजना Linux Foundation के भाग के रूप में पोस्ट-क्वांटम क्रिप्टोग्राफी एलायंस द्वारा समर्थित है।
OQS परियोजना की स्थापना वाटरलू विश्वविद्यालय में डगलस स्टेबिला और मिशेल मोस्का द्वारा की गई थी। liboqs में योगदानकर्ता में व्यक्तिगत योगदानकर्ता, शिक्षाविद और शोधकर्ता, और विभिन्न कंपनियाँ शामिल हैं, जिनमें Amazon Web Services, Cisco Systems, evolutionQ, IBM Research, Microsoft Research, SandboxAQ और softwareQ शामिल हैं।
ओपन क्वांटम सेफ के विकास के लिए वित्तीय सहायता Amazon Web Services, कनाडाई साइबर सुरक्षा केंद्र, Cisco, यूनिटरी फंड, NGI Assure फंड और VeriSign Inc. द्वारा प्रदान की गई है।
OQS के विशिष्ट घटकों को विकसित करने वाली शोध परियोजनाओं को विभिन्न शोध अनुदानों द्वारा समर्थित किया गया है, जिसमें कनाडा की प्राकृतिक विज्ञान और इंजीनियरिंग अनुसंधान परिषद (NSERC) से वित्त पोषण शामिल है; वित्त पोषण की स्वीकृतियों के लिए स्रोत पेपर देखें।
| एल्गोरिदम परिवार | मानकीकरण स्थिति | प्राथमिक कार्यान्वयन | अपस्ट्रीम रखरखाव | OQS स्तर |
|---|
| BIKE | NIST द्वारा चयनित नहीं | awslabs/bike-kem | TBD | स्तर 3 (सामुदायिक) |
| Classic McEliece | ISO विचाराधीन | PQClean/PQClean@1eacfda | कोई सक्रिय रखरखाव नहीं | स्तर 3 (सामुदायिक) |
| FrodoKEM | ISO विचाराधीन | microsoft/PQCrypto-LWEKE@a2f9dec | सर्वोत्तम प्रयास | स्तर 2 (समर्थित) |
| HQC | आगामी मानकीकरण के लिए NIST द्वारा चयनित | pqc-hqc/hqc@161cd4f | TBD | स्तर 2 (समर्थित) |
| Kyber | ML-KEM (FIPS 203) के आधार के रूप में NIST द्वारा चयनित | pq-crystals/kyber@441c051 | सक्रिय रूप से रखरखाव किया गया | स्तर 3 (सामुदायिक) |
| ML-KEM | NIST द्वारा मानकीकृत | pq-code-package/mlkem-native@0ba906c | सक्रिय रूप से रखरखाव किया गया | स्तर 1 (मुख्य) |
| NTRU | NIST द्वारा चयनित नहीं, NTT द्वारा मानकीकरण विचाराधीन | PQClean/PQClean@4c9e5a3 | सक्रिय रूप से रखरखाव किया गया | स्तर 3 (सामुदायिक) |
| NTRU-Prime | NIST द्वारा चयनित नहीं | openssh/openssh-portable | सक्रिय रूप से रखरखाव किया गया | स्तर 3 (सामुदायिक) |
| एल्गोरिदम परिवार | मानकीकरण स्थिति | प्राथमिक कार्यान्वयन | अपस्ट्रीम रखरखाव | OQS स्तर |
|---|
| CROSS | NIST विचाराधीन | CROSS-signature/CROSS-lib-oqs@179d61b | सक्रिय रूप से रखरखाव किया गया | स्तर 3 (सामुदायिक) |
| Falcon | आगामी मानकीकरण के लिए NIST द्वारा चयनित | PQClean/PQClean@1eacfda | TBD | स्तर 3 (सामुदायिक) |
| MAYO | NIST विचाराधीन | PQCMayo/MAYO-C@64e15c6 | सक्रिय रूप से रखरखाव किया गया | स्तर 3 (सामुदायिक) |
| ML-DSA | NIST द्वारा मानकीकृत | pq-code-package/mldsa-native@9b0ee84 | सक्रिय रूप से रखरखाव किया गया | स्तर 2 (समर्थित) |
| MQOM | NIST विचाराधीन | mqom/mqom-v2@ec6b7fa | सक्रिय रूप से रखरखाव किया गया | स्तर 3 (सामुदायिक) |
| SLH-DSA | NIST द्वारा मानकीकृत | pq-code-package/slhdsa-c@a0fc1ff | सर्वोत्तम प्रयास | स्तर 3 (सामुदायिक) |
| SNOVA | NIST विचाराधीन | vacuas/SNOVA@1c3ca6f | सर्वोत्तम प्रयास | स्तर 3 (सामुदायिक) |
| UOV | NIST विचाराधीन | pqov/pqov@33fa527 | सर्वोत्तम प्रयास | स्तर 3 (सामुदायिक) |
| एल्गोरिदम परिवार | मानकीकरण स्थिति | प्राथमिक कार्यान्वयन | अपस्ट्रीम रखरखाव | OQS स्तर |
|---|
| LMS | IRTF द्वारा मानकीकृत, NIST द्वारा अनुमोदित | cisco/hash-sigs | सर्वोत्तम प्रयास | स्तर 2 (समर्थित) |
| XMSS | IRTF द्वारा मानकीकृत, NIST द्वारा अनुमोदित | XMSS/xmss-reference | सक्रिय रूप से रखरखाव किया गया | स्तर 2 (समर्थित) |
kat_kem: प्रोग्राम जो NIST सबमिशन आवश्यकताओं के समान प्रक्रिया का उपयोग करके कुंजी एनकैप्सुलेशन तंत्र के लिए ज्ञात उत्तर परीक्षण (KAT) मान उत्पन्न करता है, tests/test_kat.py का उपयोग करके सबमिट किए गए KAT मानों के विरुद्ध जाँच के लिएkat_sig: प्रोग्राम जो NIST सबमिशन आवश्यकताओं के समान प्रक्रिया का उपयोग करके हस्ताक्षर योजनाओं के लिए ज्ञात उत्तर परीक्षण (KAT) मान उत्पन्न करता है, tests/test_kat.py का उपयोग करके सबमिट किए गए KAT मानों के विरुद्ध जाँच के लिएkat_sig_stfl: tests/test_kat.py का उपयोग करके सबमिट किए गए KAT मानों के विरुद्ध परिणामों की जाँच के लिए प्रोग्रामspeed_kem: कुंजी एनकैप्सुलेशन तंत्र के लिए बेंचमार्किंग प्रोग्राम; उपयोग निर्देशों के लिए ./speed_kem --help देखेंspeed_sig: हस्ताक्षर तंत्र के लिए बेंचमार्किंग प्रोग्राम; उपयोग निर्देशों के लिए ./speed_sig --help देखेंspeed_sig_stfl: स्टेटफुल हस्ताक्षर तंत्र के लिए बेंचमार्किंग प्रोग्राम; उपयोग निर्देशों के लिए ./speed_sig_stfl --help देखेंexample_kem: KEM API के उपयोग को दर्शाने वाला न्यूनतम चलाने योग्य उदाहरणexample_sig: हस्ताक्षर API के उपयोग को दर्शाने वाला न्यूनतम चलाने योग्य उदाहरणexample_sig_stfl: स्टेटफुल हस्ताक्षर API के उपयोग को दर्शाने वाला न्यूनतम चलाने योग्य उदाहरणtest_aes, test_sha3: क्रिप्टो उप-घटकों के लिए सरल परीक्षण हार्नेसtest_portability: क्रॉस-CPU कोड पोर्टेबिलिटी की जाँच के लिए सरल परीक्षण हार्नेस; qemu की उपस्थिति की आवश्यकता है; उचित संचालन केवल Ubuntu पर मान्य हैपूर्ण परीक्षण सूट निम्न का उपयोग करके चलाया जा सकता है:
ninja run_tests
API का HTML दस्तावेज़ीकरण उत्पन्न करने के लिए, चलाएँ:
ninja gen_docs
फिर अपने वेब ब्राउज़र में docs/html/index.html खोलें।
निर्मित लाइब्रेरी और include फ़ाइलों को पसंद के स्थान पर स्थापित करने के लिए ninja install चलाया जा सकता है, जिसे कॉन्फ़िगरेशन समय पर cmake को -DCMAKE_INSTALL_PREFIX=<dir> विकल्प पास करके निर्दिष्ट किया जा सकता है। वैकल्पिक रूप से, एक इंस्टॉल पैकेज बनाने के लिए ninja package चलाया जा सकता है।
सभी इंस्टॉलेशन फ़ाइलों को हटाने के लिए ninja uninstall चलाया जा सकता है।
src/kem/bike/additional: Apache लाइसेंस v2.0src/kem/classic_mceliece/pqclean_*: सार्वजनिक डोमेनsrc/kem/kyber/pqcrystals-*: सार्वजनिक डोमेन (CC0) या Apache लाइसेंस v2.0src/kem/kyber/pqclean_*: सार्वजनिक डोमेन (CC0), और सार्वजनिक डोमेन (CC0) या Apache लाइसेंस v2.0, और सार्वजनिक डोमेन (CC0) या MIT, और MITsrc/kem/kyber/libjade_* सार्वजनिक डोमेन (CC0) या Apache लाइसेंस v2.src/kem/ml_kem/mlkem-native_*: MIT या Apache लाइसेंस v2.0 या ISC लाइसेंसsrc/kem/ntru/pqclean_*: सार्वजनिक डोमेन (CC0)src/kem/ntruprime/sntrup761_openssh: सार्वजनिक डोमेनsrc/sig/mayo/*: Apache लाइसेंस v2.0src/sig/ml_dsa/pqcrystals-*: सार्वजनिक डोमेन (CC0) या Apache लाइसेंस v2.0