راجع حالة البناء لكل مكون هنا
باختصار، PQClean هو جهد لجمع التطبيقات النظيفة لمخططات ما بعد الكم الموجودة في مشروع NIST ما بعد الكم. الهدف من PQClean هو توفير تطبيقات مستقلة
ما لا يهدف إليه PQClean هو
كهدف رئيسي أول، نقوم بجمع تطبيقات لغة C التي تفي بالمتطلبات المذكورة أدناه. نحن نقبل أيضًا عمليات التنفيذ المحسنة، ولكننا لا نزال بحاجة إلى تعليمات برمجية مختبرة وعالية الجودة.
يرجى أيضًا مراجعة إرشاداتنا الخاصة بالمساهمين إذا كنت مهتمًا بإضافة مخطط إلى PQClean.
للحصول على ملخص للدروس المستفادة أثناء العمل على PQClean، يرجى الرجوع إلى:
ماتياس ج. كانويشر، وبيتر شوابي، ودوغلاس ستيبيلا، وتوم ويجرز. "تحسين جودة البرمجيات في مشاريع توحيد التشفير." في: أبحاث توحيد المعايير الأمنية – ورش عمل EuroS&P 2022. 2022.
ابحث عن الورقة على https://eprint.iacr.org/2022/337
يرجى ذكر هذا العمل عند الإشارة إلى PQClean:
@inproceedings { SSR:KSSW22 ,
author = { Matthias J. Kannwischer and
Peter Schwabe and
Douglas Stebila and
Thom Wiggers } ,
title = { Improving Software Quality in Cryptography Standardization Projects } ,
booktitle = { {IEEE} European Symposium on Security and Privacy, EuroS{&}P 2022 - Workshops, Genoa, Italy, June 6-10, 2022 } ,
pages = { 19--30 } ,
publisher = { IEEE Computer Society } ,
address = { Los Alamitos, CA, USA } ,
year = { 2022 } ,
url = { https://eprint.iacr.org/2022/337 } ,
doi = { 10.1109/EuroSPW55150.2022.00010 } ,
}
يرجى ملاحظة أن العديد من التطبيقات المضمنة في PQClean تنشأ من مشاريع بحثية أصلية نفسها، وسيقدر مؤلفوها الحصول على الاستشهاد بها أيضًا.
لا يزال فحص العناصر الموجودة في هذه القائمة قيد التطوير. يجب أن تعمل العناصر المحددة.
api.h
ملفات خارجية -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes
مع gcc
و clang
#if
/ #ifdef
مخصص لتغليف الرأس فقط const
على أنها const
fips202.c
و sha2.c
و aes.c
و randombytes.c
0
عند النجاح nmake
) PQCLEAN_SCHEMENAME_
LICENSE
(انظر أدناه) META.yml
يقدم تفاصيل حول إصدار الخوارزمية والمصممين META.yml
. stdint.h
(اختياري، موصى به)size_t
(اختياري، موصى به)for (size_t i=...
) (اختياري، موصى به) بالنسبة للمخططات التالية، لدينا تطبيقات لواحدة أو أكثر من مجموعات المعلمات الخاصة بها. بالنسبة لجميع هذه المخططات، لدينا كود C نظيف، ولكن بالنسبة للبعض لدينا أيضًا كود محسّن.
المتأهلون للتصفيات النهائية:
المرشحين البديلين:
المعايير المستقبلية:
المرشحين البديلين:
التطبيقات المتوفرة سابقًا في PQClean والتي تم إسقاطها في الجولة 3 من جهود توحيد NIST متاحة في علامة round2
.
التطبيقات المتوفرة مسبقًا في PQClean والتي تم إسقاطها في الجولة 4 من جهود توحيد NIST متاحة في علامة round3
.
يستخدم PQClean بشكل أساسي نفس واجهة برمجة التطبيقات (API) المطلوبة لتطبيقات NIST المرجعية، والتي يتم استخدامها أيضًا بواسطة SUPERCOP وlippqcrypto. الاختلافات الوحيدة في واجهة برمجة التطبيقات هذه هي ما يلي:
size_t
بدلاً من unsigned long long
; و int PQCLEAN_SCHEME_IMPL_crypto_sign_signature (
uint8_t * sig , size_t * siglen ,
const uint8_t * m , size_t mlen ,
const uint8_t * sk );
int PQCLEAN_SCHEME_IMPL_crypto_sign_verify (
const uint8_t * sig , size_t siglen ,
const uint8_t * m , size_t mlen ,
const uint8_t * pk );
كما هو مذكور أعلاه، ليس المقصود من PQClean أن يتم إنشاؤه كمكتبة واحدة: فهو عبارة عن مجموعة من التعليمات البرمجية المصدر التي يمكن دمجها بسهولة في مكتبات أخرى. يتضمن مستودع PQClean العديد من برامج الاختبار التي تقوم بإنشاء ملفات متنوعة، ولكن يجب ألا تستخدم الثنائيات الناتجة.
قائمة التبعيات المطلوبة: gcc or clang, make, python3, python-yaml library, valgrind, astyle (>= 3.0)
.
يمكن استخراج كل دليل تنفيذ في PQClean (على سبيل المثال، crypto_kem/kyber768_clean) لاستخدامه في مشروعك الخاص. سوف تحتاج إلى:
common/randombytes.h
(مولد أرقام عشوائية مشفرة)، وربما common/sha2.h
(عائلة دالة التجزئة SHA-2)، common/aes.h
(تطبيقات AES)، common/fips202.h
( عائلة دالة التجزئة SHA-3) و common/sp800-185.h
(عائلة cSHAKE). من الممكن استخدام التطبيقات من المجلد common/
، لكن لاحظ أنها قد لا تكون التطبيقات الأكثر أداءً وقد تفعل أشياء غير ضرورية (مثل تخصيصات الكومة) لأغراض الاختبار الخاصة بنا.فيما يتعلق برقم 2، إضافة الملفات إلى نظام بناء مشروعك، يكون كل تطبيق في PQClean مصحوبًا بمثالين لملفات إنشاء توضح كيف يمكن إنشاء الملفات لهذا التنفيذ:
Makefile
الذي يمكن استخدامه مع GNU Make وBSD Make وربما آخرين.Makefile.Microsoft_nmake
الذي يمكن استخدامه مع nmake الخاص بـ Visual Studio. تستهلك المشاريع التالية تطبيقات من PQClean وتوفر أغلفة خاصة بها حول التطبيقات. قد تكون استراتيجيات التكامل الخاصة بهم بمثابة أمثلة لمشاريعك الخاصة.
يحتوي كل دليل فرعي يحتوي على تطبيقات على ملف LICENSE
يوضح الترخيص الذي تم إصدار هذا التطبيق المحدد بموجبه. تحتوي الملفات common
على معلومات الترخيص في الجزء العلوي من الملف (وهي حاليًا إما ملكية عامة أو MIT). يتم تحرير جميع التعليمات البرمجية الأخرى في هذا المستودع وفقًا لشروط CC0.
راجع https://github.com/PQClean/PQClean/wiki/Test-framework للحصول على تفاصيل حول إطار اختبار PQClean.
بينما نجري اختبارات تلقائية واسعة النطاق على Github Actions (إصدارات Linux (المضاهية) وإصدارات MacOS وWindows) وTravis CI (إصدارات Aarch64)، ويمكن أيضًا تشغيل معظم الاختبارات محليًا. للقيام بذلك، تأكد من تثبيت ما يلي:
pytest
لبيثون 3. نوصي أيضًا بتثبيت pytest-xdist
للسماح بإجراء الاختبارات بالتوازي.
ستحتاج أيضًا إلى التأكد من تهيئة الوحدات الفرعية عن طريق تشغيل:
git submodule update --init
قم بتشغيل الاختبارات المستندة إلى Python من خلال الانتقال إلى دليل test
وتشغيل pytest -v
أو (مستحسن) pytest -n=auto
للاختبار المتوازي.
يمكنك أيضًا تشغيل python3
حيث
هو أي من الملفات التي تبدأ بـ test_
في مجلد test/
.