
مصادقة RP2040 FIDO2/WebAuthn تجريبية مع إثبات معبأ وتوافق موثق مع Windows/Entra
مشروع هندسي وتوافقي تجريبي مفتوح المصدر لمصادق RP2040 FIDO2/WebAuthn من Karaaslan Labs.
الحالة: مشروع هندسي/بحثي. غير معتمد من FIDO Alliance. ليس رمزًا أمنيًا تجاريًا عالي الضمان.
حدود الأدلة: تنتمي ملاحظات الأجهزة الحقيقية أدناه إلى الإصدار المجمّد v5.2. أما أعمال التقوية في v5.3 فهي خارج الجهاز فقط ولم يتم تثبيتها أو التحقق منها على المرجع الفيزيائي.
KL Security Key هو مشتق منسّق من polhenarejos/pico-fido. يستكشف إلى أي مدى يمكن دفع لوحة RP2040 منخفضة التكلفة لتكون مصادق WebAuthn فيزيائيًا مع إبقاء الهوية والإثبات وأدلة التحقق وحدود الثقة صريحة.
| المجال | المرجع الفيزيائي المجمّد v5.2 |
|---|---|
| العتاد | لوحة تطوير RP2040 USB |
| النقل | USB FIDO HID |
| إصدارات CTAP/GetInfo | FIDO_2_0، FIDO_2_1، FIDO_2_3 |
| حضور المستخدم / التحقق | زر فيزيائي + دعم PIN/UV |
| الإثبات | Packed ES256، x5c، شهادة خاصة بالجهاز |
| AAGUID | d9359dc7-6938-5822-b951-006507247d8f |
| التوافقية | Windows WebAuthn + تحقق Microsoft Entra المحلي للمستأجر |
| التوزيع | المصدر أولًا؛ لا يوجد إصدار ثنائي لبرنامج KL الثابت |
| العنصر الآمن | لا يوجد |
| الاعتماد | غير معتمد من FIDO Alliance |
يختار بناء مرجع المصدر في main الخيار -DPICO_BOARD=pico في scripts/build-kl-reference.sh، مستهدفًا إعداد لوحة Raspberry Pi Pico القياسية بذاكرة وميضية خارجية سعة 2 MiB. كما يختار باني v5.3 المعزول خارج الجهاز الخيار -DPICO_BOARD=pico؛ ويتحقق مدقق مخرجات UF2 الخاص به من نافذة عنوان الذاكرة الوميضية 2 MiB الخاصة بـ Pico. هذه قيود على مستوى المصدر/البناء، وليست تحققًا فيزيائيًا من كل لوحة RP2040.
قد تمتلك لوحات RP2040 الأخرى سعة ذاكرة وميضية أو إعدادات لوحة مختلفة. توثّق المسألة #278 في Pico FIDO الأصلية فشل أول عملية WebAuthn على لوحة ذات ذاكرة وميضية أكبر عندما لم يتطابق حد الذاكرة الوميضية المحدد وقت الترجمة في البرنامج الثابت مع تخطيطه وقت التشغيل. هذا الاكتشاف من المشروع الأصلي ليس فشلًا مُعاد إنتاجه في KL Security Key، لكنه يوضح لماذا لا يكفي تطابق شريحة RP2040 وحدها كدليل على التوافقية.
لا تفترض أن البرنامج الثابت المرجعي لـ KL يعمل على لوحات RP2040 عشوائية، أو أن تبرمج جهازًا بناءً على نجاح البناء أو صحة تأطير UF2 فقط. لا يُدّعى هنا أي توافقية مع لوحات بديلة، أو اختبار عتاد جديد، أو توزيع ثنائي للبرنامج الثابت. لم يتم تغيير المرجع الفيزيائي المجمّد v5.2.
بدأ المشروع بسؤال عملي: هل يمكن للوحة تطوير غير مكلفة أن تصبح مفتاحًا أمنيًا فيزيائيًا قابلًا للاستخدام لتسجيل الدخول الفعلي عبر WebAuthn، دون إخفاء التنازلات الهندسية؟
تبيّن أن العمل المثير للاهتمام لم يكن مجرد تشغيل FIDO2 على RP2040. كانت الأجزاء الأصعب هي هوية المصادق، وحضور المستخدم الفيزيائي، والإثبات، وسلوك Windows، وتغييرات المصدر القابلة لإعادة الإنتاج، والتوافقية مع الأطراف المعتمدة، ومعرفة ما تثبته الأدلة بالضبط — وما لا تثبته.
تم الحصول على النتائج في هذا القسم باستخدام جهاز v5.2 المحفوظ، ويجب عدم نسبتها إلى إصدارات مصدرية أو عمليات بناء برامج ثابتة تجريبية لاحقة. راجع docs/validation-evidence.md للاطلاع على SHA-256 الخاص بـ UF2 المجمّد وحدود الاختبار.
MicrosoftCtapHidProvider.U2fProtocol=false.نتيجة Entra هي نتيجة قابلية تشغيل متبادل، وليست شهادة من Microsoft أو اعترافًا عالميًا بالمصادقة. راجع docs/interoperability-case-study.md للاطلاع على الحدود الدقيقة.
يتم تتبع تقوية HID/APDU/OTP الحالية في Draft PR #7. وهي تشمل مسار تكامل SDK قائم على التصحيحات، واختبارات انحدار على جانب المضيف، وأدلة بناء ARM معزولة محليًا. هذه الفحوصات ليست اختبارًا على جهاز حي، ولا اختبار مطابقة FIDO كاملًا، ولا شهادة، ولا إصدارًا إنتاجيًا. يشغّل GitHub Actions اختبارات المضيف/المصدر وفحوصات النشر؛ وقد تم التحقق من عمليات بناء ARM الكاملة محليًا، وليس في GitHub Actions.
فرع main وبناؤه المرجعي لا يتضمنان تلقائيًا تصحيحات v5.3 غير المدمجة. للحصول على الأدلة التجريبية الحالية والعوائق المتبقية، استخدم PR #7 بدلًا من التعامل مع تجزئات UF2 التاريخية أو نجاحات الاختبارات الفردية على أنها أحدث حالة للعتاد. لا يتم تقديم أي ملف ثنائي للبرنامج الثابت من هذا العمل للتنزيل أو للوميض.
flowchart LR
RP["Relying party / Microsoft Entra"] --> WA["Browser + Windows WebAuthn"]
WA --> CTAP["CTAP2 over USB HID"]
CTAP --> KEY["KL Security Key<br/>RP2040"]
KEY --> AT["Packed ES256 attestation<br/>device-specific key + x5c"]
AT --> ROOT["KL Security Key Root CA"]
ملف التعريف المرجعي وقت التشغيل الذي تم التحقق منه ضيق عمدًا: FIDO HID هو واجهة مفتاح الأمان؛ واجهات وقت التشغيل غير ذات الصلة من نوع لوحة المفاتيح/CCID ليست جزءًا من ملف تعريف مرجع KL.
maingit clone --recurse-submodules https://github.com/karaaslanlabs/kl-security-key.git
cd kl-security-key
export PICO_SDK_PATH=/path/to/pico-sdk
export PICO_TOOLCHAIN_PATH=/path/to/arm-none-eabi-toolchain
./scripts/build-kl-reference.sh
بناء main يفعّل فرض الحضور الفيزيائي للمستخدم، وملف تعريف وقت التشغيل الخاص بـ FIDO فقط، ومسار الإثبات المعبأ؛ وهو ليس بناءً لتغييرات v5.3 غير المدمجة. يجب توفير مواد مفتاح/شهادة الإثبات الصالحة بشكل منفصل؛ لا يتم نشر مفاتيح الإثبات الخاصة أو توفيرها تلقائيًا بواسطة هذا المستودع. بناء ملف UF2 لا يصرّح بوميض جهاز.
هذا المستودع لا يدّعي:
اقرأ THREAT-MODEL.md قبل التعامل مع المرجع على أنه أي شيء يتجاوز كونه مصادقًا هندسيًا/بحثيًا.