
مكتبة C للنمذجة الأولية والتجريب مع التشفير المقاوم للحوسبة الكمومية
liboqs هي مكتبة C مفتوحة المصدر للخوارزميات التشفيرية الآمنة كموميًا.
يوفر liboqs ما يلي:
liboqs هو جزء من مشروع Open Quantum Safe (OQS)، الذي يهدف إلى تطوير ودمج التشفير الآمن كموميًا في التطبيقات لتسهيل النشر والاختبار في سياقات العالم الحقيقي. على وجه الخصوص، يوفر OQS تكاملات نموذجية لـ liboqs في بروتوكولات مثل TLS وX.509 وS/MIME، من خلال موفر OpenSSL 3 الخاص بنا، ونوفر مجموعة متنوعة من العروض التوضيحية الأخرى المفعّلة بعد الكم.
مشروع OQS مدعوم من قبل تحالف التشفير بعد الكم كجزء من مؤسسة لينكس. يمكن العثور على مزيد من المعلومات حول مشروع 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. مع تقدم الأبحاث، قد تشهد الخوارزميات المدعومة تغييرات سريعة في أمانها، وقد تثبت حتى أنها غير آمنة ضد كل من أجهزة الكمبيوتر الكلاسيكية والكمومية. علاوة على ذلك، لاحظ أن sntrup761 مضمّن فقط لاختبار التوافق التشغيلي.
لا ينوي liboqs "اختيار الفائزين": دعم الخوارزميات يستند إلى مشروع توحيد NIST PQC. نوصي بشدة بأن تعتمد التطبيقات والبروتوكولات على نتائج هذا الجهد عند نشر التشفير بعد الكم.
ندرك أن بعض الأطراف قد ترغب في نشر التشفير الآمن كموميًا قبل اختتام مشروع توحيد NIST PQC. نوصي بشدة بأن تستخدم هذه المحاولات ما يسمى التشفير الهجين، حيث تُستخدم خوارزميات المفاتيح العامة الآمنة كموميًا جنبًا إلى جنب مع خوارزميات المفاتيح العامة التقليدية (مثل RSA أو المنحنيات الإهليلجية) بحيث يكون الحل على الأقل ليس أقل أمانًا من التشفير التقليدي الحالي.
لا نوصي حاليًا بالاعتماد على هذه المكتبة في بيئة إنتاج أو لحماية أي بيانات حساسة. هذه المكتبة مخصصة للمساعدة في البحث والنماذج الأولية. بينما نبذل قصارى جهدنا لتجنب ثغرات الأمان، لم تحصل هذه المكتبة على مستوى التدقيق والتحليل اللازم للاعتماد عليها في الاستخدامات عالية الأمان.
يرجى الاطلاع على SECURITY.md للحصول على تفاصيل حول كيفية الإبلاغ عن ثغرة أمنية وعملية استجابة OQS للثغرات.
من أجل تحسين جهد الدعم،
تثبيت التبعيات:
على أوبونتو:
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 مكتبة OpenSSL لخوارزميات التشفير المتماثل المختلفة (AES، SHA-2، إلخ)، فيجب أن يكون لديك OpenSSL مثبتاً (الإصدار 3.x موصى به؛ الإصدار المنتهي 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، ويمكن عرضها بتشغيل cmake -LAH -N .. في دليل build.
تفترض التعليمات التالية أننا في build.
بشكل افتراضي، النتيجة الرئيسية للبناء هي lib/liboqs.a، وهي مكتبة ثابتة. إذا كنت تريد بناء مكتبة مشتركة/ديناميكية، أضف -DBUILD_SHARED_LIBS=ON إلى أمر cmake -GNinja .. أعلاه وستكون النتيجة lib/liboqs.so|dylib|dll. توجد الملفات الرأسية العامة في دليل include. هناك أيضاً مجموعة متنوعة من البرامج المبنية تحت دليل tests:
test_kem: أداة اختبار بسيطة لآليات تغليف المفاتيحtest_sig: أداة اختبار بسيطة لمخططات التوقيعtest_sig_stfl: أداة اختبار بسيطة لمخططات التوقيع ذات الحالةtest_kem_mem: أداة اختبار بسيطة للتحقق من استهلاك الذاكرة لآليات تغليف المفاتيحtest_sig_mem: أداة اختبار بسيطة للتحقق من استهلاك الذاكرة لمخططات التوقيعkat_kem: برنامج يولد قيم اختبار الإجابة المعروفة (KAT) لآليات تغليف المفاتيح باستخدام نفس الإجراء المتبع في متطلبات تقديم NIST، للتحقق من قيم KAT المقدمة باستخدام يمكن توليد الملفات الثنائية باستخدام Visual Studio 2019 مع تثبيت إضافة CMake Tools. يمكن استخدام نفس الخيارات الموضحة أعلاه لنظامي Linux/macOS ويتم توليد مخرجات البناء في مجلدات build المحددة.
إذا كنت تريد إنشاء ملفات بناء Visual Studio، على سبيل المثال، إذا لم تستخدم ninja، فتأكد من عدم تمرير المعامل -GNinja إلى أمر cmake كما هو موضح أعلاه. يمكنك بعد ذلك بناء جميع المكونات باستخدام msbuild، على سبيل المثال كما يلي: msbuild ALL_BUILD.vcxproj وتثبيت جميع المخرجات على سبيل المثال باستخدام هذا الأمر msbuild INSTALL.vcxproj.
يمكنك الترجمة المتبادلة لـ liboqs لمنصات متعددة. تتوفر معلومات مفصلة في الويكي.
يمكن العثور على معلومات أكثر تفصيلاً حول البناء، ومعاملات البناء الاختيارية، والتطبيقات النموذجية، واصطلاحات الترميز والمزيد في الويكي.
المساهمات التي تستوفي معايير القبول مرحب بها بامتنان. راجع دليل المساهمة لمزيد من التفاصيل.
liboqs مرخص بموجب رخصة MIT؛ راجع LICENSE.txt للتفاصيل.
يتضمن liboqs بعض المكتبات أو الوحدات الخارجية المرخصة بتراخيص مختلفة؛ يحتوي المجلد الفرعي المقابل على الترخيص المطبق في تلك الحالة. على وجه الخصوص:
.CMake/CMakeDependentOption.cmake: رخصة BSD 3-Clausesrc/common/common.c: يتضمن أجزاء مرخصة بموجب رخصة Apache الإصدار 2.0src/common/crypto/aes/aes_c.c: ملكية عامة أو أي رخصة معتمدة من OSIsrc/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.ssrc/common/crypto/sha3/xkcp_low/.../brg_endian.h : رخصة BSD 3-Clausesrc/common/crypto/sha3/xkcp_low/.../KeccakP-1600-AVX2.s : رخصة CRYPTOGAMS الشبيهة بـ BSDsrc/common/rand/rand_nist.c: راجع الملفمشروع OQS مدعوم من قبل تحالف التشفير ما بعد الكمي كجزء من مؤسسة لينكس.
تأسس مشروع OQS على يد Douglas Stebila و Michele Mosca في جامعة واترلو. المساهمون في liboqs يشملون مساهمين أفراداً، وأكاديميين وباحثين، وشركات مختلفة، بما في ذلك Amazon Web Services و Cisco Systems و evolutionQ و IBM Research و Microsoft Research و SandboxAQ و softwareQ.
تم تقديم الدعم المالي لتطوير Open Quantum Safe من قبل Amazon Web Services والمركز الكندي للأمن السيبراني و Cisco و Unitary Fund و NGI Assure Fund و 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 | مختارة من قبل NIST كأساس لـ ML-KEM (FIPS 203) | 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 (مدعوم) |
tests/test_kat.pykat_sig: برنامج يولد قيم اختبار الإجابة المعروفة (KAT) لمخططات التوقيع باستخدام نفس الإجراء المتبع في متطلبات تقديم NIST، للتحقق من قيم KAT المقدمة باستخدام tests/test_kat.pykat_sig_stfl: برنامج للتحقق من النتائج مقابل قيم KAT المقدمة باستخدام tests/test_kat.pyspeed_kem: برنامج قياس أداء لآليات تغليف المفاتيح؛ راجع ./speed_kem --help لتعليمات الاستخدامspeed_sig: برنامج قياس أداء لآليات التوقيع؛ راجع ./speed_sig --help لتعليمات الاستخدامspeed_sig_stfl: برنامج قياس أداء لآليات التوقيع ذات الحالة؛ راجع ./speed_sig_stfl --help لتعليمات الاستخدامexample_kem: مثال بسيط قابل للتشغيل يوضح استخدام واجهة برمجة تطبيقات KEMexample_sig: مثال بسيط قابل للتشغيل يوضح استخدام واجهة برمجة تطبيقات التوقيعexample_sig_stfl: مثال بسيط قابل للتشغيل يوضح استخدام واجهة برمجة تطبيقات التوقيع ذات الحالةtest_aes, test_sha3: أدوات اختبار بسيطة للمكونات الفرعية للتشفيرtest_portability: أدوات اختبار بسيطة للتحقق من قابلية نقل الكود عبر وحدات المعالجة المركزية المختلفة؛ يتطلب وجود qemu؛ التشغيل السليم تم التحقق منه فقط على أوبونتويمكن تشغيل مجموعة الاختبارات الكاملة باستخدام
ninja run_tests
لتوليد توثيق HTML لواجهة برمجة التطبيقات، قم بتشغيل:
ninja gen_docs
ثم افتح docs/html/index.html في متصفح الويب الخاص بك.
يمكن تشغيل ninja install لتثبيت المكتبة المبنية وملفات include في موقع من اختيارك، والذي يمكن تحديده بتمرير خيار -DCMAKE_INSTALL_PREFIX=<dir> إلى cmake في وقت التكوين. بدلاً من ذلك، يمكن تشغيل ninja package لإنشاء حزمة تثبيت.
يمكن تشغيل ninja uninstall لإزالة جميع ملفات التثبيت.
src/kem/bike/additional: رخصة Apache الإصدار 2.0src/kem/classic_mceliece/pqclean_*: ملكية عامةsrc/kem/kyber/pqcrystals-*: ملكية عامة (CC0) أو رخصة Apache الإصدار 2.0src/kem/kyber/pqclean_*: ملكية عامة (CC0)، وملكية عامة (CC0) أو رخصة Apache الإصدار 2.0، وملكية عامة (CC0) أو MIT، وMITsrc/kem/kyber/libjade_* ملكية عامة (CC0) أو رخصة Apache الإصدار 2.0src/kem/ml_kem/mlkem-native_*: MIT أو رخصة Apache الإصدار 2.0 أو رخصة ISCsrc/kem/ntru/pqclean_*: ملكية عامة (CC0)src/kem/ntruprime/sntrup761_openssh: ملكية عامةsrc/sig/mayo/*: رخصة Apache الإصدار 2.0src/sig/ml_dsa/pqcrystals-*: ملكية عامة (CC0) أو رخصة Apache الإصدار 2.0