
إطار عمل تشفيري لـ Baochip-1x.

هذا المشروع مسجّل لدى شبكة الاختراع المفتوحة (OIN). OIN هي مجموعة براءات اختراع دفاعية: يرخّص الأعضاء براءات الاختراع المتعلقة بلينكس بشكل متبادل بحيث يمكن للمشاركين نشر واستخدام البرمجيات مفتوحة المصدر مع تقليل التعرض لبراءات الاختراع.
الحالة: بانتظار: https://github.com/betrusted-io/xous-core/pull/937
برنامج ثابت لأجهزة Baochip-1x (لوحة تقييم Dabao) التي تعمل بنواة
Xous الدقيقة، مبني
لـ riscv32imac-unknown-none-elf.
يقع هنا: https://www.baochip.com/
الجهاز هو رمز أمان عتادي في نفس فئة أجهزة فئة Nitrokey، مع سلوك بطاقة OpenPGP الذكية و خزنة مشفرة. مجموعة العتاد الكاملة — RTL، المخططات، محمّل الإقلاع، نظام التشغيل — مفتوحة المصدر وقابلة للتدقيق.
مواصفات العتاد، نموذج الإقلاع، جداول المتطلبات، واستخدام ComboHash/PKE موثقة في Supermagnum/Baochip-1x-firmware. لوحة تقييم Dabao (KiCad، المخططات، المفاتيح، توزيع المنافذ) هي baochip/dabao. للدخول إلى وضع محمّل الإقلاع للوميض، اضغط SW2 لتبديله (انظر مخطط ذلك المستودع). ملاحظات البنية لهذا المستودع: docs/ARCHITECTURE.md.
أداة المضيف Galdra تحتفظ بدليل SQLite محلي للمستلمين (جهات الاتصال). كل هوية مخزنة تتضمن مادة المفتاح العام بالإضافة إلى تسميات جانبية اختيارية (انظر الجدول أدناه). هذه الوسوم تعيش في قاعدة بيانات المضيف، وبالنسبة لمفاتيح Galdra، في مخزن جهات الاتصال على الشريحة (crates/contact-store). وهي ليست مرتبطة سحرياً بمعرّفات مستخدمي OpenPGP ما لم تقم بمحاذاتها بنفسك، وليست مؤكدة تشفيرياً ما لم تتحقق منها خارج النطاق. يمكن لـ galdra keyserver push الاختياري إرسال حقول متداخلة إلى سجل المشروع بصيغة JSON بجانب المفتاح العام المُصدَّر. مصدر كل حقل على الرمز يستخدم SelfAttested، HostVerified، RegistrySync، و OobVerified (انظر مقارنة البيانات الوصفية (GnuPG مقابل Galdra) وتخطيط مخزن جهات الاتصال في docs/RRAM_LAYOUT.md).
تفاصيل جانب المضيف وسلوك CLI: docs/GALDRA-TOOL.md. تخطيط السلك وأعداد الفتحات: crates/contact-store/src/layout.rs و docs/RRAM_LAYOUT.md.
هذا البرنامج الثابت هو رمز أمان عتادي لـ Baochip-1x: تطبيق بطاقة OpenPGP عبر USB CCID، مع خزنة على الجهاز، وسياسة PIN، وميزات خاصة بالمستودع (ملفات تعريف التشفير — يمكنك تكديس حتى أربعة تشفيرات متماثلة مختلفة في سلسلة واحدة، لكل منها مفتاح مشتق خاص بها؛ انظر القدرات الرئيسية)، وتدفقات متعلقة بـ Shamir، وتبادل ECDH مؤقت موثّق حيثما تم تنفيذه، وأدوات مضيف Galdra). هدف التوافق الأساسي هو استخدام بطاقة OpenPGP بنمط GnuPG، وليس كل بروتوكول رمز في السوق.
هذا البرنامج الثابت ليس:
الاستثناءات على مستوى الحزم المتوافقة مع نفس القيود مدرجة تحت الحزم المستثناة صراحةً في docs/future-todo.md.
CESS: هذا البرنامج الثابت متوافق مع CESS للإنشاءات المعيارية المنفذة داخل الشجرة (بما في ذلك الوضع A لـ AEAD الخارجي، وHKDF-BLAKE3 لـ K_outer، وتقسيم Shamir بايت-ببايت في GF(2^8)). بيان المحاذاة الكامل، وسجل الانحرافات، ومستوى الاعتماد (على سبيل المثال CESS-CORE للطبقة الثابتة الكاملة) موثقة في docs/CESS_CONFORMANCE.md و CESS (معيار مفتوح ذو صلة) أدناه.
منطق تطبيق OpenPGP / CCID موجود في crates/usb-personality. على Xous، خدمة USB التي تعرض CCID هي usb-bao1x (في نسختك من xous-core)، مبنية بميزة ccid-openpgp، باستخدام crates/baochip-openpgp لنافذة OpenPGP RRAM والتجهيز. التخطيط: docs/RRAM_LAYOUT.md. فجوات ما قبل الإنتاج (تجربة مستخدم PIN المشغّل، اعتماد خريطة المنصة): القيود المعروفة / العمل المفتوح.
الهدف العام يبقى برنامجاً ثابتاً كاملاً ومختبراً ومفتوح المصدر لرمز أمان عتادي: سلوك بنمط بطاقة OpenPGP لـ GnuPG عبر CCID (انظر توافق OpenPGP و GnuPG)، بالإضافة إلى ميزات إضافية على الجهاز غير محددة حالياً بمعيار بطاقة OpenPGP — ECDH مؤقت مع سرية أمامية، Shamir K-of-N، ملفات تعريف مستقلة عن التشفير، وحدة تخزين خادعة microSD — كما هو ملخص في المعايير مقابل ميزات البرنامج الثابت الخاصة. كل ذلك على RTL مفتوح مع محمّل إقلاع قابل لإعادة الإنتاج.
للنشر الذي يتطلب رمزين عتاديين منفصلين (أو حاملي أسهم K-of-N) قبل فتح الخوادم أو جدران الحماية أو خزائن الأدوية أو وحدات التخزين المشفرة، انظر نصاب مفتاحي الأجهزة المزدوج (نمط المدمج) تحت القدرات الرئيسية. كل جهاز هو مصدر بيانات اعتماد واحد؛ فرض النصاب هو بوابة الوصول الخاصة بك، أو طبقة PAM، أو اللوحة — وليس هذا البرنامج الثابت.
البرنامج الثابت القابل للشحن لـ Baochip-1x موقّع بـ Ed25519. توقّع صورة البرنامج الثابت بمفتاح Ed25519 خاص؛ يمكن لـ GnuPG القيام بذلك باستخدام gpg --sign مع مفتاح فرعي للتوقيع Ed25519 (سير عمل التوقيع المنفصل المعتاد لـ OpenPGP، مُكيَّف مع أي تغليف يولّده بناؤك). ذاكرة boot0 للقراءة فقط غير القابلة للتغيير في SoC تتحقق من ذلك التوقيع مقابل المفاتيح العامة المقابلة المحروقة في الجهاز (وقائمة المفاتيح الأوسع لسلسلة الإقلاع) قبل السماح للمرحلة التالية — boot1 — بالتشغيل. ثم يقوم boot1 بتحميل صور التطبيقات الموقعة (على سبيل المثال كتل UF2 المُسلَّمة عبر تخزين USB الشامل في وضع محمّل الإقلاع). الأجزاء الافتراضية تحمل أربعة مفاتيح Ed25519 عامة على الشريحة (أدوار مثل نشر الكود، بيتا، والمطور)؛ boot0 / boot1 يفرضان سياسة عدم ثقة متبادلة بين مفاتيح توقيع Baochip والأطراف الثالثة. تدفق الإقلاع الكامل، وتسليم UF2، والوحدة الطرفية، وتحديثات boot1، ونموذج الأمان: البدء مع أهداف Baochip في xous-core.
ليس كل اختبار يعمل في كل أمر؛ هذا مقصود.
xtask ليس في اختبار مساحة العمل الافتراضي: الوصفة الشائعة هي cargo test --workspace --exclude xtask لأن xtask حزمة تنسيق بناء. شغّل cargo test -p xtask عندما تريد اختباراتها.#[ignore]: تُتخطى ما لم تمرر --ignored (وأي فلاتر حزم مطلوبة). الأسباب تشمل: تغطية مُمارَسَة بالفعل في اختبارات وحدة مركزة (مثل التصفير بعد الإسقاط)، وحالات بطيئة (مثل توليد مفاتيح RSA)، وتدفقات تعتمد على العتاد أو الرمز في أدوات المضيف مثل galdra التي تتطلب جهازاً متصلاً أو تركيبات.test-all --no-fuzz: يتخطى خطوة cargo-fuzz لإبقاء CI أو التشغيلات السريعة قصيرة ولتجنب الحاجة إلى سلسلة أدوات ليلية لتلك الخطوة؛ شغّل cargo run -p xtask -- test-all بدون --no-fuzz، أو استدعِ أهداف fuzz بشكل منفصل (انظر fuzz/README.md).يمكن للمرء أيضاً التحقق من سلامة الحزم بهذا عندما يُغلق طلب السحب: https://github.com/rust-lang/cargo/issues/16850
الحالة: جاهز للاختبار من قبل البشر، على عتاد حقيقي — لا يوجد إصدار جاهز للإنتاج. مكتوب بلغة Rust باستخدام حزم تشفير مُتحقق منها ومدققة. البدائيات التشفيرية مستمدة حصرياً من تبعيات مساحة العمل المدققة. خوارزميات ما بعد الكم مقيدة بميزات وموسومة بانتظار تدقيق مستقل. انظر حالة ما بعد الكم.
ملاحظة: أجزاء من هذا المشروع طُوّرت بمساعدة الذكاء الاصطناعي (Claude، Anthropic). التصميم والخيارات التشفيرية وقرارات الأمان لم تُراجع من قبل خبير تشفير محترف. تعامل مع هذا كمشروع تجريبي وطبّق حكمك النقدي الخاص. مراجعة خبراء مستقلة موصى بها بشدة قبل أي نشر إنتاجي.
إنه جاهز للاختبار من قبل البشر. أنت تقرر ما إذا كنت ستبني أو تشغّل أي من هذا البرنامج؛ قد تكون هناك أخطاء لم تجدها اختبارات الوحدات والـ fuzzing والفحوصات الأخرى. استخدام جهاز افتراضي اختياري للتجريب يقلل المخاطر على نظام مضيفك لكنه لا يلغيها. النتائج التفصيلية في نتائج الاختبار (docs/TEST_RESULTS.md#run-metadata). تعريفات بلغة بسيطة (أ–ي) للمصطلحات التقنية: المسرد.
المطور الأساسي لديه حالة عصبية مرتبطة بعسر الحساب. يؤثر عسر الحساب على الإحساس بالأرقام والمعالجة الرمزية ذات الصلة بطرق تجعل، بالنسبة له، البرمجة التقليدية — تحرير الكود المكتوب يدوياً كسير عمل وحيد — غير قابلة للعمل بدون أدوات مساعدة (على سبيل المثال محررات الذكاء الاصطناعي الحوارية). هذا القيد منفصل عن الصحة: يجب على المراجعين مع ذلك وزن الاختبارات والـ fuzzing والتدقيق المستقل كما هو موثق في مكان آخر في هذه الصفحة.
خبير تشفير أو منفّذ جاد يراجع Galdralag سيفتح عادةً crates/vault/tests/ و crates/cipher-profile/tests/ قبل قراءة النثر. مجموعة الاختبارات هي دليل العمل: إنها ترمّز معرفة مجال لا يمكن استبدالها بالسرد وحده.
هذا ليس سبباً لإخفاء النقطة عن الجميع. الأشخاص الذين يقيّمون المشروع للشراء، أو يقررون المساهمة، أو يشحنون كوداً دون تدريب عميق في منهجية اختبار التشفير ما زالوا يستحقون مؤشراً إلى الأدلة الملموسة.ما الذي يجب النظر إليه: تتضمن مواد المطابقة أمثلة عملية من RFC 8439 لـ ChaCha20-Poly1305 تحت crates/vault/tests/rfc_vectors/، وملفات Wycheproof JSON المورّدة لـ ChaCha20-Poly1305 وحالات حافة Brainpool ECDH/ECDSA تحت crates/vault/tests/data/wycheproof/، ومتجهات BSI TR-03111 لـ BrainpoolP256r1 و P384r1 تحت crates/vault/tests/bsi_vectors/، ومتجهات BLAKE3 المرجعية الرسمية (جميع أطوال الإدخال الـ 35، جميع الأوضاع الثلاثة) تحت crates/vault/tests/blake3_vectors.json، ومتجهات مواصفات Twofish (1203 حالة بما في ذلك Monte Carlo) تحت crates/vault/tests/twofish_vectors.json، وملف KAT الخاص بمشروع CESS cascade مع القيم الوسيطة المُتحقق منها بشكل مستقل تحت crates/cipher-profile/tests/fixtures/cascade_cess_kat.json. معًا، تشكل هذه المواد الحقيقة الأساسية التي يمكن للمشغّل والمراجعين اختبارها باستخدام cargo test --workspace و python3 scripts/verify_cascade_kats.py.
RFC 8439 منشور من قبل فريق عمل هندسة الإنترنت (IETF)، المنظمة التي توحّد الكثير من كيفية تفاعل الإنترنت. تُعد RFCs (طلبات التعليقات) الشكل المعتاد لمواصفات البروتوكولات والعديد من المواصفات التشفيرية. يحدد RFC 8439 التشفير المصادق عليه ChaCha20-Poly1305 (بناءً على تصاميم دانيال بيرنشتاين) ويتضمن أمثلة عملية ملموسة بمدخلات ومخرجات متوقعة محددة حتى تتمكن التطبيقات المستقلة من التحقق من مطابقتها للمعيار بايتًا ببايت. النص العادي المعاد إنتاجه على نطاق واسع والذي يبدأ بـ Ladies and Gentlemen of the class of '99: wear sunscreen يظهر في أمثلة ملحق RFC: إذا أعاد كودك إنتاج مخرجات AEAD بالضبط، فلديك فحص قوي على أنك نفذت البناء بشكل صحيح. إنه المعادل التشفيري لمفتاح الإجابة الرسمي. ChaCha20-Poly1305 هو الطبقة الداخلية لكل ملف تعريف cascade متعدد الطبقات في هذا البرنامج الثابت، لذا يقع هذا الفحص في أساس حزمة التشفير بأكملها.
Wycheproof هو مجموعة اختبارات أصدرها فريق الأمان في Google (2017). يشير الاسم إلى جبل Wycheproof في أستراليا — الذي يُستشهد به غالبًا كأصغر جبل في العالم — لأن المشروع يركز على إزالة العوائق الصغيرة ولكن القاتلة: تجاوزات الأعداد الصحيحة، الحالات الحدودية، المدخلات المشوهة، وعلامات المصادقة العبث بها؛ الإخفاقات التي تظهر مرارًا وتكرارًا في التشفير المنشور فعليًا. إنه يكمل متجهات نمط RFC: أمثلة نمط RFC 8439 تُظهر الصحة مقابل AEAD المنشور؛ بينما يختبر Wycheproof المتانة حيث تنكسر التطبيقات تاريخيًا. في هذا المستودع، تغطي ملفات Wycheproof JSON ChaCha20-Poly1305 و AES-GCM و HMAC و HKDF و X25519 و Ed25519 و RSA ومتغيرات Brainpool ECDH/ECDSA.
BSI TR-03111 هو الدليل الفني لتشفير المنحنيات الإهليلجية المنشور من قبل المكتب الاتحادي الألماني لأمن المعلومات (Bundesamt für Sicherheit in der Informationstechnik). الإصدار 2.10 هو المراجعة الحالية. منحنيات Brainpool المستخدمة في هذا البرنامج الثابت — P256r1 و P384r1 — محددة في معايير BSI، مما يجعل TR-03111 المرجع الطبيعي لمتجهات اختبارها. لكل منحنى تغطية ECDH و ECDSA؛ تم أيضًا التحقق المتبادل من توقيعات ECDSA مقابل تطبيق Python مستقل يستخدم مكتبة cryptography.
متجهات BLAKE3 المرجعية هي مجموعة الاختبارات الرسمية المنشورة جنبًا إلى جنب مع مواصفات BLAKE3 من قبل مؤلفيها. تغطي 35 طول إدخال من 0 إلى 102400 بايت، مختارة خصيصًا لاختبار جميع الشروط الحدودية الداخلية للتجزئة الشجرية والكتل التي تكون غير مرئية لاختبارات الإدخال القصير. جميع أوضاع BLAKE3 الثلاثة — التجزئة الافتراضية، التجزئة المفتاحية، واشتقاق المفتاح — مغطاة. يُستخدم BLAKE3 في جميع أنحاء هذا البرنامج الثابت لاشتقاق مفاتيح HKDF وفحوصات السلامة بين الطبقات في ملفات تعريف cascade؛ تغطية الحدود مهمة لأن البناء الشجري لـ BLAKE3 لا يُفعَّل إلا فوق 1024 بايت.
مجموعة الاختبارات هي أيضًا كشف عبث لسلسلة التوريد. جميع البدائيات التشفيرية في هذا البرنامج الثابت تأتي من صناديق RustCrypto المدققة — لا يتم تنفيذ أي تشفير داخل الشجرة. نظرًا لأن متجهات المطابقة أعلاه تُشغَّل ضد تلك الصناديق في كل cargo test --workspace، فإن أي تبعية تم العبث بها أو استبدالها ستنتج فشل اختبار الإجابة المعروفة قبل وصول الكود المخترق إلى نظام منشور. يضيف python3 scripts/verify_cascade_kats.py مسارًا مستقلًا ثانيًا: تنفيذ Python يتحقق من نفس القيم الوسيطة في ملف KAT الخاص بـ cascade، بحيث حتى سلسلة أدوات Rust المخترقة التي تنتج مخرجات خاطئة يتم اكتشافها بواسطة الفحص المتبادل. هذه قصة سلامة سلسلة توريد أقوى بشكل ملحوظ من الربط بمكتبة C، حيث يتطلب التحقق المكافئ من كل عملية داخلية جهدًا أكبر بكثير وأدوات متخصصة.
الأمر الآن متروك للقارئ للحكم على ما إذا كانت هذه الادعاءات خاطئة أم لا.
تقوم بتوصيله بمنفذ USB. من منظور المضيف، يمكن للبرنامج الثابت تقديم وضع التشفير أو وضع التمويه. في وضع التشفير، يرى جهاز الكمبيوتر الخاص بك بطاقة ذكية: تستخدم GnuPG أو حزمة OpenPGP متوافقة (ما هو GnuPG؟) بنفس الطريقة التي تستخدم بها أي رمز أمان أجهزة آخر — يتولى الرمز العمليات التشفيرية الحساسة بحيث لا توجد مفاتيحك الخاصة أبدًا غير محمية على جهاز الكمبيوتر الخاص بك. في وضع التمويه، يمكنه التعداد كتخزين قابل للإزالة عادي مع ملفات غير ضارة المظهر بحيث لا يكشف النظر السريع عن دوره الحقيقي؛ انظر تمويه التخزين أدناه.
GnuPG تعني GNU Privacy Guard. إنه تنفيذ مشروع GNU لـ OpenPGP، المعيار المفتوح لإدارة المفاتيح والرسائل المحمية تشفيريًا (نفس العائلة المفاهيمية مثل PGP، ولكنها محددة في وثائق مثل RFC 4880 والتحديثات المجتمعية). عادةً ما تشغّله كأمر gpg على Linux أو BSD أو macOS أو Windows؛ العديد من أدوات البريد والرسوم البيانية للمفاتيح تلتف حوله تحته.
يستخدم الناس GnuPG من أجل:
gpg-agent مفاتيح المصادقة من بطاقة ذكية أو مخزن مفاتيح محلي.GnuPG والأقراص المشفرة (LUKS). يحتوي Linux على طريقة مدمجة لتشفير قرص أو قسم كامل، تسمى LUKS. بمجرد تشفير القرص، يبدو كضوضاء بلا معنى لأي شخص بدون المفتاح، لذا فإن الكمبيوتر المحمول المفقود أو المسروق لا يسلم ملفاتك.
عادةً ما تفتح مثل هذا القرص بكتابة كلمة مرور. يتيح لك GnuPG استخدام رمزك بدلاً من ذلك. الفكرة بسيطة: مفتاح فتح القرص نفسه مقفل بمفتاح رمزك. عندما تريد فتح القرص، يفك الرمز تشفير مفتاح الفتح لك، ولكن فقط بينما يكون الرمز موصولًا وأدخلت PIN الخاص بك. اسحب الرمز للخارج، ولا يمكن فتح القرص على الإطلاق، حتى على نفس الكمبيوتر.
باختصار، يحول هذا الرمز إلى مفتاح مادي لقرصك المشفر. إعداده (وإضافة طريقة احتياطية للدخول، في حالة فقدان الرمز يومًا ما) يتم باستخدام أدوات الأقراص الخاصة بـ Linux؛ الرمز ببساطة يحمل المفتاح. إذا كنت تفضل مشاركة القدرة على فتح قرص بين عدة أشخاص، بحيث لا يمكن لأي شخص واحد القيام بذلك بمفرده، انظر مشاركة السر Shamir وتشفير القرص.
بشكل افتراضي، يخزن GnuPG المفاتيح تحت ~/.gnupg. مع بطاقة OpenPGP الذكية، تعيش المفاتيح الخاصة الحساسة على البطاقة؛ scdaemon (جزء من مجموعة GnuPG) يتحدث CCID/USB إلى البطاقة بينما gpg لا يزال يجمع حزم OpenPGP على المضيف.
ما يمكنك استخدامه من أجله. في وضع التشفير، الرمز مخصص لنفس العمل مثل بطاقات OpenPGP الذكية الأخرى: توقيع وفك تشفير البريد والملفات، المصادقة (على سبيل المثال SSH عند استخدام gpg-agent كالمعتاد)، والاحتفاظ بـ المفاتيح الخاصة طويلة الأجل بعيدًا عن الجهاز الذي تكتب عليه. يمكن للمؤسسات دمج ذلك مع مشاركات Shamir على الرمز بحيث لا يحمل أي شخص واحد السر بأكمله (موصوف أدناه). GnuPG هو هدف التشغيل البيني الأساسي على المضيف: ينفذ هذا البرنامج الثابت تطبيق بطاقة OpenPGP عبر CCID، الذي يقوده scdaemon (gpg --card-status، gpg --card-edit، والتشفير/التوقيع/فك التشفير العادي مع المفاتيح على البطاقة). قد تعمل البرامج الأخرى التي تتحدث نفس بروتوكولات البطاقات الذكية أيضًا؛ الأوامر والفتحات والخوارزميات وحدود التكامل الحالية موجودة في توافق OpenPGP و GnuPG. عندما يتم تشغيل NFC على الأجهزة (تكامل مخطط — ليس في البرنامج الثابت بعد)، يمكن لنفس فئة الأجهزة دعم الوصول المادي: النقر على قارئ NFC عند باب أو بوابة أو لوحة قفل يمكن أن يشارك في سياسة لا تحرر القفل إلا بعد فحوصات تشفيرية (غالبًا ما تُدمج مع PIN أو القياسات الحيوية أو نصاب نمط Shamir اعتمادًا على النشر). المخطط الموجّه نحو PN532 للقراء واللوحات موجود في docs/NFC_PN532_INTEGRATION.md.
هذه هي النسخة المختصرة. إليك ما يجعله مختلفًا عن الرموز الأخرى التي قد تكون واجهتها.
تمويه التخزين. يمكن للجهاز أن يعمل كتخزين قابل للإزالة عادي بحيث لا يكون دوره الحقيقي واضحًا من نظرة سريعة. عند توصيله بكمبيوتر نموذجي، يمكن أن يظهر كقرص USB عادي أو وحدة تخزين مدعومة بـ SD؛ يمكنك ملء نظام الملفات المرئي بملفات يومية معقولة (على سبيل المثال صور إجازة) بحيث يعزز التصفح العادي الانطباع بأنه مجرد تخزين. هذا يحبط الفحص السطحي على مكتب أو نقطة تفتيش. معرفة أنه في الواقع رمز أمان عادةً ما يعني تفكيك الهيكل، وليس مجرد توصيله.
مفاتيحك تبقى على الجهاز. عندما توقع بريدًا إلكترونيًا أو تفك تشفير ملف، لا يغادر المفتاح الخاص الرمز أبدًا. يرسل الكمبيوتر البيانات، يقوم الرمز بالعمل، وتعود النتيجة. المهاجم الذي يخترق جهاز الكمبيوتر الخاص بك لا يحصل على أي شيء مفيد.
الجلسات السابقة تبقى آمنة حتى لو سُرق الرمز. تستخدم معظم رموز الأجهزة مفتاحًا خاصًا طويل الأجل مباشرة لاتفاق المفتاح. هذا الرمز يولّد زوج مفاتيح جديدًا قابلًا للرمي لكل جلسة، يوقعه بالمفتاح طويل الأجل لإثبات أنه حقيقي، ثم يستخدم الزوج القابل للرمي للتبادل الفعلي. إذا سرق شخص ما الرمز بعد سنوات واستخرج بطريقة ما المفتاح طويل الأجل، فلا يزال لا يمكنه فك تشفير أي شيء من الجلسات السابقة. تسمى هذه الخاصية السرية الأمامية، وهي غير معتادة في رموز الأجهزة.
يمكنك تقسيم المفتاح بين عدة أشخاص. يمكن للرمز تقسيم المفتاح طويل الأجل إلى N مشاركة بحيث تكون أي K من تلك المشاركات مطلوبة لإعادة بنائه — ولكن لا يمكن لأي حامل مشاركة واحد فعل أي شيء بمفرده. يسمى هذا مشاركة السر Shamir. إنه مفيد للمفاتيح التنظيمية حيث لا ينبغي أن يكون لأي شخص واحد وصول أحادي الجانب، أو كاستراتيجية نسخ احتياطي حيث تُخزن المشاركات في مواقع منفصلة. هذا أيضًا غير معتاد في رموز الأجهزة.
التشفير متعدد الطبقات. بدلاً من تشفير بياناتك بتشفير واحد، يمكن للرمز تشغيلها عبر تشفيرات مستقلة متعددة بالتسلسل — على سبيل المثال ChaCha20، ثم Serpent، ثم Twofish — كل منها يستخدم مفتاحًا مشتقًا بشكل منفصل. اختراق مستقبلي يكسر تشفيرًا واحدًا لا يكسر الآخرين. يُسمى المزيج المحدد ملف تعريف تشفير، ويمكنك الاختيار من بين عدة ملفات مدمجة اعتمادًا على مقدار الحذر الذي يتطلبه موقفك.
توصيتي الشخصية هي BrainpoolP256r1 + ChaCha20-Poly1305 + BLAKE3. هذا هو ملف standard المدمج. يستخدم منحنى BSI Brainpool P-256 لاتفاق المفتاح المؤقت، و ChaCha20-Poly1305 للتشفير المتماثل، و BLAKE3 لاشتقاق المفتاح وسلامة الطبقات البينية. إنه سريع ومختبر جيدًا وصديق للبطارية (صُمم ChaCha20-Poly1305 ليكون فعالًا على الأجهزة دون تسريع AES، مما يقلل وقت وحدة المعالجة المركزية واستهلاك طاقة المضيف؛ P-256 هو الأصغر بين منحنيات Brainpool الثلاثة في هذا البرنامج الثابت)، ولا يعتمد على أي بدائية صممتها NIST. إذا كنت بحاجة إلى هامش أعلى ضد كسر تحليلي تشفيري مستقبلي لتشفير واحد، يضيف ملف conservative طبقة Serpent-256 فوقه.
اختيارات الخوارزميات متعمدة. التشفيرات المستخدمة — ChaCha20-Poly1305 و Serpent و Twofish و Camellia — صُممت جميعها بشكل مستقل عن هيئات معايير الحكومة. AES ومجموعة NIST مستبعدة عمدًا. هذا خيار واعٍ للمستخدمين والمؤسسات الذين يريدون استقلالًا تشفيريًا عن عملية معايير أي دولة واحدة. تم تقييم Camellia بشكل مستقل من قبل مشروع NESSIE التابع للاتحاد الأوروبي وبرنامج CRYPTREC الياباني، وهو محدد في RFC 3713 و ISO/IEC 18033-3.
PIN خاطئ يقفلك بشكل صحيح. يحسب الرمز محاولات PIN الفاشلة قبل أن يتحقق مما إذا كان PIN صحيحًا، وليس بعده. هذا يعني أن تعطلًا أو فقدان طاقة في منتصف المحاولة لا يمكن استغلاله لإعادة تعيين العداد. بعد عدد كبير جدًا من المحاولات الخاطئة، يصفّر الرمز المواد الحساسة.
ما لا يفعله بعد. لا يوجد أجهزة متاحة بعد — هذا برنامج ثابت قيد التطوير النشط. الاختبار من طرف إلى طرف مع أجهزة USB حقيقية و GnuPG هو معلم مستقبلي. نقل NFC و قارئات الوصول بنمط الأبواب موصوفان في الوثائق كـ أهداف تكامل، وليس سلوكًا منشورًا بعد. العامل الثالث البيومتري الموصوف في الوثائق غير منفذ بعد. بعض اختبارات القنوات الجانبية الزمنية التي تتطلب أجهزة حقيقية لا يمكن إكمالها حتى يوجد جهاز.
يمكن لـ Galdralag العمل مع نوعين مختلفين من المفاتيح غير المتماثلة في وقت واحد. يجيبان على أسئلة مختلفة على الجهاز وعلى المضيف، وهما غير قابلين للتبادل حتى عندما ينتميان إلى نفس الشخص. تصف الأقسام توافق OpenPGP و GnuPG، شبكة الثقة وحفلات توقيع المفاتيح، بيانات اتصال Galdra، و مقارنة البيانات الوصفية (GnuPG مقابل Galdra) كل حزمة بمزيد من التفصيل؛ إليك كيف يختلفان بمصطلحات يومية.
مفتاح OpenPGP، بمعنى أن GnuPG يولده ويستخدمه، هو حزمة منظمة، وليس رقمًا عامًا مجردًا. يجمع المفتاح الأساسي والمفاتيح الفرعية للتوقيع والتشفير وواحدًا أو أكثر من معرفات المستخدم — عادةً اسم عرض وعنوان بريد إلكتروني مثل Alice Example <[email protected]>. يمكن لأشخاص آخرين توقيع معرفات المستخدم هذه ليقولوا إنهم يعتقدون أن ادعاء الهوية حقيقي؛ تلك الشبكة الاجتماعية هي أساس شبكة الثقة الموصوفة في شبكة الثقة وحفلات توقيع المفاتيح لاحقًا في هذا README. عندما يعمل Galdralag كبطاقة OpenPGP ذكية، يحمل مادة المفتاح الخاص على الشريحة ويؤدي التوقيع وفك التشفير هناك. المفتاح العام ومعرفات المستخدم والتوقيعات من الآخرين تعيش على المضيف وتُدار بواسطة GnuPG بالطريقة المعتادة. لا يغير الرمز تنسيق رسالة OpenPGP على الشبكة؛ يعامله GnuPG مثل أي بطاقة OpenPGP أخرى.
مفتاح Galdra هو زوج مفاتيح غير متماثل مجرد — Ed25519 أو X25519 أو أحد منحنيات Brainpool أو NIST التي يدعمها البرنامج الثابت. بايتات المفتاح نفسها لا تحمل أي ادعاءات هوية: لا حزم معرف مستخدم، لا بريد إلكتروني مدمج، لا توقيعات شبكة ثقة مرتبطة ببنية المفتاح. تأتي الهوية لمفتاح Galdra من سجل الاتصال المخزن بجانبه في قاعدة بيانات SQLite على المضيف و مخزن الاتصالات على الشريحة، المرتبط بالمفتاح ببصمته.
يقارن الجدول أدناه بيانات الهوية والاتصال الوصفية حقلًا بحقل. تصف أعمدة OpenPGP / GnuPG ما تحصل عليه من شهادة عادية ومعرف مستخدم (بالإضافة إلى صفوف اتصال اختيارية على جانب المضيف في Galdra عند تخزين مفتاح OpenPGP عام في نفس الدليل). تصف أعمدة مفتاح Galdra حقولًا جانبية منظمة لجهات الاتصال التشغيلية (تفاصيل كاملة على المضيف وعلى الشريحة في بيانات اتصال Galdra). الشرطة تعني أن تلك الحزمة لا تحتوي على حقل قياسي منفصل لهذا العنصر.
يضع OpenPGP الاسم والبريد الإلكتروني في سلسلة معرف مستخدم واحدة؛ لا يمنحك حقولًا منفصلة قابلة للقراءة آليًا لإشارات النداء أو DMR أو البريد. Galdra يحتفظ بها كأعمدة مسماة بحيث يمكن لفرق الراديو والعمليات البحث عنها وعرضها دون تحليل نص الشهادة.
قد تستمر الرموز المحدثة من برنامج ثابت قدم BrainpoolP512r1 في إرجاع سمات P-512 على GET DATA؛ عمليات GnuPG على تلك الفتحات تفشل بعد ذلك بأخطاء بطاقة عامة. شغّل galdra device status (أو انظر docs/OPENPGP_CARD.md) لتحديد الفتحات القديمة؛ خلفية الإزالة في CHANGELOG.md.
| PW1 / PW3 | لا يُخزن أبدًا | مُتحقق على الشريحة (حد أدنى 5 أحرف، 3 محاولات افتراضيًا) |
| DOs لحامل البطاقة (تسجيل الدخول، اللغة، URL، …) | مخزنة مؤقتًا بواسطة GnuPG | اختيارية (254 بايت كحد أقصى لكل DO) |
تطبيق البطاقة 3.4.1 و CCID وسير عمل GnuPG: docs/OPENPGP_CARD.md و توافق OpenPGP و GnuPG.الانقسام موجود لأن معلومات الهوية التي تهم المجتمعات التي يستهدفها Galdralag — معرف النداء، معرّف DMR، الانتماء لشبكة الراديو — ليس لها مكان طبيعي في معرّف مستخدم OpenPGP. معرّف المستخدم مخصص للاسم والبريد الإلكتروني. كتابة شيء مثل LA5XYZ <[email protected]> DMR:2345678 في سلسلة معرّف المستخدم هو أمر غير رسمي وغير منظم وغير قابل للقراءة آليًا بأي طريقة قياسية. مفاتيح Galdra تُبقي المادة التشفيرية نظيفة وتضع الهوية التشغيلية في تنسيق سجل تفهمه الأداة المضيفة والتخزين على الشريحة بشكل أصلي.
عمليًا، يمكن لجهاز واحد أن يحمل كلا النوعين من المفاتيح دون تعارض. تطبيق بطاقة OpenPGP يخدم GnuPG عبر الفتحات القياسية SIG وDEC وAUT. مخزن جهات الاتصال يحمل مفاتيح Galdra للعمل التشغيلي — على سبيل المثال التشفير لجهة اتصال راديوية بمعرف النداء، أو التحقق من رسالة مقابل معرّف مشترك DMR، أو البحث عن زميل برقم الشارة. المساران لا يتداخلان مع بعضهما.
إذا كان لدى شخص ما شهادة OpenPGP يديرها GnuPG على المضيف وأيضًا مفتاح Galdra في مخزن جهات الاتصال على الشريحة، فهذان مفتاحان منفصلان لهما بصمتان منفصلتان. بصمة Galdra — المسبوقة بـ G: والمشتقة باستخدام BLAKE3 من بايتات المفتاح العام الخام — ليست نفس قيمة بصمة OpenPGP v4 لشهادة GnuPG الخاصة بذلك الشخص. الأداة المضيفة والجهاز يتعاملان معهما كهويتين مستقلتين. لا تفترض أن إحدى البصمتين تعني الأخرى دون التحقق من كلتيهما.
لا يضمن أي من نوعي المفاتيح تلقائيًا التسميات المحيطة به. معرّف مستخدم OpenPGP هو إعلان ذاتي حتى يوقعه شخص آخر. حقل معرف النداء أو DMR في سجل جهة اتصال Galdra موثوق فقط بقدر مصدره — جلب من خادم مفاتيح، أو إدخال يدوي، أو فحص خارج النطاق قمت به بنفسك. تسميات المصدر (SelfAttested، HostVerified، RegistrySync، OobVerified) تسجل كيف وصل الحقل؛ وهي لا تحل محل العمل الفعلي للتحقق من الهوية التي تهتم بها.
هذا البرنامج الثابت مكتوب بلغة Rust، وهي لغة برمجة أنظمة مصممة لتكون بنفس سرعة ومستوى C أو C++ المنخفض، ولكن بنهج مختلف جوهريًا فيما يتعلق بالسلامة.
كل تبعية مصنفة إما غير معدلة من المصدر (crates.io كما نُشرت)، أو معدلة أو مضمّنة داخل الشجرة (نسخة مثبتة أو تصحيح مساحة عمل)، أو منشأة بواسطة هذا المشروع (برامج ثابتة، مضيف، وصناديق أدوات). الجرد الكامل والأدوار و مخطط التبعيات موجود في docs/CRATE_DEPENDENCIES.md.
جزء كبير من الأخطاء ذات الصلة بالأمان في قواعد أكواد الصناعة يأتي من عدم سلامة الذاكرة (تجاوزات المخزن المؤقت، الاستخدام بعد التحرير، إلغاء مراجع فارغة، وما شابه). فريق MSRC من Microsoft أبلغ مرارًا أن حوالي 70% من CVEs المعالجة في منتجاتهم الخاصة تقع في هذه الفئة؛ فريق Chrome نشر نسبًا مماثلة لـ Chrome. هذه الأرقام تصف منتجات هؤلاء البائعين، وليست قانونًا عالميًا لجميع البرامج الثابتة، لكنها توضح لماذا تهم لغات سلامة الذاكرة.
في Rust الآمن (الافتراضي)، يستبعد مُدقّق الاقتراض سباقات البيانات وأخطاء الذاكرة المعتادة ذات السلوك غير المحدد في وقت الترجمة دون الاعتماد على جمع القمامة. Rust غير الآمن وFFI إلى C لا يزالان قادرين على إدخال أخطاء ذاكرة؛ يجب إبقاؤهما صغيرين ومراجعتهما.
فحوصات الحدود في Rust على الشرائح وقواعد الملكية تقلل عدة فئات من أوضاع الفشل الشائعة في أكواد C/C++ المدمجة:
unsafe يجب أن تكون صريحة؛ MMIO والمؤشرات الخام للسجلات تعيش هناك، لذا يمكن للمراجعين البحث عن سطح التدقيق (unsafe لا يجعل MMIO غير الصحيح مستحيلًا، بل يسهل فقط تحديد موقعه).Rust لا يوقف بحد ذاته أخطاء المنطق مثل حلقة ضيقة تُبلي الذاكرة الوميضية، أو اختيار قيم سجلات خاطئة. تلك تبقى مخاوف هندسية ومراجعة.
تطبق قاعدة الأكواد هذه أنماط Rust الشائعة للأسرار؛ وهي ليست تلقائية لكل نوع:
zeroize::Zeroize / ZeroizeOnDrop تمسح المخازن المؤقتة عند الإسقاط؛ المتصلون يختارون ذلك.subtle::ConstantTimeEq (وما شابه) حيث يهم التوقيت — == العادي ليس سحريًا بزمن ثابت.Copy على أغلفة الأسرار يقلل النسخ العرضي؛ فصل النطاقات يستخدم أنواعًا مميزة وتسميات HKDF (سياسة التبعيات التشفيرية).catch_unwind أو abort حيث تتطلب منصتك ضمانات أقوى.unsafe يجب أن يُكتب صراحةً في المصدر، مما يضيّق نطاق المراجعة اليدوية. التبعيات: سياسة التشفير لهذا المشروع تفضل صناديق Rust المُدقَّقة (RustCrypto وغيرها)؛ انظر الجدول في سياسة التبعيات التشفيرية — ليست كل تبعية من مشروع مظلة واحد. للقائمة الكاملة للصناديق وما إذا كانت كل تبعية غير معدلة أو معدلة/مضمّنة أو من تأليف المشروع، انظر docs/CRATE_DEPENDENCIES.md.
Rust لا يزيل الأقفال الميتة (مثل أقفال Mutex بترتيب خاطئ)، أو أخطاء المنطق، أو البروتوكولات غير الصحيحة، أو تآكل الذاكرة الوميضية من الحلقات السيئة، أو الهجمات الفيزيائية (التشويش، تحليل الطاقة)، أو المخاطر الناتجة عن بناء صحيح لصورة خاطئة. كما أنه لا يضمن تنفيذًا بزمن ثابت على جميع الأجهزة دون برمجة دقيقة. تلك المجالات تعتمد على التصميم والمراجعة والاختبار وممارسات المشروع في التشفير وسلسلة التوريد الموصوفة في مكان آخر من هذا README.
التحقق (الاختبارات والتنقيب): بعيدًا عن اللغة، يستخدم هذا المستودع اختبارات الوحدة واختبارات التكامل وأدوات توقيت dudect وأهداف libFuzzer (cargo-fuzz). الملخصات والمصفوفات موجودة في نتائج الاختبارات؛ بيانات التشغيل المسجلة تبدأ في docs/TEST_RESULTS.md#run-metadata. الاختبارات الناجحة لا تثبت الجاهزية للإنتاج أو غياب الثغرات — إنها تضيّق المخاطر. أنت من يقرر ما إذا كان تشغيل البناءات أو الاختبارات مقبولًا لبيئتك؛ الجهاز الافتراضي اختياري لكنه يحد من نطاق الانفجار على جهازك.
أي منصة VM رئيسية مناسبة — VirtualBox (مجاني، مفتوح المصدر)، QEMU (مجاني، مفتوح المصدر، سطر أوامر)، أو VMware. ضيف Linux موصى به لأن بيئة البناء مدعومة بشكل أفضل هناك.
بداية سريعة مع QEMU وUbuntu:```bash
sudo apt install qemu-system-x86 # Debian/Ubuntu host
brew install qemu # macOS host
qemu-system-x86_64 -m 2G -cdrom ubuntu-24.04-live-server-amd64.iso
داخل الجهاز الافتراضي، تنطبق تعليمات البناء القياسية. يمكن أخذ **لقطة** للجهاز الافتراضي قبل كل تجربة و**التراجع** عنها بشكل نظيف إذا حدث أي خطأ.
### تقييم المخاطر والنشر
**في النهاية، ما إذا كانت هذه البرامج الثابتة آمنة للنشر في بيئتك هو قرار لا يمكنك اتخاذه إلا أنت**، بناءً على تقييم المخاطر الخاص بك، وحساسية ما تحمي به، وما إذا كنت تختار انتظار تدقيق مستقل من طرف ثالث قبل النشر. يهدف هذا المشروع إلى منحك جميع المعلومات اللازمة لاتخاذ هذا القرار بنفسك.
توجد قائمة منظمة بالأصول والتهديدات **T1–T14** والأهداف غير الصريحة وفجوات التحقق من الربع الثاني في **[docs/THREAT_MODEL.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/THREAT_MODEL.md)**.
---
## حول الاسم
**Galdr** هو ممارسة نورسية قديمة للسحر المنطوق أو المُغنّى: تعويذات تُستخدم للربط أو الحماية أو الكشف. في الملاحم، يسمي فعل إلقاء التعويذة نفسها، وليس الكلمات فقط. يُستخدم أحيانًا أيضًا لتفعيل نقوش الرونية السحرية، كما في [عمود رمح Kragehul I](https://en.wikipedia.org/wiki/Kragehul_I)، و[تميمة Lindholm](https://en.wikipedia.org/wiki/Lindholm_amulet)، و[لوحة Vadstena](https://en.wikipedia.org/wiki/Vadstena_bracteate)، واكتشافات أخرى من الفوثارك الأكبر.
**Galdralag** هو الشكل العروضي المستخدم لـ galdr: شعر منظم ودقيق ومقيد بالقواعد يكون فيه النمط جزءًا من قوة التعويذة. اللاحقة *lag* قريبة من "قانون" أو "نمط".
**الرونية** كانت حرفيًا معرفة سرية ومشفرة — الاستخدام الشاماني لم يكن معروفًا إلا لمن فهمه.
---
## التوثيق
**المسرد:** [docs/GLOSSARY.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/GLOSSARY.md) — مصطلحات مشروحة **بلغة بسيطة** (مرتبة من الألف إلى الياء). ابدأ هنا إذا شعرت أن README أو المستندات الأخرى مليئة بالمصطلحات التقنية.
**التصحيح:** [docs/DEBUG_INSTRUCTIONS.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/DEBUG_INSTRUCTIONS.md) — تتبعات الاستدعاء، وتضييق نطاق `cargo test`، واختصارات `xtask`، والفحوصات الثلاثية للبرامج الثابتة، والاختبار العشوائي (fuzzing)، وما يجب جمعه قبل الإبلاغ عن مشكلة.
**المساعدون الذكيون (Claude, Cursor):** [CLAUDE.md](https://github.com/supermagnum/galdralag-firmware/blob/main/CLAUDE.md) — تعليمات المشروع لوكلاء البرمجة. قواعد خاصة بـ Cursor: [`.cursor/rules/`](https://github.com/supermagnum/galdralag-firmware/blob/main/.cursor/rules).
**تصفح جميع الملفات:** [github.com/Supermagnum/Galdralag-firmware — `docs/`](https://github.com/Supermagnum/Galdralag-firmware/tree/main/docs)
**الأجهزة (دونجل USB وما يتصل به):** شجرتا KiCad: [Hardware/kicad-files-usb/](https://github.com/supermagnum/galdralag-firmware/blob/main/Hardware/kicad-files-usb) — `dabao_v3c` (رمز USB-A **بدون** micro-SD)؛ و[Hardware/kicad-sd-card/](https://github.com/supermagnum/galdralag-firmware/blob/main/Hardware/kicad-sd-card) — `dabao_v3c_sdcard` (نفس التخطيط الأساسي **مع** حامل micro-SD)، وملفات gerber، وقائمة المواد (BOM)، ومخرجات الإنتاج، و[توثيق توزيع الدبابيس](https://github.com/supermagnum/galdralag-firmware/blob/main/Hardware/kicad-sd-card/docs/pinout/README.md). تخطيط لوحة دائرة دونجل USB-A (رمز بسيط مقابل تقييم بصيغة Pico) موصوف في [docs/USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/USB_DONGLE_PCB.md).
| المستند | الوصف |
|----------|-------------|
| [Hardware/kicad-files-usb/](https://github.com/supermagnum/galdralag-firmware/blob/main/Hardware/kicad-files-usb) | مشروع KiCad **لدونجل USB** `dabao_v3c` (بدون micro-SD)؛ ملفات gerber، قائمة المواد، مخرجات الإنتاج؛ يُكمل [USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/USB_DONGLE_PCB.md) |
| [Hardware/kicad-sd-card/](https://github.com/supermagnum/galdralag-firmware/blob/main/Hardware/kicad-sd-card) | مشروع KiCad **لدونجل USB** `dabao_v3c_sdcard` (مع حامل micro-SD)؛ ملفات gerber، قائمة المواد، توزيع الدبابيس تحت [docs/pinout](https://github.com/supermagnum/galdralag-firmware/blob/main/Hardware/kicad-sd-card/docs/pinout/README.md)؛ يُكمل [USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/USB_DONGLE_PCB.md) |
| [docs/CODE_MAP.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/CODE_MAP.md) | **فهرس الوظائف والوحدات** في مساحة العمل (لكل ملف `pub fn` / أنواع مع مراسي أسطر) |
| [docs/CRATE_DEPENDENCIES.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/CRATE_DEPENDENCIES.md) | حزم Rust **التابعة للمشروع مقابل الخارجية** وكيفية اعتماد كل منها على الآخر |
| [docs/API_REFERENCE.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/API_REFERENCE.md) | خريطة الكود + **ملحق** لـ IETF/I-D/GnuPG/Sequoia: بناء Shamir GF(256)، تنسيق درع GALDRA SHARE، تنسيق سلك ECDH المؤقت، تسميات HKDF، الصور السابقة؛ مسارات `galdrad`؛ تلميحات rustdoc |
| [docs/ARCHITECTURE.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/ARCHITECTURE.md) | بنية البرامج الثابتة عالية المستوى والأنظمة الفرعية الرئيسية |
| [docs/AUDIT_LOG.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/AUDIT_LOG.md) | سجلات تدقيق الملفات الشخصية (`cipher-profile`)، خطاف OpenPGP `OpenPgpAudit`؛ **لا** يوجد سجل RRAM للإلحاق فقط منفذ بعد |
| [docs/BIOMETRIC_API.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/BIOMETRIC_API.md) | البوابة الأولية للقياسات الحيوية: البنية، تنسيق السلك، تخطيط الخزنة؛ التكامل منفذ جزئيًا |
| [docs/BIOMETRIC_DEVICE_GUIDE.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/BIOMETRIC_DEVICE_GUIDE.md) | كيفية إضافة دعم لخلفية أجهزة حيوية جديدة |
| [docs/BIOMETRIC_TESTING.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/BIOMETRIC_TESTING.md) | منهجية الاختبار: مقاييس ISO/IEC 30107-3 PAD، مجموعات البيانات، كيفية التشغيل |
| [docs/FINGERVEIN_DEVICE.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/FINGERVEIN_DEVICE.md) | جهاز قارئ أوردة الأصابع المفتوح ESP32-CAM: الأجهزة، مخطط البروتوكول، الحيوية |
| [docs/SWEET_PLATFORM_INTEGRATION.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/SWEET_PLATFORM_INTEGRATION.md) | ماسح راحة اليد لمنصة sweet: الأجهزة، التكامل، الحيوية، مجموعة البيانات |
| [docs/GALDRA-TOOL.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/GALDRA-TOOL.md) | أدوات المضيف (`galdra`, `galdrad`, `galdra-gtk`): سير العمل، التزويد، سياسة PIN، السلوك التشغيلي |
| [Supermagnum/Fulla](https://github.com/Supermagnum/Fulla) | **Fulla**: سجل مفاتيح OpenPGP عام موجه لشبكة الثقة (مستودع الخادم والتنفيذ). **لا توجد مثيلات سجل عام قيد التشغيل بعد**؛ واحدة مخطط لها. **`galdra keyserver push`** / **`galdra keyserver fetch`** وتكوين **`[keyserver]`** الاختياري تستهدف هذا النظام البيئي — انظر أيضًا [شبكة الثقة وحفلات توقيع المفاتيح](#web-of-trust-and-key-signing-parties). تبقى ملاحظات التصميم التكميلية في [docs/server.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/server.md). |
| [docs/GLOSSARY.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/GLOSSARY.md) | **مسرد بلغة بسيطة** (ألف إلى ياء) للقراء غير التقنيين؛ التفاصيل التقنية تبقى في المستندات المرتبطة |
| [CLAUDE.md](https://github.com/supermagnum/galdralag-firmware/blob/main/CLAUDE.md) | تعليمات **لـ Claude** / وكلاء البرمجة الذكية؛ يشير إلى [`.cursor/rules/`](https://github.com/supermagnum/galdralag-firmware/blob/main/.cursor/rules) **لـ Cursor** |
| [docs/GALDRALAG_DEV_REFERENCE.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/GALDRALAG_DEV_REFERENCE.md) | سلسلة الأدوات، أوامر `xtask`، نقاط دخول الاختبار العشوائي والتشفير |
| [docs/dev-ref.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/dev-ref.md) | تخطيط مساحة العمل، الحزم، سمات HAL، سلوك USB/PSRAM، الثوابت الأمنية |
| [docs/DEBUG_INSTRUCTIONS.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/DEBUG_INSTRUCTIONS.md) | التصحيح: `RUST_BACKTRACE`، بنيات مفصلة، اختبارات محدودة النطاق، وصفات `xtask`، فحوصات الأهداف المدمجة، مؤشرات الاختبار العشوائي، فحوصات مضيف OpenPGP |
| [docs/KEY_LIFECYCLE.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/KEY_LIFECYCLE.md) | توليد المفاتيح، الاستيراد، سياسة التصدير، التدوير، التصفير، Shamir (كما ينعكس في `vault` / OpenPGP) |
| [docs/OPENPGP_CARD.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/OPENPGP_CARD.md) | تطبيق بطاقة OpenPGP، إعداد مضيف GnuPG/CCID، فتحات المفاتيح، الخوارزميات، udev |
| [docs/CIPHER_PROFILES.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/CIPHER_PROFILES.md) | نظام الملفات الشخصية للتشفير وتكوينه |
| [docs/DUAL_KEY_QUORUM.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/DUAL_KEY_QUORUM.md) | نصاب مفاتيح أجهزة ثنائي (أو N) كنمط تمديد للمتكاملين على Shamir وOpenPGP؛ غير مفروض بواسطة البرامج الثابتة |
| [docs/CIPHER_PROFILE_SECURITY.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/CIPHER_PROFILE_SECURITY.md) | اعتبارات أمنية: معرّفات الملفات الشخصية بنص واضح، تحليل حركة المرور، مبرر الغلاف الخارجي BrainpoolP384r1، المعرّفات المشفرة، خاصية أحرف البدل |
| [docs/CESS_CONFORMANCE.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/CESS_CONFORMANCE.md) | توافق [CESS](https://github.com/Supermagnum/CESS/tree/main): تخطيط سلك الوضع A، `suite_id` من [ALGORITHM-REGISTRY.md — جدول البحث](https://github.com/Supermagnum/CESS/blob/main/ALGORITHM-REGISTRY.md#cipher-suite-identifier-lookup-table)، سجل الانحراف (الاحتفاظ بـ AES/SHA-2 مقابل CESS-CORE)، خارطة الطريق |
| [crates/cess](https://github.com/supermagnum/galdralag-firmware/blob/main/crates/cess) | وضع CESS A: HKDF-BLAKE3 (`derive_k_outer`, `hkdf_blake3`)، غلق/فتح ChaCha الخارجي، تخطيط `suite_id \|\| inner_blob`؛ انظر [CESS_CONFORMANCE.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/CESS_CONFORMANCE.md) |
| [docs/EPHEMERAL_SESSION.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/EPHEMERAL_SESSION.md) | بروتوكول جلسة ECDH المؤقتة الموثقة |
| [Supermagnum/CESS](https://github.com/Supermagnum/CESS) | **CESS** (*Cryptologically Enchanted Shamir's Secret*) — مواصفة مفتوحة (نص معياري ونواقل اختبار) لتقاسم الأسرار العتبي مع تشفير موثق، وتغليف أسرار بكلمة مرور، وتبادل مفاتيح هجين اختياري بعد الكم؛ منفصل عن هذه البرامج الثابتة لكنه في نفس فضاء التصميم مثل Shamir والملفات الشخصية للتشفير هنا |
| [docs/PQ_SIGNATURES.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/PQ_SIGNATURES.md) | توقيعات ما بعد الكم ذات الحالة (XMSS, LMS/HSS)، بوابات الميزات |
| [docs/Psram.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/Psram.md) | وحدة تخزين microSD خادعة اختيارية والسلوك المرتبط بها |
| [docs/RRAM_LAYOUT.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/RRAM_LAYOUT.md) | **4,194,304 بايت** من RRAM على الشريحة: إزاحات الخزنة من المصدر، تخطيط HAL، ملاحظات التآكل / التصفير |
| [docs/TEST_RESULTS.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/TEST_RESULTS.md#run-metadata) | يفتح عند **بيانات التشغيل**؛ ملخص خط الأنابيب، النواقل، dudect، cargo-fuzz ([القسم 6](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/TEST_RESULTS.md#6-cargo-fuzz-libfuzzer))، دورة حياة المفاتيح |
| [docs/THREE_FACTOR_AUTH.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/THREE_FACTOR_AUTH.md) | الرمز + PIN + قياسات حيوية اختيارية: ما ينفذه هذا المستودع مقابل العنصر النائب؛ مخطط التهديد |
| [docs/THREAT_MODEL.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/THREAT_MODEL.md) | نموذج التهديد: الأصول، التهديدات T1–T14، ما يتم الدفاع عنه وما لا يتم، العناصر غير المتحقق منها بانتظار أجهزة الربع الثاني، حالة التدقيق |
| [docs/PERFORMANCE.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/PERFORMANCE.md) | ملاحظات الأداء |
| [docs/HARDWARE_BRINGUP_TEST_PLAN.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/HARDWARE_BRINGUP_TEST_PLAN.md) | تشغيل أول أجهزة الربع الثاني: صورة مع `galdralag-service`، libccid `1D50:6197`، ATR ← APDUs `gpg --card-status`، أرقام PIN لمختبر Dabao (وليس CDC على `dabao-ccid`) |
| [docs/XOUS_CORE_UPSTREAM_REQUESTS.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/XOUS_CORE_UPSTREAM_REQUESTS.md) | التغييرات التي تنتمي إلى xous-core (وثائق Persona A، سياسة ATR، ملاحظات cratespec)؛ Galdralag لا يرقّع تلك الشجرة |
| [docs/HARDWARE_VERIFICATION.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/HARDWARE_VERIFICATION.md) | تصفير الأجهزة: التحقق بالمحاكاة مقابل السيليكون |
| [docs/HARDWARE_TEST.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/HARDWARE_TEST.md) | ملاحظات اختبار موجهة للأجهزة |
| [docs/NFC_PN532_INTEGRATION.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/NFC_PN532_INTEGRATION.md) | PN532 / NFC: libnfc، خيارات Rust، باب سلبي مقابل لوحة USB، النصاب مع Shamir وPIN |
| [docs/SDMMC_STORAGE_INTEGRATION.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/SDMMC_STORAGE_INTEGRATION.md) | `embedded-sdmmc` + microSD عبر SPI كتخزين ضخم اختياري؛ بديل BOM لـ PSRAM |
| [docs/USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/USB_DONGLE_PCB.md) | كيفية صنع لوحة دائرة دونجل USB-A من مرجع Dabao: تقييم بصيغة Pico مخصص لتشغيل البرامج الثابتة؛ هذا يزيل رأس GPIO لرمز بسيط؛ KiCad، FreeCAD، 5 فولت / 500 مللي أمبير مقابل USB-C PD، توجيه QSPI PSRAM |
تُحل المسارات نفسها على GitHub تحت [`tree/main/docs`](https://github.com/Supermagnum/Galdralag-firmware/tree/main/docs) و[`tree/main/Hardware`](https://github.com/Supermagnum/Galdralag-firmware/tree/main/Hardware).
---
## توافق OpenPGP وGnuPG
تنفذ البرامج الثابتة **تطبيق بطاقة OpenPGP** (موثق كإصدار **3.4.1** في [docs/OPENPGP_CARD.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/OPENPGP_CARD.md)). هذه هي نفس فئة الأجهزة التي يقودها GnuPG **لبطاقات OpenPGP الذكية** عبر **CCID/USB**: يحتاج المضيف إلى حزمة بطاقات ذكية عادية (`pcscd`، برامج تشغيل `ccid`، `scdaemon` الخاص بـ GnuPG). **لا يلزم برنامج تشغيل تشفير مخصص على جانب المضيف** يتجاوز ما ستستخدمه لأي بطاقة OpenPGP.
**ما يفعله هذا على المضيف (بمجرد أن يكون الجهاز مرئيًا كقارئ CCID):**
| المجال | الملاحظات |
|------|--------|
| **سير عمل GnuPG** | `gpg --card-status`، `gpg --card-edit`، تشفير/فك تشفير وتوقيع باستخدام مفاتيح على البطاقة |
| **SSH** | `gpg-agent` مع `enable-ssh-support` وإعداد `SSH_AUTH_SOCK` المعتاد |
| **البريد والملفات** | العملاء الذين يستخدمون GnuPG (مثل Thunderbird وEvolution وKleopatra) وتشفير الملفات القياسي عبر `gpg` |
| **أدوات أخرى** | أي شيء يتحدث مع بطاقة OpenPGP + CCID بنفس الطريقة التي يفعلها GnuPG |
**فتحات المفاتيح (الافتراضيات النموذجية):** **SIG** (التوقيع)، **DEC** (فك التشفير / ECDH)، **AUT** (المصادقة، مثل SSH). الخوارزميات التشغيلية لكل فتحة هي منحنيات Brainpool وNIST P-256/P-384 وEd25519 / X25519. يمكن تخزين سمات خوارزمية RSA عبر PUT DATA لكن GENERATE وPSO:CDS وPSO:DECIPHER كلها تفشل للفتحات المكونة بـ RSA. الجدول الكامل وسلوك `key-attr` موجودان في [docs/OPENPGP_CARD.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/OPENPGP_CARD.md).
**غير مشمول ببطاقة OpenPGP / GnuPG هنا:** **WebAuthn / FIDO2** بروتوكول مختلف وخارج نطاق تطبيق البطاقة هذا (انظر نفس المستند).
**بطاقة OpenPGP مقابل رسائل OpenPGP:** تحدد مواصفة **البطاقة** كيف يعرض الرمز أرقام PIN وفتحات المفاتيح والعمليات على البطاقة عبر CCID. **GnuPG** يستخدم ذلك عبر `scdaemon`. **تنسيق رسالة OpenPGP** للملفات والبريد (RFC 4880 وما يليه) هو طبقة **على جانب المضيف**: توفر البطاقة المفاتيح؛ يطبق GnuPG تنسيق الرسالة على الكمبيوتر. لا تحدد مواصفة البطاقة ولا RFC 4880 **تقسيم Shamir** أو **جلسات ECDH المؤقتة** أو **الملفات الشخصية للتشفير** — تلك [خاصة بالبرامج الثابتة](#standards-vs-firmware-specific-features).
**حالة التكامل:** منطق OpenPGP وCCID يعيش في **`usb-personality`** و**`baochip-openpgp`** وخدمة **Xous** **`usb-bao1x`** (انظر **xous-core** على **`feature/usb-bao1x-ccid-openpgp`**). **`galdralag-service`** الاختياري (`services/galdralag`) يتصل بـ **`usb-bao1x`** لـ IPC **CCID** ويجيب على APDUs **XfrBlock**؛ صور Dabao تحتاجه عبر cratespec (`scripts/build_dabao_ccid_image.sh`). قد يستمر BaoSec في ربط **PDDB** بـ **RRAM**. التفاصيل: [services/galdralag/README.md](https://github.com/supermagnum/galdralag-firmware/blob/main/services/galdralag/README.md). تخطيط الذاكرة: [docs/RRAM_LAYOUT.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/RRAM_LAYOUT.md). **GnuPG من طرف إلى طرف على أجهزة حقيقية** لا يزال يحتاج إلى صورة كاملة مع Galdralag، وتعرف مضيف **libccid** على **`1D50:6197`**، وعناصر تحت [القيود المعروفة / العمل المفتوح](#known-limitations--open-work).
## جلسة الرمز وتصدير المفاتيح
**الفصل المادي (نزع القابس):** يفقد المضيف جهاز USB؛ أي عملية قيد التنفيذ تفشل حتى يتم توصيل الرمز مرة أخرى وإعادة تعداده. على الجهاز، يتم مسح **جلسة بطاقة** OpenPGP: **حالة التحقق من PIN** لا تبقى بعد إيقاف التشغيل أو الإزالة، لذا **التوقيع وفك التشفير والعمليات المحمية الأخرى تتطلب VERIFY PIN مرة أخرى** بعد إعادة الاتصال، مثل بطاقات OpenPGP الذكية الأخرى. **تبقى مادة المفتاح الخاص مخزنة على الرمز** في تخزين الخزنة المختوم؛ نزع القابس لا يمسحها ما لم يتم تشغيل مسار **تصفير** أو مسح منفصل.
**ما قد يغادر الجهاز:** حسب التصميم، **فقط مادة المفتاح العام** مسموح لها بعبور رابط USB (على سبيل المثال حزم مفاتيح OpenPGP **العامة** والبيانات المرتبطة التي تعرضها مواصفة البطاقة للمضيف). **المفاتيح الخاصة** والقيم العددية السرية الخام وكتل المفاتيح المختومة **لا** تغادر الجهاز عبر مسارات البرامج الثابتة العادية؛ عمليات المفتاح الخاص تعمل **على الرمز**. يتلقى المضيف **نتائج تشفيرية** (توقيعات، نص واضح مفكوك التشفير لسير عمل فك التشفير بمساعدة البطاقة) حيث تتطلب الأوامر القياسية ذلك، وليس نسخة محمولة من المفتاح الخاص.
**استيراد المفاتيح إلى الجهاز:** من الممكن أيضًا **استيراد مفاتيح عامة** إلى الرمز (على سبيل المثال مراسي الثقة، شهادات الأقران، أو حزم OpenPGP العامة للتحقق على الجهاز). توفر **خزنة** البرامج الثابتة **فتحات مفاتيح عامة** للمواد غير السرية (`crates/vault/src/public_key_vault.rs`). أدوات المضيف لتحميل تلك الفتحات موصوفة في [docs/GALDRA-TOOL.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/GALDRA-TOOL.md) مع نضوج التكامل.
---
## شبكة الثقة وحفلات توقيع المفاتيح
يستخدم OpenPGP و**GnuPG** نموذج ثقة لامركزي — **شبكة الثقة** — للمساعدة في التحقق من يملك أي مفاتيح وما إذا كان يجب الاعتماد على **مفتاح عام** معين. هذا النموذج **على جانب المضيف** بالكامل. حيث تكون المصادقات المدعومة بالرقائق مثل [الهوية الإلكترونية الألمانية وGovernikus](#german-eid-and-governikus-as-a-trust-anchor-for-public-keys) غير متاحة أو غير مناسبة، فهو البديل اللامركزي المعتاد (**حفلات توقيع المفاتيح**، التوقيعات على الشهادات)؛ حيث **تكون** متاحة، يمكن لكلا النهجين التعايش كمسارات مكملة.
**بصمة Galdralag (`G:`):** لسير عمل التحقق الشخصي، يمكن لـ **Galdra** عرض بصمة **مرتبطة بالجهاز** مشتقة من مفتاح **SIG** العام للرمز (**BLAKE3-160**، بادئة `G:`). إنها **ليست** بصمة شهادة OpenPGP v4. وهي **متاحة فقط** عندما يكون **الملف الشخصي للتشفير** النشط يحتوي على **`ephemeral_ecdh: false`**؛ الملفات الشخصية المدمجة افتراضيًا **`ephemeral_ecdh: true`**، لذا عادةً تضيف ملفًا شخصيًا للمستخدم مع **`galdra profile add ... --no-ephemeral-ecdh`** لسير العمل الذي يحتاج هذا المعرّف جنبًا إلى جنب مع توقيع المضيف بنمط **WoT**. التعريف بلغة بسيطة ومواصفة التنسيق: [بصمة Galdralag](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/GLOSSARY.md#g). دورة الحياة وسياسة التدوير وبوابة ECDH المؤقتة: [KEY_LIFECYCLE.md — بصمة Galdralag](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/KEY_LIFECYCLE.md#galdralag-fingerprint-host).
### الحصول على بصمة Galdralag الخاصة بك
يطبع المضيف سلسلة **تبدأ دائمًا بـ `G:`** (BLAKE3-160 على بايتات مفتاح SIG العام، **40 حرفًا سداسيًا عشريًا صغيرًا** بعد البادئة في الشكل الأساسي).
1. ثبّت **[Galdra](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/GALDRA-TOOL.md)** على المضيف وتأكد من عمل **PC/SC** (**`pcscd`**، **`libpcsclite`**) حتى يتمكن الأداة من التحدث مع CCID إلى الرمز (انظر [تجميع وتثبيت أدوات المضيف](#compile-and-install-host-tools-galdra-galdrad-galdra-gtk)).
2. قم بتوصيل الرمز (افتحه إذا كان سير عملك يتطلب ذلك).
3. اختر **ملفًا شخصيًا للتشفير** مع **`ephemeral_ecdh: false`**. أكد بـ **`galdra profile show <name>`** (`ephemeral_ecdh: off`). اسم الملف الشخصي الافتراضي **`standard`** عادةً يحتوي **`ephemeral_ecdh: on`**؛ أنشئ واحدًا بـ **`galdra profile add <name> ... --no-ephemeral-ecdh`** إذا لزم الأمر.
4. شغّل:```bash
galdra identity fingerprint
# If you use a non-default profile:
galdra identity fingerprint --profile <name>
مخرجات قابلة للقراءة آليًا: galdra --emit json identity fingerprint (اختياريًا --profile <name>).
تتضمن التطبيقات المتوافقة مع OpenPGP مخططًا للتحقق من الشهادات للمساعدة في التحقق من ملكية المفاتيح؛ وقد أُطلق على عمله اسم شبكة الثقة. يمكن توقيع شهادات OpenPGP (مفتاح عام واحد أو أكثر بالإضافة إلى مواد هوية المالك/المستخدم) رقميًا من قبل مستخدمين آخرين، الذين يؤيدون بذلك الارتباط بين ذلك المفتاح العام والشخص أو الكيان المذكور في الشهادة.
gpg --full-generate-key على الجهاز، أو محمول على رمز يدعم OpenPGP).حفلة توقيع المفاتيح هي اجتماع شخصي يتبادل فيه المشاركون بصمات المفاتيح ويتحققون من هوية بعضهم البعض قبل توقيع الشهادات لاحقًا.
الخصائص النموذجية:
ينتج عن ذلك رسم بياني اجتماعي: إذا وثقت أليس ببوب ووقّع بوب على مفتاح تشارلي، فقد تختار أليس الثقة بمفتاح تشارلي اعتمادًا على عمق الثقة والسياسة.
لماذا تهم هذه الأحداث:
عادةً ما تتجنب الحفلات استخدام أجهزة الكمبيوتر أثناء تبادل الهوية، بحيث تقل فرص المهاجمين في إدخال مفاتيح مستبدلة أو برمجيات خبيثة على الأجهزة المشتركة.
قبل الحدث. احسب وسجّل بصمتك (ملخص مشتق من التجزئة لـالمفتاح العام—قصير بما يكفي للمقارنة الموثوقة). لا تعتمد على تبادل المفاتيح الكاملة على الورق في هذه المرحلة ما لم يحدد المنظمون خلاف ذلك.```bash
gpg --fingerprint YOUR_KEY_ID
أحضر بصمة المفتاح على الورق أو وسيط دائم آخر (مثال على الشكل: `ABCD 1234 EFGH 5678 90AB CDEF 1234 5678 90AB CDEF`).
**في الحدث (البصمات فقط).** تبادل **البصمات**، وتحقق من الهويات، وسجّل أي بصمة تعود لأي شخص تم التحقق منه. أكّد أن الهوية المُدّعاة لكل مشارك تطابق الوثائق التي تم فحصها.
**بعد الحدث.** اجلب **المفاتيح العامة** الكاملة من **خوادم المفاتيح** أو عبر التوزيع المباشر؛ وتأكد من أن المفاتيح التي تم تنزيلها تطابق **البصمات** المسجلة على الورق؛ **وقّع** على المفاتيح التي تحققت منها؛ واختياريًا **ارفع** التوقيعات ليتمكن الآخرون من استخدامها.
### البصمات بدلًا من المفاتيح الكاملة في الحدث
- **الأمن التشغيلي.** يُبقي هجمات الاستبدال مرتبطة ببصمات تم التحقق منها بدلًا من الثقة بأجهزة عشوائية أثناء الحدث.
- **البساطة.** البصمات تناسب الورق ويسهل قراءتها بصوت عالٍ أو مقارنتها.
- **التحقق.** بعد التنزيل، إعادة حساب البصمة تتحقق من السلامة من البداية إلى النهاية.
### خوادم المفاتيح
**خوادم المفاتيح** هي مستودعات شبكية تخزّن وتنسخ **المفاتيح** العامة لـ OpenPGP (والتحديثات مثل التوقيعات والإلغاءات). تجعل المفاتيح قابلة للاكتشاف عبر **معرّف المستخدم** أو **معرّف المفتاح** أو **البصمة**، وتدعم التوزيع الواسع النطاق لشبكة الثقة.
كيف تتصرف من حيث المبدأ:
- **النسخ الموزع.** رفع مفتاح إلى خادم واحد مشارك في شبكة مزامنة غالبًا ما ينتشر إلى النظراء (مجموعات **SKS** الكلاسيكية عملت بهذه الطريقة).
- **المزامنة.** المفاتيح الجديدة والتوقيعات وشهادات الإلغاء تنتشر وفقًا لسياسة كل خادم واتصاله.
- **وصول قراءة عام.** المواد **العامة** فقط مخصصة للنشر؛ **المفاتيح الخاصة** يجب ألا تُرفع أبدًا.
**الخصوصية.** المفاتيح المنشورة تكشف **معرّفات المستخدمين** (غالبًا ما تتضمن عناوين البريد). تعامل مع الرفع على أنه **عام وطويل الأمد** على العديد من الخوادم؛ ارفع **شهادات الإلغاء** عندما يجب تقاعد مفتاح. تختلف السياسة حسب المشغّل ([keys.openpgp.org](https://keys.openpgp.org/) يختلف عن المجموعات القديمة).
**طوبولوجيا النظراء.** تظهر رسوم بيانية لعلاقات الخوادم في [spider.pgpkeys.eu/graphs/](https://spider.pgpkeys.eu/graphs/)؛ وقوائم النظراء الموجهة لـ SKS في [spider.pgpkeys.eu/sks-peers](https://spider.pgpkeys.eu/sks-peers).
### استخدام خوادم المفاتيح```bash
# Upload your signed key (after local signing)
gpg --send-keys YOUR_KEY_ID
# Search by mail or name (behaviour depends on keyserver configured in gpg.conf)
gpg --search-keys [email protected]
# Refresh imported keys from configured keyservers
gpg --refresh-keys
| الخادم | ملاحظات |
|---|---|
| keys.openpgp.org | مستخدم على نطاق واسع؛ تحقق قائم على الموافقة لمعرّفات المستخدمين المرتبطة بالبريد |
| pgp.mit.edu | خادم مستضاف من MIT مرتبط تاريخيًا بشبكات عصر SKS |
| pool.sks-keyservers.net | اسم مضيف قديم لمجموعة خوادم مرتبط بنظام SKS السابق؛ يختلف الاتصال اليوم |
gpg --refresh-keys بشكل دوري حتى تنتشر عمليات الإبطال والتوقيعات الجديدة محليًا.ephemeral_ecdh: false باستخدام galdra profile show <name>.للسلوك الموثوق لـ gpg، ونماذج الثقة، وخيارات التوزيع، راجع دليل GnuPG والوثائق الرسمية.
مشروع Fulla (Supermagnum/Fulla على GitHub) يستضيف عمل خادم السجل المتوافق مع WoT: التنفيذ والمواصفات المتطورة لتخزين المفاتيح العامة للمساهمين بالإضافة إلى تسميات الهواة الراديوية الاختيارية، وتلميحات البريد، و**organisation** (تهجئة JSON)، و**role، وnote، وbadge_number، وphone_number، والأعمدة ذات الصلة المتوافقة مع بيانات اتصال Galdra. galdra keyserver push يرسل JSON POST /api/v1/keys (بما في ذلك armored_public_key، وemail**، وتلك الحقول الاختيارية عند تمرير خيارات سطر الأوامر)؛ galdra keyserver fetch وقسم الإعداد [keyserver] منفذان في galdra / وفقًا لهذا الاتجاه. ؛ من المتوقع تشغيل خدمة عامة في المستقبل. توجد نصوص تصميم تاريخية إضافية في .
تتوافق أجزاء مختلفة من هذا المشروع مع معايير مختلفة. قابلية التشغيل مع GnuPG محدودة بما يعرّفه تطبيق بطاقة OpenPGP وCCID. الميزات الأخرى منفذة في البرامج الثابتة (وأحيانًا في أدوات مضيف Galdra) لكنها ليست شيئًا يمكنك استدعاؤه عبر سير عمل gpg القياسي للبطاقات.
لسلوك البطاقة اليومي، اعتمد على docs/OPENPGP_CARD.md. لميزات الخزنة فقط أو الخاصة بالرمز، استخدم البرامج الثابتة لهذا المستودع ووثائق أداة Galdra.
لا تعرّف حزمتا بطاقة OpenPGP وGnuPG مشاركة السر Shamir (SSS) للمفاتيح أو لفتح القرص. لا يزال SSS مفيدًا بجانب التشفير العادي: فهو لا يحل أبدًا محل التشفير المتماثل على القرص تقريبًا — بل يحمي السر الصغير (المفتاح الرئيسي أو عبارة المرور) الذي يفتح ذلك التشفير.
النمط (نفس الفكرة دائمًا):
1. LUKS (لينكس) وSSS خارجي
LUKS يشفر الحجم بمفتاح رئيسي. يمكنك استخراج ذلك المفتاح (أو سر فتحة مفتاح، حسب إجراءك)، وتقسيمه بأداة SSS، وتخزين الحصص بشكل منفصل. عند الفتح، اجمع K حصص، وأعد بناء مادة المفتاح، وزودها إلى cryptsetup (راجع وثائق توزيعتك؛ سوء التعامل مع المفاتيح قد يمنع الوصول نهائيًا).
شكل مثال باستخدام أدوات ssss ("مخطط مشاركة السر Shamir") (تختلف الأسماء والتغليف حسب نظام التشغيل):```bash
ssss-split -t 3 -n 5 < luks_master.key
ssss-combine -t 3 | cryptsetup luksOpen /dev/sdX vault
**2. HashiCorp Vault**
يستخدم [Vault](https://www.hashicorp.com/products/vault) خوارزمية Shamir لعملية **فك القفل (unseal)**: يتم تقسيم مفتاح تشفير التخزين عند التهيئة (مثلاً، 3 من 5 مشغّلين، كلٌّ منهم يحمل حصة). بعد إعادة التشغيل، يجب إدخال **K** من الحصص لفك القفل. نفس نمط **K-of-N على سر رئيسي** كما في LUKS، لكنه مطبّق على محرك أسرار بدلاً من جهاز كتلة.
**3. برنامج Galdralag الثابت (`vsss-rs`)**
يستخدم هذا المستودع [`vsss-rs`](https://crates.io/crates/vsss-rs) (من نظام RustCrypto البيئي) لتطبيق Shamir على الجهاز. ينطبق نفس **التقسيم الطبقي** إذا قمت بمحاذاته مع التشفير الشامل:
- توليد مفتاح رئيسي عشوائي بطول 256 بت (أو ما يناسب).
- تشفير القرص أو المخزن الشامل باستخدام **AES-GCM** أو **ChaCha20-Poly1305** بهذا المفتاح (وهذا يتوافق مع صناديق التشفير المتماثل المدقّقة في مساحة العمل).
- استخدام `vsss-rs` لتقسيم المفتاح الرئيسي إلى **N** حصة مع عتبة **K**.
- تخزين الحصص في فتحات الخزنة، أو على أجهزة أخرى، أو لدى حاملي المفاتيح.
- عند الإقلاع أو الاسترداد، اجمع **K** من الحصص، وأعد البناء، ثم استخدم **HKDF** (أو سياستك) لاستخلاص مفاتيح فرعية منفصلة النطاق إذا لزم الأمر.
**4. VeraCrypt**
لا يطبّق VeraCrypt خوارزمية SSS داخلياً. ينطبق نفس النمط **الخارجي**: قم بتقسيم **عبارة المرور أو مادة ملف المفتاح** باستخدام أداة SSS؛ ولا تحاول تقسيم نص التشفير الخاص بالحجم باستخدام Shamir.
### النمط الهجين (البيانات الكبيرة)
SSS مخصصة للـ**أسرار الصغيرة** (حجم المفتاح). **لا** تطبّق Shamir على نص تشفير بحجم غيغابايتات متعددة. التقسيم الطبقي المعتاد:```text
[Drive data]
encrypted by
[Symmetric master key, e.g. 32-byte AES-256]
split by SSS into
[Share 1] [Share 2] ... [Share N]
(each share may be wrapped with a recipient's PGP key, HSM, or offline media)
هذا يتوافق مع ما يجمعه هذا المشروع بالفعل: aes-gcm / chacha20poly1305 للبيانات في وضع السكون، وvsss-rs لتقسيم السر الرئيسي، وhkdf للاشتقاق بعد إعادة البناء.
| القرار | الخيارات النموذجية |
|---|---|
| العتبة | 2-من-3 (فريق صغير، بعض التكرار)؛ 3-من-5 (شائع في المؤسسات) |
التعامل التشغيلي مع المفاتيح لـ LUKS وتشفير القرص الكامل حساس أمنيًا؛ اتبع إرشادات البائع والتوزيع ونماذج التهديد لبيئتك.
تفويض بمفتاحي أجهزة / تفويض النصاب (يتطلب رمزين ماديين منفصلين أو حاملي حصص قبل عملية حرجة) هو نمط تمديد مدعوم، وليس ميزة برمجيات ثابتة. يوفر Galdralag بدائيات Shamir K-of-N
(vault::shamir، galdra shamir)
ومصادقة OpenPGP برمز واحد؛ يجب على غلاف LUKS أو لوحة وصول أو برنامج خفي مخصص في المصب فرض النصاب ونوافذ الجلسة وإعادة البناء الآمنة. هذا الحدود، وسير عمل 2-من-N المرجعية، وملاحظات الأمان للمدمجين موجودة في docs/DUAL_KEY_QUORUM.md. هذا ممكن بالبدائيات الموجودة اليوم؛ التنسيق متروك عمدًا للمستهلك — وليس التزامًا بخارطة طريق من هذا المستودع.
أحد الأنماط الملموسة هو محرك أو وحدة تخزين مشفرة باستخدام منحنيات Brainpool حيث تتطلبها مجموعتك التقنية (مثلًا ECDH/ECDSA حول سر رئيسي)، مقترنة بـ مشاركة سر Shamir على مادة المفتاح التي تفتح ذلك التشفير (نفس طبقات السر الصغير أعلاه: SSS يحمي المفتاح، وليس النص المشفر متعدد الجيجابايت). إذا وعندما يتم تدقيق البرامج الثابتة وبرامج المضيف التي تنفذ هذا سير العمل بشكل مستقل، يمكن أن يكون هذا المزيج قيمًا للمؤسسات التي يجب أن تفي بسياسات النصاب وملفات التشفير الوطنية في نفس الوقت.
لماذا تُناقش منحنيات Brainpool (مثلًا BrainpoolP256r1، BrainpoolP384r1) غالبًا في هذا السياق:
سيناريوهات يجيب فيها الجمع بين SSS وتشفير من فئة Brainpool على احتياجات مؤسسية (توضيحية؛ وليست نصيحة قانونية أو امتثال):
إذا لم تكن مصادقة OpenPGP بأسلوب Governikus أو شهادة هوية إلكترونية وطنية مدعومة بالرقاقة متاحة أو عملية لولايتك القضائية أو سير عملك، يصف شبكة الثقة وحفلات توقيع المفاتيح نهجًا بديلًا على جانب المضيف يعتمد على التحقق الشخصي وتوقيعات أطراف ثالثة على الشهادات.
مصادقة مفتاح OpenPGP من Governikus هي خدمة عبر الإنترنت تُدار نيابة عن BSI (المكتب الفيدرالي الألماني لأمن المعلومات). بعد أن يصادق مقدم الطلب ببطاقة هوية قادرة على الهوية الإلكترونية الألمانية، أو بطاقة هوية إلكترونية أوروبية لمواطني الاتحاد الأوروبي، أو تصريح إقامة إلكتروني، تتحقق الخدمة من أن الاسم القانوني المصادق عليه يطابق معرف المستخدم في OpenPGP على المفتاح العام المرفوع. إذا تطابق، يوقّع Governikus على ذلك المفتاح العام بمفتاح توقيع الخدمة حتى يتمكن أطراف ثالثة من التحقق من الشهادة.
سير عمل عملي مع هذه البرامج الثابتة: توليد مفتاح غير متماثل Brainpool على الرمز (توليد بطاقة OpenPGP كالمعتاد)، تصدير المفتاح العام أو الشهادة إلى المضيف، إكمال تدفق تقديم Governikus بما في ذلك مصادقة الهوية الإلكترونية (عادةً AusweisApp وقراءة بطاقة NFC)، واستخدام المفتاح العام الموقّع الذي تعيده الخدمة (مثلًا من توزيع البريد الإلكتروني). يبقى المفتاح الخاص على Galdralag طوال الوقت.
لا يحل أي من المسارين محل الآخر. الهوية الإلكترونية وخطوة Governikus تربطان المفتاح العام بـ هوية تم التحقق منها مقابل الرقاقة وقت التقديم؛ لا يوفران سرية أمامية، أو Shamir K-of-N لمادة المفتاح طويلة الأجل، أو ملفات تشفير للبيانات الضخمة — تلك ميزات خاصة بالبرامج الثابتة موصوفة في مكان آخر في هذا README. كما أن رقاقة الهوية الإلكترونية وعملية الإصدار المحيطة لا تنفذان، بحد ذاتها، سلوك ECDH المؤقت والتتالي للرمز. بالمقابل، مفتاح OpenPGP من Brainpool مولّد على الجهاز يتماشى مع سياق نشر BSI/الاتحاد الأوروبي الذي نوقش بالفعل لـ الاستخدام المؤسسي لـ Brainpool، لكن بدون خطوة شهادة خارجية يجب على المراسلين الاعتماد على وسائل أخرى لربط بصمة إصبع بـ شخص قانوني.
| الطبقة | الدور |
|---|---|
| مفتاح OpenPGP العام (مثلًا Brainpool على Galdralag) | البنية التشفيرية والتحكم في المفتاح الخاص على الرمز؛ اختيارات المنحنى تتبع توقعات فئة BSI TR-03111 (انظر صفوف قدرة Brainpool ونقاش TR-03111 في هل هذا هراء ذكاء اصطناعي؟) |
القيود: التحقق قائم على الاسم. إذا شارك شخصان نفس الاسم القانوني في الحقول التي تقارنها الخدمة، لا تميز الشهادة بينهما؛ تؤكد ربط الهوية بذلك الاسم وقت الشهادة، وليس التفرد العالمي. تبقى مخاوف OpenPGP الروتينية (ربط البريد الإلكتروني، تدوير المفاتيح، الإبطال) سارية.
مواءمة السياسات: نفس BSI التي تحدد الإرشادات التقنية المتعلقة بـ Brainpool (BSI TR-03111؛ متجهات التوافق تحت crates/vault/tests/bsi_vectors/) تقف أيضًا خلف عملية توقيع الهوية الإلكترونية في Governikus، وهو ما يهم غالبًا في الإعدادات الألمانية والأوروبية حيث يكون Brainpool مطلوبًا أو مفضلًا بالفعل — انظر Shamir مع Brainpool: مثال وملاءمة مؤسسية.
نطاق أوسع (ملاحظة بحثية، وليست مسحًا مكتملًا): نفس النمط — ربط مفتاح OpenPGP عام بهوية تم التحقق منها بالرقاقة — قابل للتطبيق من حيث المبدأ أينما توجد هوية إلكترونية وطنية؛ أي مقدمي الخدمات يقدمون خطوة توقيع شبيهة بـ Governikus، وتحت أي قواعد، هو سؤال منفصل يستحق التحقيق مع توسع النشرات. تدير دول أخرى في الاتحاد الأوروبي أنظمة هوية إلكترونية قائمة على البطاقات تحت eIDAS قد تدعم مراسي ثقة مماثلة أو أقوى من المسار الألماني وحده؛ لا يفهرس هذا README تلك الأنظمة.
اعتمدت إستونيا وبلجيكا كلتاهما NIST P-384 على الرقاقة بدلًا من Brainpool، بينما يركز ملف BSI الألماني للقطاع العام على Brainpool (انظر أعلاه). يدعم Galdralag بالفعل Brainpool وNIST P-256/P-384 على بطاقة OpenPGP (docs/OPENPGP_CARD.md)؛ RSA في هذا المستودع هو مساعد مكتبة galdr-vault، وليس فتحة بطاقة عاملة (غير متماثل / اتفاق المفاتيح). لا يعتمد نفس نمط مرساة الثقة على مطابقة تفضيل منحنى ألمانيا وحده.
خارج الاتحاد الأوروبي/المنطقة الاقتصادية الأوروبية، يصعب تطبيق نمط مرساة الثقة القائم على البطاقات: لدى الولايات المتحدة بطاقة رقاقة (PIV) لكنها مقصورة على الأفراد الفيدراليين وتقع في X.509/FPKI، غير مدمجة مع OpenPGP؛ كندا ليس لديها بطاقة توقيع وطنية على الرقاقة بالمعنى المستخدم أعلاه. يحد ذلك النمط أساسًا إلى الولايات القضائية التي لديها بيانات اعتماد حكومية رقاقة صادرة عالميًا — منطقة eIDAS الأوروبية هي حيث يكون النموذج أقوى حاليًا.
عندما وعندما تصل الأجهزة إلى حالة جاهزة للمستهلك، سيحتاج الأشخاص الذين يريدون أن تصبح مشاركة سر Shamir وتبادل المفاتيح المؤقت المصادق عليه جزءًا من سلوك OpenPGP / GnuPG القابل للتشغيل البيني (بدلًا من ميزات خاصة بالبرامج الثابتة فقط) إلى دفع تغيير المعايير والتنفيذ في مكان آخر. لا يتحدث هذا المستودع نيابة عن IETF أو GnuPG؛ الأماكن أدناه هي حيث تُتابع هذه التعديلات عادةً.
CESS — Cryptologically Enchanted Shamir's Secret — هو معيار تشفير مفتوح لـ مشاركة السر بالعتبة مع تشفير مصادق مستقل عن التشفير، وتغليف حصص قائم على كلمة المرور، وتبادل مفاتيح هجين اختياري ما بعد الكم. يحتوي مستودع CESS على المواصفة المعيارية، وسجل الخوارزميات، ومتجهات الاختبار، ومشغل التوافق.
تتوافق هذه البرامج الثابتة مع CESS للإنشاءات المنفذة هنا: قواعد الحصص والمغلفات القابلة للتشغيل البيني في المواصفة تقع بجانب نفس موضوعات Shamir وBrainpool وملف التشفير الموصوفة في مكان آخر في هذا README. النص المعياري منفصل عن هذا المستودع؛ وضع التوافق (ما يطابق المواصفة، وما يختلف مع الاحتفاظ بخوارزميات مثل AES وSHA-256 في الملفات، وخارطة الطريق نحو تشغيل بيني أقوى): docs/CESS_CONFORMANCE.md.
إذا لم يرد مشرفو مستودع GitHub هذا على القضايا أو طلبات السحب أو البريد، يمكنك مع ذلك تطوير تشفيرات جديدة وسلوك OpenPGP وعمل متعلق بالمعايير في النظام البيئي الأوسع. Sequoia PGP هي مجموعة OpenPGP مستقلة قائمة على Rust (سلامة الذاكرة، تصميم المكتبة أولًا، مشاركة نشطة في IETF/النظام البيئي) حيث يحدث الكثير من التطوير العام. إنها ليست هذا المشروع؛ موثقة هنا كـ مسار بديل عملي عندما يكون المصدر أعلاه صامتًا.
| الحقل | الغرض | المضيف (galdra SQLite) | مخزن جهات الاتصال على الشريحة | التنسيق / الحد |
|---|
| معرّف جهة الاتصال | مفتاح أساسي مستقر للمضيف | نعم | لا | نص (id في SQLite) |
| الاسم المعروض | تسمية قابلة للقراءة البشرية | نعم | نعم | سلسلة UTF-8؛ بحد أقصى 240 بايت لكل حقل كومة على الشريحة |
| البريد الإلكتروني | عنوان البريد الأساسي | نعم | نعم | سلسلة UTF-8؛ بحث على الشريحة بمسح البريد الإلكتروني |
| إشارة النداء | إشارة نداء للراديو الهاوي | نعم | نعم | 12 بايت، مبطن بـ NUL؛ بحث على الشريحة |
| معرّف المشترك DMR | معرّف راديو DMR | نعم | نعم | 32-بت بدون إشارة (0 = غائب)؛ بحث على الشريحة |
| رقم الشارة | معرّف الموظف أو الشارة | نعم | نعم | سلسلة UTF-8 |
| المؤسسة | الوكالة أو صاحب العمل | نعم | نعم | سلسلة UTF-8 |
| القسم | الفريق أو الوحدة | نعم | نعم | سلسلة UTF-8 |
| الدور | تسمية الوظيفة أو المهمة | نعم | نعم | سلسلة UTF-8 |
| ملاحظة | تعليق حر | نعم | نعم | سلسلة UTF-8 |
| الانتماء الإذاعي | تسمية النادي أو الشبكة أو التحالف | نعم | نعم | سلسلة UTF-8 |
| الشارع | سطر عنوان الشارع | نعم | نعم | سلسلة UTF-8 |
| البلد | اسم البلد أو رمزه | نعم | نعم | سلسلة UTF-8 |
| الرمز البريدي | الرمز البريدي | نعم | نعم | سلسلة UTF-8 |
| المنطقة | الولاية أو المقاطعة أو المنطقة | نعم | نعم | سلسلة UTF-8 |
| معرّف Fluxer | معرّف أو اسم Fluxer | نعم | نعم | سلسلة UTF-8 |
| معرّف Discord | معرّف مستخدم Discord | نعم | نعم | سلسلة UTF-8 |
| معرّف IRC | لقب IRC أو ما شابه | نعم | نعم | سلسلة UTF-8 |
| رقم الهاتف | رقم اتصال صوتي أو SMS | نعم | لا | سلسلة UTF-8؛ بحد أقصى 32 حرفاً على المضيف؛ مُعلن من المُرسِل، غير مُتحقق منه |
| البصمة | مرساة المفتاح (بحث، مزامنة) | نعم (pgp_fingerprint) | نعم | 32 بايت؛ نمط OpenPGP v4 على السلك؛ ليست نفس بصمة الجهاز G: |
| المفتاح العام | مادة التشفير / التحقق | نعم (pgp_pubkey) | نعم (منطقة المفاتيح) | الخوارزمية: Ed25519، X25519، Brainpool P-256/P-384/P-512، NIST P-256/P-384، RSA-2048/3072/4096؛ حتى 768 بايت ككتلة على الشريحة |
| مفتاح محمي بـ PIN | المفتاح يتطلب فتح PIN | المضيف يخزن مفاتيح OpenPGP بشكل منفصل | نعم | ملخص مُتحقق من PIN + بيانات تغليف AES-GCM على الشريحة |
| آخر جلب | متى تم تحديث مادة المفتاح | نعم (fetched_at) | نعم (last_fetched) | UTC على المضيف؛ طابع زمني 32-بت على الشريحة |
| ينتهي في | وقت انتهاء المفتاح | نعم | لا | تاريخ ووقت UTC في SQLite فقط |
| مصدر المفتاح | كيف تم إنشاء سجل المضيف | نعم (source) | لا | مثال: يدوي، خادم مفاتيح، WKD، LDAP، ملف، نظير |
| مصدر الحقل | تسمية الثقة لكل حقل بيانات وصفية | لا | نعم (source_map) | بتان لكل حقل: SelfAttested، HostVerified، RegistrySync، OobVerified |
| أعلام السجل | نشط، قديم، هوية ذاتية، مُلغى | جزئياً (منطق المضيف) | نعم | مثال: STALE، SELF_KEY على الشريحة |
test-all --no-dudect: يتخطى مجموعة توقيت dudect (~15–20 دقيقة). CI لطلبات السحب يستخدم هذا العلم. شغّل cargo run -p xtask -- timing-test أو test-all بدون --no-dudect لبوابة التوقيت. CI الأسبوعي (test-all-full) لا يزال يشغّل dudect.docs/TEST_RESULTS.md لما هو ضمن النطاق.| حقل البيانات الوصفية | OpenPGP / GnuPG | مفتاح Galdra (مضيف + مخزن اتصالات) |
|---|
| معرف الاتصال / السجل | لا (استخدم معرف المفتاح أو البصمة) | نعم (id في SQLite على المضيف؛ ليس على الشريحة) |
| اسم العرض | فقط داخل نص معرف المستخدم (Name <email>) | نعم (حقل UTF-8 منفصل) |
| البريد الإلكتروني | فقط داخل نص معرف المستخدم | نعم (حقل منفصل؛ بحث بالبريد الإلكتروني على الشريحة) |
| عنوان الشارع | لا حقل قياسي | نعم |
| البلد | لا حقل قياسي | نعم |
| الرمز البريدي / ZIP | لا حقل قياسي | نعم |
| المنطقة / الولاية | لا حقل قياسي | نعم |
| المؤسسة | لا حقل قياسي | نعم |
| القسم | لا حقل قياسي | نعم |
| الدور / المسمى الوظيفي | لا حقل قياسي | نعم |
| شارة / معرف الموظف | لا حقل قياسي | نعم |
| إشارة النداء | لا حقل قياسي | نعم (12 بايت، محشوة بـ NUL على الشريحة) |
| معرف مشترك DMR | لا حقل قياسي | نعم (32-بت؛ بحث على الشريحة) |
| الانتماء الراديوي | لا حقل قياسي | نعم |
| معرف Fluxer | لا حقل قياسي | نعم |
| معرف Discord | لا حقل قياسي | نعم |
| معرف IRC | لا حقل قياسي | نعم |
| رقم الهاتف | لا حقل قياسي | نعم (SQLite على المضيف فقط) |
| ملاحظة حرة | لا حقل قياسي | نعم |
| بصمة OpenPGP v4 | نعم (40 حرفًا سداسيًا) | اختياري على صف المضيف عند ربط شهادة (pgp_fingerprint)؛ 32 بايتًا على الشريحة لمفاتيح Galdra |
بصمة جهاز G: | لا | نعم (BLAKE3-160 فوق المفتاح العام SIG؛ أداة المضيف؛ ليست قيمة OpenPGP v4) |
| معرف مفتاح OpenPGP | نعم (شكل قصير / طويل) | لا |
| الثقة / الأصل | توقيعات WoT على معرفات المستخدم | تسميات لكل حقل: SelfAttested، HostVerified، RegistrySync، OobVerified (على الشريحة) |
| انتهاء صلاحية المفتاح | نعم (شهادة / مفتاح فرعي) | المضيف فقط (expires_at في SQLite) |
| وقت آخر جلب للمفتاح | يعتمد على أدوات المضيف | نعم (fetched_at / last_fetched) |
| المفتاح الخاص على الرمز | فتحات بطاقة SIG و DEC و AUT | منطقة مفتاح Galdra منفصلة (ليست حزم معرف مستخدم) |
| PIN لاستخدام المفتاح الخاص | PW1 / PW3 (بطاقة OpenPGP) | تغليف PIN اختياري لكل سجل اتصال Galdra |
| كائن بطاقة OpenPGP (ليس في الجدول أعلاه) | المضيف (GnuPG) | على الرمز |
|---|
| المفاتيح الفرعية الأساسية + SIG / DEC / AUT | عام في سلسلة المفاتيح | خاص في فتحات مغلقة |
| توقيعات الشهادة (WoT) | نعم | لا |
| شهادة الإلغاء | نعم | لا |
| سمات الخوارزمية (DO 0xC1 / 0xC2 / 0xC3) | gpg --card-edit | نعم |
galdra-core-host| النطاق | المعيار / المستند النموذجي | مكشوف كبطاقة OpenPGP قياسية + GnuPG؟ |
|---|
| تطبيق بطاقة OpenPGP — APDUs، وأرقام PIN، وفتحات SIG/DEC/AUT، والتوليد/التوقيع/فك التشفير على البطاقة | مواصفات بطاقة OpenPGP (انظر docs/OPENPGP_CARD.md) | نعم — نفس حزمة المضيف مثل بطاقات OpenPGP الذكية الأخرى (gpg، scdaemon، CCID) |
| USB CCID — التواصل مع الجهاز كقارئ بطاقات ذكية | فئة أجهزة USB CCID | نعم — برامج تشغيل الفئة |
| تنسيق رسائل OpenPGP — ملفات مشفرة، بريد، حزم مفاتيح | RFC 4880 (والتحديثات) | نعم على المضيف — يستخدم GnuPG هذا؛ البطاقة لا تحلل البريد |
| Shamir K-of-N — تقسيم / استعادة مادة المفتاح طويلة الأمد في الخزنة | ليس في مواصفات بطاقة OpenPGP؛ ليس في GnuPG | لا — أدوات البرامج الثابتة والتجهيز فقط؛ ليست عملية gpg --card-edit (انظر Shamir وتشفير القرص الكامل) |
| مفتاح مزدوج / تفويض النصاب — مطلوب رمزين (أو N) قبل أن يعمل المستهلك (فتح القرص، تحرير الباب، عمليات مميزة) | ليس في مواصفات بطاقة OpenPGP | لا — نمط امتداد مدعوم للمدمجين الذين يستخدمون Shamir و/أو عدة مصادقات OpenPGP؛ التنفيذ يقع على النظام النهائي (docs/DUAL_KEY_QUORUM.md) |
| ECDH مؤقت موثق — بروتوكول جلسة بسرية أمامية على الرمز | ليس في مواصفات بطاقة OpenPGP | لا — خاص بالرمز؛ ليس أمر بطاقة GnuPG |
| نظام ملفات التشفير — تتالي تشفير متماثل مسمى (تراص تشفيرات مستقلة فوق بعضها؛ حتى أربع طبقات، ثلاث عمق مدعوم) والسياسة ذات الصلة | ليس في مواصفات بطاقة OpenPGP | لا — أدوات البرامج الثابتة / رمز المضيف |
| شخصيات microSD الخادعة / تخزين جماعي — سلوك USB لمضيف غير مطلع | ليس في مواصفات بطاقة OpenPGP | لا — مسارات كود شخصية USB منفصلة |
| WebAuthn / FIDO2 | CTAP / WebAuthn | غير منفذ — معيار مختلف عن بطاقة OpenPGP |
| الطبقة | الدور |
|---|
| القرص | مشفر بمفتاح رئيسي (مثل AES-256 عبر LUKS أو VeraCrypt أو طبقة كتل خام) |
| المفتاح الرئيسي | مقسم بـ SSS إلى N حصص، عتبة K-of-N |
| الحصص | محفوظة لدى أشخاص أو أجهزة أو تخزين دون اتصال؛ K حصص معًا تعيد بناء المفتاح الرئيسي |
| الفتح | أعد بناء المفتاح، ثم مرره إلى cryptsetup أو veracrypt أو حزمتك |
| تخزين الحصص | رموز أجهزة، أجهزة منفصلة، ورق، مواقع مفصولة جغرافياً |
| حماية الحصص | تشفير كل حصة لمستلم محدد (مثلًا بمفتاح OpenPGP الخاص به) قبل التوزيع |
| مكان إعادة البناء | جهاز معزول عن الشبكة، سياسة HSM، أو بيئة خاضعة للتحكم — وليس على مضيفات مشتركة غير موثوقة |
| السيناريو | لماذا يهم SSS مع منحنيات قوية ومتوافقة مع السياسات |
|---|
| مغادرة موظف أو وفاته | يبقى الاسترداد ممكنًا بدون السر الحصري لذلك الشخص |
| وصول قانوني وفق الإجراءات الواجبة | يمكن طلب نصاب — لا يملك أي طرف واحد سر الفتح الكامل |
| إيداع مفاتيح الشركات | تقسيم قابل للتدقيق؛ لا يملك أي مسؤول واحد وصولًا كاملًا |
| مصادرة الأجهزة | قد تُلتقط الوسائط دون التقاط K من N حصص |
| التوافق التنظيمي (الاتحاد الأوروبي / BSI) | Brainpool يلبي العديد من متطلبات التشفير الحكومية الألمانية والأوروبية |
| توقيع Governikus | يؤكد أن الاسم على الشهادة طابق الهوية المصادق عليها بالرقاقة عندما أكمل المستخدم التدفق |
| الولاية القضائية | الحالة التي تطرق إليها هذه الوثيقة |
|---|
| ألمانيا | تدفق Governikus/BSI الموصوف أعلاه |
| إستونيا | هوية إلكترونية قائمة على الرقاقة. هاجرت من RSA إلى NIST P-384 (secp384r1) ECDSA في 2017–2018 بعد أن أجبرت ثغرة ROCA على التخلي عن RSA بالكامل (لم تستطع الرقاقة توليد مفاتيح RSA آمنة ولم يكن لديها مسار لأحجام مفاتيح أكبر). المفتاح الخاص مرتبط بالجهاز ولا يمكن قراءته من البطاقة. لم تُعثر على خدمة توقيع OpenPGP بأسلوب Governikus معروفة. |
| بلجيكا | هوية إلكترونية قائمة على الرقاقة. استخدمت البطاقات الأقدم RSA 1024-بت؛ البطاقات الأحدث (applet 1.8 فما بعد) تستخدم NIST P-384 ECDSA. نظام بيئي نشط للبرمجيات مفتوحة المصدر (eid-mw، OpenSC). لم تُعثر على خدمة توقيع OpenPGP بأسلوب Governikus معروفة. |
| النرويج | رقاقة بطاقة الهوية الوطنية (الصادرة منذ 2020) متوافقة مع ICAO 9303 وتنفذ رقاقة وثيقة سفر فقط؛ لا تحمل وظيفة توقيع هوية إلكترونية. توقيع الهوية الإلكترونية منفصل: مقدمون خاصون معتمدون (Buypass، Commfides) تحت SEID، تاريخيًا RSA 2048-بت، ينتقلون إلى RSA 3072-بت مع إدخال ECC في SEID 2.0. لا توجد خدمة توقيع OpenPGP بأسلوب Governikus معروفة. رقاقة السفر والهوية الإلكترونية للتوقيع متميزتان — ذو صلة إذا حاول شخص استخدام رقاقة البطاقة فقط مباشرة. |
| النمسا | تم التحقيق جزئيًا. تستخدم الهوية الإلكترونية ECC (مؤكد)؛ المنحنى المحدد غير مؤكد في المصادر المتاحة. نموذج Bürgerkarte متعدد الرموز بدلًا من بطاقة واحدة؛ هاجر إلى حد كبير إلى تطبيق جوال. مزيد من التحقيق مطلوب حول تفاصيل المنحنى وأي خدمة توقيع OpenPGP. |
| الولايات المتحدة | بطاقة PIV (التحقق من الهوية الشخصية، FIPS 201 / NIST SP 800-78): تُصدر فقط لموظفي الفيدراليين والمقاولين — وليست بطاقة مدنية عالمية. الخوارزميات: NIST P-256 إلزامي لمفاتيح المصادقة؛ P-256 أو P-384 للتوقيع/إدارة المفاتيح؛ RSA 2048/3072 مسموح أيضًا؛ منحنيات NIST فقط، لا Brainpool. جذر الثقة هو مرجع سياسة الفيدرالية المشتركة CA (FCPCAG2)، غير مدرج في مخازن الثقة التجارية القياسية. لم تُعثر على خدمة توقيع OpenPGP بأسلوب Governikus؛ FPKI هي بنية X.509 منفصلة عن OpenPGP. كون PIV فيدراليًا فقط يعني أنها ليست مرساة ثقة مدنية مثل الهوية الإلكترونية الألمانية. |
| كندا | لا توجد بطاقة هوية وطنية قائمة على الرقاقة بمفاتيح توقيع على الرقاقة. الهوية الرقمية مجزأة عبر مخططات إقليمية (مثلًا BC Services Card)، وتطبيقات جوال (مثلًا eID-Me)، وإطار فيدرالي متطور لبيانات الاعتماد الرقمية. لا توجد بطاقة واحدة مماثلة للنموذج الألماني أو الإستوني أو البلجيكي. لم تُعثر على بنية بطاقات مكافئة — ليست مرساة ثقة قابلة للتطبيق بهذا المعنى. |
| دول أخرى | لم يتم التحقيق |
| الهدف | من أين تبدأ |
|---|
| نظرة عامة على المشروع، الأخبار، المجتمع | sequoia-pgp.org |
| المساهمة (قضايا، إصلاحات، ميزات، توثيق)؛ تواصل قبل العمل الكبير | المساهمة، التواصل |
وثائق المطور — سطح API لتوسيع التنفيذ (sequoia-openpgp والصناديق ذات الصلة) | الوثائق — مثلًا sequoia-openpgp على docs.rs |
| المصدر والمتتبعات | gitlab.com/sequoia-pgp (المكتبة الأساسية والأدوات)؛ github.com/sequoia-pgp (مرايا / مستودعات مختارة)؛ المشاريع |