Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
mlkem-native — تنفيذ آمن وسريع ومحمول بلغة C90 لخوارزمية ML-KEM / FIPS 203 | Kitploit
أدوات/GitHubGitHub/pq-code-package/mlkem-native
أمان الأنظمة المدمجةالتحليل الثابتالتشفيرأمن الأجهزة
GitHubpq-code-package/mlkem-native

mlkem-native

تنفيذ آمن وسريع ومحمول بلغة C90 لخوارزمية ML-KEM / FIPS 203

عرض المستودع
223659منذ يوم واحدتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
الموقع الإلكتروني

mlkem-native

CI Benchmarks C90

License: Apache License: ISC License: MIT

mlkem-native هو تنفيذ آمن وسريع وقابل للنقل بلغة C901 لمعيار ML-KEM2. وهو مشتق من التنفيذ المرجعي لـ ML-KEM3.

جميع أكواد C في mlkem/src/* و mlkem/src/fips202/* مُثبتة أنها آمنة من حيث الذاكرة (بدون تجاوز للذاكرة) وآمنة من حيث الأنواع (بدون تجاوز للأعداد الصحيحة) باستخدام CBMC4. جميع أكواد التجميع (assembly) لمعماريّتي AArch64 و x86_64 مُثبتة أنها صحيحة وظيفيًا، وآمنة من حيث الذاكرة، وذات توقيت مستقل عن الأسرار (ثابت الزمن)، باستخدام HOL-Light5.

يتضمن mlkem-native واجهات خلفية أصلية لمعمارية Arm (64-بت، Neon)، وIntel/AMD (64-بت، AVX2)، وRISC-V (64-بت، RVV)، وPOWER (ppc64le، VSX). راجع المعايير لبيانات الأداء.

mlkem-native مدعوم من تحالف التشفير ما بعد الكمي كجزء من مؤسسة Linux.

بدء سريع لـ Ubuntu

root@kitploit:~
# تثبيت الحزم الأساسية
sudo apt-get update
sudo apt-get install make gcc python3 git

# استنساخ mlkem-native
git clone https://github.com/pq-code-package/mlkem-native.git
cd mlkem-native

# البناء وتشغيل الاختبارات
make build
make test

# نفس الأمر باستخدام `tests`، وهو غلاف ملائم حول `make`
./scripts/tests all
# عرض جميع الخيارات
./scripts/tests --help

راجع BUILDING.md لمزيد من المعلومات.

التطبيقات

يُستخدم mlkem-native في

  • libOQS من مشروع Open Quantum Safe منذ 0.13.0 (كتنفيذ ML-KEM الافتراضي)
  • مكتبة التشفير الخاصة بـ AWS AWS-LC منذ v1.50.0
  • مكتبة TLS rustls المكتوبة بلغة Rust منذ 0.23.28 (عبر AWS-LC كمزوّد التشفير الافتراضي)
  • Pavona - مكتبة من الكتل السيليكونية المفتوحة المعيارية والمُثبتة على مستوى التصنيع والآمنة افتراضيًا

التحقق الرسمي

جميع أكواد C في mlkem/src/* و mlkem/src/fips202/* مُثبتة أنها آمنة من حيث الذاكرة (بدون تجاوز للذاكرة) وآمنة من حيث الأنواع (بدون تجاوز للأعداد الصحيحة). يستخدم هذا المُدقّق النموذجي المحدود C (CBMC) ويستند إلى عقود الدوال وتعليقات حلقات الثبات (loop invariants) في الكود المصدري. راجع proofs/cbmc للتفاصيل.

جميع أكواد التجميع لمعماريّتي AArch64 و x86_64 مُثبتة أنها صحيحة وظيفيًا، وآمنة من حيث الذاكرة، وذات توقيت مستقل عن الأسرار (ثابت الزمن)، على مستوى كود الكائن. يستخدم هذا مُثبِت النظريات التفاعلي HOL-Light والبنية التحتية للتحقق s2n-bignum (التي تتضمن نماذج للأجزاء ذات الصلة من معماريّتي Arm و x86). راجع proofs/hol_light للتفاصيل.

ملاحظة: التحقق الرسمي ليس مطلقًا أبدًا. راجع SOUNDNESS.md لتحليل مفصّل لنطاق وافتراضات ومخاطر جهود التحقق الرسمي حول mlkem-native.

الأمان

جميع أكواد التجميع لمعماريّتي AArch64 و x86_64 في mlkem-native مُثبتة رسميًا في HOL Light أنها خالية من تدفق التحكم المعتمد على الأسرار، وأنماط الوصول إلى الذاكرة، والتعليمات ذات زمن الاستجابة المتغير، مما يحبط معظم القنوات الجانبية الزمنية (راجع proofs/hol_light للتفاصيل). كود C مُحصّن ضد القنوات الجانبية الزمنية التي يُدخلها المترجم (مثل KyberSlash6 أو clangover7) من خلال حواجز مناسبة وأنماط ثابتة الزمن.

يتم أيضًا اختبار غياب الفروع المعتمدة على الأسرار، وأنماط الوصول إلى الذاكرة، والتعليمات ذات زمن الاستجابة المتغير باستخدام valgrind مع مجموعات مختلفة من المترجمين وخيارات الترجمة.

هجمات أخرى. يستهدف mlkem-native مقاومة القنوات الجانبية الزمنية فقط. فئات الهجمات الأخرى، مثل القنوات الجانبية للطاقة والكهرومغناطيسية، والقنوات الجانبية المعمارية الدقيقة (مثل التنفيذ التخميني)، أو هجمات حقن الأخطاء، خارج النطاق حاليًا.

التصميم

ينقسم mlkem-native إلى واجهة أمامية و_واجهتين خلفيتين_ للحساب و FIPS202 / SHA3. الواجهة الأمامية ثابتة، مكتوبة بلغة C، وتغطي جميع الإجراءات غير الحرجة للأداء. الواجهات الخلفية مرنة، وتتولى الإجراءات الحساسة للأداء، ويمكن تنفيذها بلغة C أو كود أصلي (تجميع/تعليمات داخلية)؛ راجع mlkem/src/native/api.h للواجهة الخلفية الحسابية و mlkem/src/fips202/native/api.h للواجهة الخلفية FIPS-202.

يوفّر mlkem-native حاليًا الواجهات الخلفية التالية:

  • الواجهة الخلفية الافتراضية المحمولة بلغة C
  • واجهة خلفية لمعمارية Arm 64-بت (باستخدام Neon)
  • واجهة خلفية لمعمارية Intel/AMD 64-بت (باستخدام AVX2)
  • واجهة خلفية لمعمارية RISC-V 64-بت (باستخدام RVV)
  • واجهة خلفية لمعمارية POWER 64-بت (ppc64le، باستخدام VSX؛ تدعم POWER8 وما فوق)
  • واجهة خلفية لمعمارية Armv8.1-M 32-بت (باستخدام Helium/MVE) -- راجع #1501. لا تزال هذه الواجهة تجريبية ومعطّلة افتراضيًا.

إذا كنت ترغب في المساهمة بواجهات خلفية جديدة، يرجى التواصل أو فتح طلب سحب (PR).

تم تطوير كود التجميع الخاص بنا لمعمارية AArch64 باستخدام المُحسِّن الفائق SLOTHY، باتباع النهج الموصوف في ورقة SLOTHY8: نكتب كود التجميع "النظيف" يدويًا ونؤتمت التحسينات الدقيقة (على سبيل المثال، راجع النظيف مقابل المُحسَّن لـ AArch64 NTT). راجع dev/README.md لمزيد من التفاصيل.

متجهات الاختبار

يتم اختبار mlkem-native ضد جميع متجهات اختبار ACVP الرسمية لـ ML-KEM9 ومتجهات اختبار Wycheproof10 لـ ML-KEM.

ACVP

يمكنك تشغيل اختبارات ACVP باستخدام سكربت tests أو عميل ACVP مباشرة:

root@kitploit:~
# باستخدام سكربت الاختبارات
./scripts/tests acvp
# باستخدام إصدار ACVP محدد
./scripts/tests acvp --version v1.1.0.41

# باستخدام عميل ACVP مباشرة
python3 ./test/acvp/acvp_client.py
python3 ./test/acvp/acvp_client.py --version v1.1.0.41

# باستخدام ملفات متجهات اختبار ACVP محددة (تم تنزيلها من خادم ACVP)
# python3 ./test/acvp/acvp_client.py -p {PROMPT}.json -e {EXPECTED_RESULT}.json
# على سبيل المثال، بافتراض أنك قمت بتشغيل ما سبق
python3 ./test/acvp/acvp_client.py \
  -p ./test/acvp/.acvp-data/v1.1.0.41/files/ML-KEM-keyGen-FIPS203/prompt.json \
  -e ./test/acvp/.acvp-data/v1.1.0.41/files/ML-KEM-keyGen-FIPS203/expectedResults.json

Wycheproof

يمكنك تشغيل اختبارات Wycheproof10 باستخدام سكربت tests أو عميل Wycheproof مباشرة:

root@kitploit:~
# باستخدام سكربت الاختبارات
./scripts/tests wycheproof

# باستخدام عميل Wycheproof مباشرة
python3 ./test/wycheproof/wycheproof_client.py

قياس الأداء

يمكنك قياس الأداء واستخدام الذاكرة وحجم الملف الثنائي باستخدام سكربت tests:

root@kitploit:~
# معايير السرعة (-c تحدد عداد الدورة: NO، PMU، PERF، أو MAC)
# ملاحظة: قد يتطلب PERF/MAC علامة -r لتشغيل ملفات قياس الأداء الثنائية باستخدام sudo
./scripts/tests bench -c PMU
./scripts/tests bench -c PERF -r

# تحليل استخدام المكدس
./scripts/tests stack

# قياس حجم الملف الثنائي
./scripts/tests size

لنتائج معايير CI وبيانات الأداء التاريخية، راجع صفحة قياس الأداء.

الاستخدام

إذا كنت تريد استخدام mlkem-native، فاستورد mlkem إلى شجرة المصدر لمشروعك وقم بالبناء باستخدام نظام البناء المفضل لديك. راجع mlkem لمزيد من المعلومات، و examples/basic للحصول على مثال بسيط. نظام البناء المقدم في هذا المستودع مخصص لأغراض التطوير فقط.

راجع API-CONVENTIONS.md للاتفاقيات المطبقة على جميع الدوال العامة، مثل قيم الإرجاع، وصحة المؤشرات، وحالة مخازن الإخراج عند الخطأ.

هل يمكنني استخدام FIPS-202 الخاص بي؟

يعتمد mlkem-native على تنفيذ FIPS-20211 ويأتي معه. إذا كانت مكتبتك تحتوي على تنفيذ FIPS-202 خاص بها، يمكنك استخدامه بدلاً من التنفيذ المرفق مع mlkem-native. راجع FIPS202.md، و examples/bring_your_own_fips202 للحصول على مثال يستخدم tiny_sha312.

هل أحتاج إلى استخدام واجهات التجميع الخلفية؟

لا. إذا كنت تريد بناء بلغة C فقط، فما عليك سوى حذف الدليلين mlkem/src/native و/أو mlkem/src/fips202/native من استيرادك وإلغاء تعيين MLK_CONFIG_USE_NATIVE_BACKEND_ARITH و/أو MLK_CONFIG_USE_NATIVE_BACKEND_FIPS202 في mlkem_native_config.h.

هل أحتاج إلى إعداد CBMC لاستخدام mlkem-native؟

لا. على الرغم من أننا نوصي بالنظر في استخدامه، فإن mlkem-native سيعمل بشكل جيد بدون CBMC -- فقط تأكد من تضمين cbmc.h وترك CBMC غير معرّف. على وجه الخصوص، لست بحاجة إلى إزالة جميع عقود الدوال وحلقات الثبات من الكود؛ سيتم تجاهلها ما لم يتم تعيين CBMC.

هل يدعم mlkem-native جميع مستويات الأمان في ML-KEM؟

نعم. مستوى الأمان هو معامل وقت الترجمة يتم تكوينه عن طريق تعيين MLK_CONFIG_PARAMETER_SET=512/768/1024 في mlkem_native_config.h. إذا كانت مكتبتك/تطبيقك يتطلب مستويات أمان متعددة، يمكنك بناء وربط ثلاث نسخ من mlkem-native مع مشاركة الكود المشترك؛ يُسمى هذا "بناء متعدد المستويات" وهو موضح في examples/multilevel_build. راجع أيضًا mlkem.

هل يمكنني استخدام واجهة خلفية خاصة بي؟

نعم، يمكنك إضافة واجهات خلفية إضافية للحساب الأصلي لـ ML-KEM و/أو لـ FIPS-202. اتبع الواجهات الخلفية الموجودة كنماذج أو راجع examples/custom_backend للحصول على مثال بسيط حول كيفية تسجيل واجهة خلفية مخصصة.

لديك سؤال؟

إذا كنت تعتقد أنك وجدت ثغرة أمنية في mlkem-native، يرجى الإبلاغ عن الثغرة من خلال الإبلاغ الخاص عن الثغرات في Github. يرجى عدم إنشاء مشكلة (issue) عامة على GitHub.

إذا كان لديك أي سؤال آخر / مشكلة غير متعلقة بالأمان / طلب ميزة، يرجى فتح مشكلة على GitHub.

المساهمة

إذا كنت تريد مساعدتنا في بناء mlkem-native، يرجى التواصل. يمكنك الاتصال بفريق mlkem-native عبر خادم PQCA على Discord. راجع أيضًا CONTRIBUTING.md.

Footnotes

  1. بالمعنى الدقيق، نعتمد على C90 + stdint.h + unsigned long long 64-بت. ↩

  2. المعهد الوطني للمعايير والتقنية: معيار FIPS 203 لآلية تغليف المفاتيح القائمة على الشبكات المعيارية، https://csrc.nist.gov/pubs/fips/203/final ↩

  3. Bos، Ducas، Kiltz، Lepoint، Lyubashevsky، Schanck، Schwabe، Seiler، Stehlé: التنفيذ المرجعي C لـ CRYSTALS-Kyber، https://github.com/pq-crystals/kyber/tree/main/ref ↩

  4. Diffblue، Amazon Web Services: المُدقّق النموذجي المحدود C، https://github.com/diffblue/cbmc ↩

  5. John Harrison: مُثبِت النظريات HOL-Light، https://hol-light.github.io/ ↩

  6. Bernstein، Bhargavan، Bhasin، Chattopadhyay، Chia، Kannwischer، Kiefer، Paiva، Ravi، Tamvada: KyberSlash: استغلال توقيتات القسمة المعتمدة على الأسرار في تطبيقات Kyber، https://kyberslash.cr.yp.to/papers.html ↩

  7. Antoon Purnal: clangover، https://github.com/antoonpurnal/clangover

تنزيل الأداة
↩
  • Abdulrahman، Becker، Kannwischer، Klein: سريع ونظيف: تجميع عالي الأداء قابل للتدقيق عبر حل القيود، https://eprint.iacr.org/2022/1303 ↩

  • المعهد الوطني للمعايير والتقنية: خادم بروتوكول التحقق من التشفير الآلي (ACVP)، https://github.com/usnistgov/ACVP-Server ↩

  • مشروع مواصفات التشفير المجتمعي: مشروع Wycheproof، https://github.com/C2SP/wycheproof ↩ ↩2

  • المعهد الوطني للمعايير والتقنية: معيار FIPS202 SHA-3: دوال التجزئة القائمة على التبديل ودوال الإخراج القابلة للتمديد، https://csrc.nist.gov/pubs/fips/202/final ↩

  • Markku-Juhani O. Saarinen: tiny_sha3، https://github.com/mjosaarinen/tiny_sha3 ↩