
बाओचिप-1x के लिए एक क्रिप्टोग्राफिक फ्रेमवर्क।

यह प्रोजेक्ट ओपन इन्वेंशन नेटवर्क (OIN) के साथ पंजीकृत है। OIN एक रक्षात्मक पेटेंट पूल है: सदस्य Linux-संबंधित पेटेंटों को क्रॉस-लाइसेंस करते हैं ताकि प्रतिभागी कम पेटेंट जोखिम के साथ ओपन-सोर्स सॉफ़्टवेयर शिप और उपयोग कर सकें।
स्थिति: प्रतीक्षा में: https://github.com/betrusted-io/xous-core/pull/937
Xous माइक्रोकर्नेल पर चलने वाले Baochip-1x (Dabao मूल्यांकन बोर्ड) उपकरणों के लिए फर्मवेयर, जो riscv32imac-unknown-none-elf के लिए बनाया गया है।
यह यहाँ स्थित है: https://www.baochip.com/
यह उपकरण Nitrokey-श्रेणी के उपकरणों की ही श्रेणी में एक हार्डवेयर सुरक्षा टोकन है, जिसमें OpenPGP स्मार्टकार्ड-श्रेणी का व्यवहार और एक एन्क्रिप्टेड वॉल्ट है। पूरा हार्डवेयर स्टैक — RTL, स्कीमैटिक्स, बूटलोडर, OS — ओपन सोर्स और ऑडिट योग्य है।
हार्डवेयर विनिर्देश, बूट मॉडल, आवश्यकता तालिकाएँ, और ComboHash/PKE उपयोग Supermagnum/Baochip-1x-firmware में प्रलेखित हैं। Dabao मूल्यांकन बोर्ड (KiCad, स्कीमैटिक्स, स्विच, पिनआउट) baochip/dabao है। फ्लैशिंग के लिए बूटलोडर मोड में प्रवेश करने हेतु, इसे टॉगल करने के लिए SW2 दबाएँ (उस रिपॉजिटरी का स्कीमैटिक देखें)। इस रिपॉजिटरी के लिए आर्किटेक्चर नोट्स: docs/ARCHITECTURE.md।
Galdra होस्ट टूल प्राप्तकर्ताओं (संपर्कों) की एक स्थानीय SQLite निर्देशिका रखता है। प्रत्येक संग्रहीत पहचान में सार्वजनिक कुंजी सामग्री के साथ-साथ वैकल्पिक साइडकार लेबल शामिल होते हैं (नीचे दी गई तालिका देखें)। ये टैग होस्ट डेटाबेस में और, Galdra कुंजियों के लिए, ऑन-चिप संपर्क स्टोर (crates/contact-store) में रहते हैं। वे OpenPGP उपयोगकर्ता ID से जादुई रूप से बंधे नहीं होते जब तक कि आप उन्हें स्वयं संरेखित न करें, और वे क्रिप्टोग्राफ़िक रूप से प्रमाणित नहीं होते जब तक कि आप उन्हें बैंड के बाहर जाँच न करें। वैकल्पिक 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 के लिए एक हार्डवेयर सुरक्षा टोकन: USB CCID पर एक OpenPGP कार्ड एप्लिकेशन, जिसमें ऑन-डिवाइस वॉल्ट, PIN नीति, और रिपॉजिटरी-विशिष्ट सुविधाएँ (सिफर प्रोफ़ाइल — आप एक कैस्केड में चार तक विभिन्न सममित सिफर स्टैक कर सकते हैं, प्रत्येक अपनी व्युत्पन्न कुंजी के साथ; प्रमुख क्षमताएँ देखें), Shamir-संबंधित प्रवाह, प्रमाणित अस्थायी ECDH जहाँ लागू है, और Galdra होस्ट टूल) शामिल हैं। प्राथमिक इंटरऑपरेबिलिटी लक्ष्य GnuPG-शैली OpenPGP कार्ड उपयोग है, बाज़ार का हर टोकन प्रोटोकॉल नहीं।
यह फर्मवेयर नहीं है:
उन्हीं बाधाओं के साथ संरेखित crate-स्तरीय बहिष्करण docs/future-todo.md में Crates स्पष्ट रूप से बहिष्कृत के अंतर्गत सूचीबद्ध हैं।
CESS: यह फर्मवेयर ट्री में लागू मानक निर्माणों के लिए CESS के अनुरूप है (जिसमें Mode A बाहरी AEAD, K_outer के लिए HKDF-BLAKE3, और बाइट-वार GF(2^8) Shamir विभाजन शामिल हैं)। पूर्ण संरेखण विवरण, विचलन रजिस्टर, और प्रमाणन स्तर (उदाहरण के लिए पूर्ण निश्चित परत के लिए CESS-CORE) docs/CESS_CONFORMANCE.md और नीचे CESS (संबंधित ओपन स्टैंडर्ड) में प्रलेखित हैं।
OpenPGP / CCID एप्लिकेशन लॉजिक crates/usb-personality में है। Xous पर, CCID को उजागर करने वाली USB सेवा usb-bao1x है (आपके xous-core चेकआउट में), जो फ़ीचर ccid-openpgp के साथ बनाई गई है, जो OpenPGP RRAM विंडो और प्रोविज़निंग के लिए crates/baochip-openpgp का उपयोग करती है। लेआउट: docs/RRAM_LAYOUT.md। प्री-प्रोडक्शन अंतराल (ऑपरेटर PIN UX, प्लेटफ़ॉर्म मैप हस्ताक्षर): ज्ञात सीमाएँ / खुला कार्य।
समग्र लक्ष्य एक पूर्ण, परीक्षित, ओपन-सोर्स हार्डवेयर सुरक्षा टोकन फर्मवेयर बना हुआ है: CCID पर GnuPG के लिए OpenPGP कार्ड–शैली व्यवहार (OpenPGP और GnuPG संगतता देखें), साथ ही अतिरिक्त ऑन-डिवाइस सुविधाएँ जो वर्तमान में OpenPGP कार्ड मानक द्वारा परिभाषित नहीं हैं — फॉरवर्ड सीक्रेसी के साथ अस्थायी ECDH, Shamir K-of-N, सिफर-अज्ञेयवादी प्रोफ़ाइल, microSD डिकॉय वॉल्यूम — जैसा कि मानक बनाम फर्मवेयर-विशिष्ट सुविधाएँ में सारांशित है। सभी ओपन RTL पर प्रतिलिपि-उत्पादक बूटलोडर के साथ।
उन तैनातियों के लिए जिन्हें सर्वर, फ़ायरवॉल, मेडिसिन वॉल्ट, या एन्क्रिप्टेड वॉल्यूम अनलॉक करने से पहले दो अलग-अलग भौतिक टोकन (या K-of-N शेयर-धारक) की आवश्यकता होती है, प्रमुख क्षमताएँ के अंतर्गत दोहरी-हार्डवेयर-कुंजी कोरम (इंटीग्रेटर पैटर्न) देखें। प्रत्येक उपकरण एक क्रेडेंशियल स्रोत है; कोरम प्रवर्तन आपका एक्सेस गेटवे, PAM परत, या पैनल है — यह फर्मवेयर नहीं।
Baochip-1x के लिए शिप करने योग्य फर्मवेयर Ed25519 के साथ हस्ताक्षरित है। आप फर्मवेयर इमेज पर Ed25519 निजी कुंजी से हस्ताक्षर करते हैं; GnuPG इसे Ed25519 हस्ताक्षर उपकुंजी के साथ gpg --sign का उपयोग करके कर सकता है (सामान्य OpenPGP डिटैच्ड-सिग्नेचर कार्यप्रवाह, आपके बिल्ड द्वारा उत्सर्जित किसी भी पैकेजिंग के अनुकूल)। SoC में अपरिवर्तनीय boot0 ROM अगले चरण — boot1 — को चलने की अनुमति देने से पहले उस हस्ताक्षर को डिवाइस में बर्न की गई संबंधित सार्वजनिक कुंजियों (और बूट श्रृंखला के लिए व्यापक कुंजी मेनिफेस्ट) के विरुद्ध सत्यापित करता है। boot1 फिर हस्ताक्षरित एप्लिकेशन इमेज लोड करता है (उदाहरण के लिए बूटलोडर मोड में USB मास स्टोरेज पर वितरित UF2 ब्लॉब)। डिफ़ॉल्ट भागों में चार ऑन-चिप Ed25519 सार्वजनिक कुंजियाँ होती हैं (कोड तैनाती, बीटा, और डेवलपर जैसी भूमिकाएँ); boot0 / boot1 Baochip और तृतीय-पक्ष हस्ताक्षर कुंजियों के बीच पारस्परिक-अविश्वास नीति लागू करते हैं। पूर्ण बूट प्रवाह, UF2 वितरण, कंसोल, boot1 अपडेट, और सुरक्षा मॉडल: xous-core में Baochip लक्ष्यों के साथ आरंभ करना।
हर परीक्षण हर कमांड में नहीं चलता; यह जानबूझकर है।
xtask डिफ़ॉल्ट वर्कस्पेस परीक्षण में नहीं: सामान्य विधि cargo test --workspace --exclude xtask है क्योंकि xtask एक बिल्ड-ऑर्केस्ट्रेशन crate है। जब आप इसके परीक्षण चाहते हैं तो cargo test -p xtask चलाएँ।#[ignore] चिह्नित परीक्षण: ये तब तक छोड़े जाते हैं जब तक आप --ignored (और कोई आवश्यक crate फ़िल्टर) पास नहीं करते। कारणों में शामिल हैं: कवरेज जो पहले से केंद्रित यूनिट परीक्षणों में प्रयोग की जाती है (जैसे पोस्ट-ड्रॉप ज़ीरोइज़ेशन), धीमे मामले (जैसे RSA कुंजी निर्माण), और होस्ट टूल जैसे galdra में हार्डवेयक्या देखना है:** अनुरूपता सामग्री में crates/vault/tests/rfc_vectors/ के अंतर्गत ChaCha20-Poly1305 के लिए RFC 8439 के कार्यशील उदाहरण, crates/vault/tests/data/wycheproof/ के अंतर्गत ChaCha20-Poly1305 और Brainpool ECDH/ECDSA किनारे-मामलों के लिए वेंडर किए गए Wycheproof JSON, crates/vault/tests/bsi_vectors/ के अंतर्गत BrainpoolP256r1 और P384r1 के लिए BSI TR-03111 वेक्टर, crates/vault/tests/blake3_vectors.json के अंतर्गत आधिकारिक BLAKE3 संदर्भ वेक्टर (सभी 35 इनपुट लंबाई, सभी तीन मोड), के अंतर्गत Twofish विनिर्देश वेक्टर (Monte Carlo सहित 1203 मामले), और के अंतर्गत स्वतंत्र रूप से सत्यापित मध्यवर्ती मानों के साथ परियोजना का अपना CESS कैस्केड KAT फिक्स्चर शामिल है। साथ में ये वह आधार सत्य हैं जिन्हें रनर और समीक्षक और के साथ परख सकते हैं।RFC 8439 इंटरनेट इंजीनियरिंग टास्क फोर्स (IETF) द्वारा प्रकाशित है, जो वह संगठन है जो इंटरनेट के अधिकांश अंतर-संचालन को मानकीकृत करता है। RFC (Request for Comments) प्रोटोकॉल और कई क्रिप्टोग्राफिक विनिर्देशों का सामान्य रूप हैं। RFC 8439 ChaCha20-Poly1305 प्रमाणित एन्क्रिप्शन को परिभाषित करता है (डैनियल बर्नस्टीन के डिज़ाइनों पर आधारित) और इसमें विशिष्ट इनपुट और अपेक्षित आउटपुट के साथ ठोस कार्यशील उदाहरण शामिल हैं ताकि स्वतंत्र कार्यान्वयन जाँच सकें कि वे मानक से बाइट-दर-बाइट मेल खाते हैं। Ladies and Gentlemen of the class of '99: wear sunscreen से शुरू होने वाला व्यापक रूप से पुनरुत्पादित प्लेनटेक्स्ट RFC के परिशिष्ट उदाहरणों में दिखाई देता है: यदि आपका कोड AEAD आउटपुट को बिल्कुल सटीक पुनरुत्पादित करता है, तो आपके पास एक मजबूत जाँच है कि आपने निर्माण को सही ढंग से लागू किया है। यह आधिकारिक उत्तर कुंजी का क्रिप्टोग्राफिक एनालॉग है। ChaCha20-Poly1305 इस फर्मवेयर में हर बहु-परत कैस्केड प्रोफ़ाइल की आंतरिक परत है, इसलिए यह जाँच पूरे सिफर स्टैक की नींव पर स्थित है।
Wycheproof Google की सुरक्षा टीम (2017) द्वारा जारी एक परीक्षण कोष है। यह नाम ऑस्ट्रेलिया में माउंट वायचेप्रूफ को संदर्भित करता है — जिसे अक्सर दुनिया का सबसे छोटा पर्वत कहा जाता है — क्योंकि परियोजना छोटे लेकिन घातक बाधाओं को दूर करने पर केंद्रित है: पूर्णांक अतिप्रवाह, सीमा मामले, दोषपूर्ण इनपुट, और छेड़छाड़ किए गए प्रमाणीकरण टैग; विफलताएँ जो वास्तविक तैनात क्रिप्टो में बार-बार दिखाई देती हैं। यह 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 हस्ताक्षरों को अतिरिक्त रूप से cryptography लाइब्रेरी का उपयोग करके एक स्वतंत्र Python कार्यान्वयन के विरुद्ध क्रॉस-चेक किया गया था।
BLAKE3 संदर्भ वेक्टर BLAKE3 विनिर्देश के साथ इसके लेखकों द्वारा प्रकाशित आधिकारिक परीक्षण कोष हैं। वे 0 से 102400 बाइट्स तक की 35 इनपुट लंबाई को कवर करते हैं, विशेष रूप से सभी आंतरिक चंक और ट्री-हैशिंग सीमा स्थितियों का परीक्षण करने के लिए चुने गए हैं जो छोटे-इनपुट परीक्षणों के लिए अदृश्य हैं। सभी तीन BLAKE3 मोड — डिफ़ॉल्ट हैश, कुंजीबद्ध हैश, और डेराइव-की — कवर किए गए हैं। BLAKE3 का उपयोग इस फर्मवेयर में HKDF कुंजी व्युत्पत्ति और कैस्केड सिफर प्रोफ़ाइलों में अंतर-परत अखंडता जाँच के लिए किया जाता है; सीमा कवरेज मायने रखती है क्योंकि BLAKE3 का ट्री निर्माण केवल 1024 बाइट्स से ऊपर सक्रिय होता है।
परीक्षण सूट आपूर्ति श्रृंखला के लिए छेड़छाड़ का पता लगाने वाला भी है। इस फर्मवेयर में सभी क्रिप्टोग्राफिक प्राइमिटिव ऑडिट किए गए RustCrypto क्रेट्स से आते हैं — कोई क्रिप्टोग्राफी इन-ट्री लागू नहीं की गई है। क्योंकि उपरोक्त अनुरूपता वेक्टर हर cargo test --workspace पर उन क्रेट्स के विरुद्ध चलाए जाते हैं, कोई भी निर्भरता जिसके साथ छेड़छाड़ की गई है या जिसे प्रतिस्थापित किया गया है, समझौता किए गए कोड को तैनात सिस्टम तक पहुँचने से पहले एक ज्ञात-उत्तर परीक्षण विफलता उत्पन्न करेगी। python3 scripts/verify_cascade_kats.py एक दूसरा स्वतंत्र पथ जोड़ता है: एक Python कार्यान्वयन कैस्केड KAT फिक्स्चर में समान मध्यवर्ती मानों की जाँच करता है, इसलिए यहाँ तक कि एक समझौता किया गया Rust टूलचेन जो गलत आउटपुट उत्पन्न करता है, क्रॉस-चेक द्वारा पकड़ा जाता है। यह C लाइब्रेरी से बंधने की तुलना में एक सार्थक रूप से मजबूत आपूर्ति श्रृंखला अखंडता कहानी है, जहाँ हर आंतरिक ऑपरेशन के समकक्ष सत्यापन के लिए काफी अधिक प्रयास और विशेषज्ञ टूलिंग की आवश्यकता होती है।
अब पाठक पर निर्भर है कि वह निर्णय करे कि ये दावे झूठे हैं या नहीं।
आप इसे USB पोर्ट में प्लग करते हैं। होस्ट के दृष्टिकोण से फर्मवेयर क्रिप्टो मोड या छलावरण मोड प्रस्तुत कर सकता है। क्रिप्टो मोड में आपका कंप्यूटर एक स्मार्ट कार्ड देखता है: आप GnuPG या एक संगत OpenPGP स्टैक (GnuPG क्या है?) का उपयोग उसी तरह करते हैं जैसे आप किसी अन्य हार्डवेयर सुरक्षा टोकन का उपयोग करते हैं — टोकन संवेदनशील क्रिप्टोग्राफिक ऑपरेशनों को संभालता है ताकि आपकी निजी कुंजियाँ आपके कंप्यूटर पर कभी भी असुरक्षित मौजूद न हों। छलावरण मोड में यह सामान्य हटाने योग्य स्टोरेज के रूप में हानिरहित दिखने वाली फ़ाइलों के साथ प्रस्तुत हो सकता है ताकि एक त्वरित नज़र इसकी वास्तविक भूमिका को प्रकट न करे; नीचे स्टोरेज छलावरण देखें।
GnuPG का अर्थ है GNU Privacy Guard। यह OpenPGP का GNU परियोजना का कार्यान्वयन है, जो कुंजी प्रबंधन और क्रिप्टोग्राफिक रूप से संरक्षित संदेशों के लिए खुला मानक है (PGP के समान अवधारणात्मक परिवार, लेकिन RFC 4880 और सामुदायिक अद्यतनों जैसे दस्तावेज़ों में निर्दिष्ट)। आप इसे सामान्य रूप से Linux, BSD, macOS, या Windows पर gpg कमांड के रूप में चलाते हैं; कई ग्राफिकल मेल और कुंजी उपयोगिताएँ इसके नीचे इसे लपेटती हैं।
लोग 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 होस्ट पर प्राथमिक अंतर-संचालन लक्ष्य है: यह फर्मवेयर CCID पर OpenPGP कार्ड एप्लिकेशन लागू करता है, जिसे 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 त्वरण के बिना हार्डवेयर पर कुशल होने के लिए डिज़ाइन किया गया था, जिससे CPU समय और होस्ट बिजली की खपत कम होती है; P-256 इस फर्मवेयर में तीन Brainpool वक्रों में सबसे छोटा है), और किसी भी NIST-डिज़ाइन किए गए प्राइमिटिव पर निर्भर नहीं करता है। यदि आपको एकल सिफर के विरुद्ध भविष्य के क्रिप्टैनालिटिक ब्रेक के विरुद्ध उच्च मार्जिन की आवश्यकता है, तो conservative प्रोफ़ाइल शीर्ष पर एक Serpent-256 परत जोड़ता है।
एल्गोरिदम विकल्प जानबूझकर हैं। उपयोग किए गए सिफर — ChaCha20-Poly1305, Serpent, Twofish, Camellia — सभी सरकारी मानक निकायों से स्वतंत्र रूप से डिज़ाइन किए गए थे। AES और NIST सूट को जानबूझकर बाहर रखा गया है। यह उन उपयोगकर्ताओं और संगठनों के लिए एक सचेत विकल्प है जो किसी एक देश की मानक प्रक्रिया से क्रिप्टोग्राफिक स्वतंत्रता चाहते हैं। Camellia का मूल्यांकन स्वतंत्र रूप से EU NESSIE परियोजना और जापान के CRYPTREC कार्यक्रम द्वारा किया गया था, और यह RFC 3713 और ISO/IEC 18033-3 में निर्दिष्ट है।
एक गलत PIN आपको ठीक से लॉक कर देता है। टोकन PIN सही है या नहीं यह जाँचने से पहले विफल PIN प्रयासों की गणना करता है, बाद में नहीं। इसका मतलब है कि प्रयास के बीच में एक क्रैश या बिजली की हानि का उपयोग काउंटर को रीसेट करने के लिए नहीं किया जा सकता। बहुत अधिक गलत प्रयासों के बाद टोकन संवेदनशील सामग्री को शून्य कर देता है।
यह अभी तक क्या नहीं करता है। अभी तक कोई हार्डवेयर उपलब्ध नहीं है — यह सक्रिय विकास के अधीन फर्मवेयर है। वास्तविक USB हार्डवेयर और GnuPG के साथ एंड-टू-एंड परीक्षण एक भविष्य का मील का पत्थर है। NFC परिवहन और दरवाज़े-शैली पहुँच रीडर दस्तावेज़ीकरण में एकीकरण लक्ष्यों के रूप में वर्णित हैं, अभी तक शिप किए गए व्यवहार के रूप में नहीं। दस्तावेज़ीकरण में वर्णित बायोमेट्रिक तीसरा कारक अभी तक लागू नहीं किया गया है। कुछ टाइमिंग साइड-चैनल परीक्षण जिनके लिए वास्तविक हार्डवेयर की आवश्यकता होती है, तब तक पूरे नहीं हो सकते जब तक कोई डिवाइस मौजूद न हो।
Galdralag एक साथ दो अलग-अलग प्रकार की असममित कुंजियों के साथ काम कर सकता है। वे डिवाइस और होस्ट पर अलग-अलग प्रश्नों का उत्तर देते हैं, और वे विनिमेय नहीं हैं भले ही वे एक ही व्यक्ति की हों। अनुभाग OpenPGP और GnuPG संगतता, विश्वास का जाल और कुंजी हस्ताक्षर पार्टियाँ, Galdra संपर्क मेटाडेटा, और मेटाडेटा तुलना (GnuPG बनाम Galdra) प्रत्येक स्टैक का अधिक विस्तार से वर्णन करते हैं; यहाँ वे रोज़मर्रा के शब्दों में कैसे भिन्न हैं।
एक OpenPGP कुंजी, जिस अर्थ में GnuPG उत्पन्न और उपयोग करता है, एक संरचित पैकेट है, न कि एक नंगी सार्वजनिक संख्या। यह प्राथमिक कुंजी, हस्ताक्षर और एन्क्रिप्शन के लिए उपकुंजियाँ, और एक या अधिक User ID — आमतौर पर एक प्रदर्शन नाम और एक ईमेल पता जैसे Alice Example <[email protected]> — को बंडलयह विभाजन इसलिए मौजूद है क्योंकि Galdralag जिन समुदायों को लक्षित करता है, उनमें मायने रखने वाली पहचान जानकारी — कॉलसाइन, DMR ID, रेडियो नेटवर्क संबद्धता — का OpenPGP User ID में कोई स्वाभाविक स्थान नहीं है। User ID नाम और ईमेल के लिए होता है। User ID स्ट्रिंग में LA5XYZ <[email protected]> DMR:2345678 जैसा कुछ लिखना अनौपचारिक, असंरचित है, और किसी भी मानक तरीके से मशीन-पठनीय नहीं है। Galdra कुंजियाँ क्रिप्टोग्राफ़िक सामग्री को स्वच्छ रखती हैं और परिचालन पहचान को एक रिकॉर्ड प्रारूप में रखती हैं जिसे होस्ट टूल और ऑन-चिप स्टोर मूल रूप से समझते हैं।
व्यवहार में, एक ही डिवाइस बिना किसी टकराव के दोनों प्रकार की कुंजियाँ रख सकता है। OpenPGP कार्ड एप्लिकेशन मानक SIG, DEC, और AUT स्लॉट के माध्यम से GnuPG की सेवा करता है। संपर्क स्टोर परिचालन कार्य के लिए Galdra कुंजियाँ रखता है — उदाहरण के लिए कॉलसाइन द्वारा रेडियो संपर्क को एन्क्रिप्ट करना, DMR सब्सक्राइबर ID के विरुद्ध संदेश की जाँच करना, या बैज नंबर द्वारा सहकर्मी को खोजना। ये दोनों मार्ग एक-दूसरे के साथ हस्तक्षेप नहीं करते।
यदि किसी के पास होस्ट पर GnuPG द्वारा प्रबंधित OpenPGP प्रमाणपत्र और ऑन-चिप संपर्क स्टोर में Galdra कुंजी है, तो वे दो अलग-अलग कुंजियाँ हैं जिनके दो अलग-अलग फ़िंगरप्रिंट हैं। Galdra फ़िंगरप्रिंट — G: उपसर्ग के साथ और कच्चे सार्वजनिक कुंजी बाइट्स से BLAKE3 के साथ व्युत्पन्न — उस व्यक्ति के GnuPG प्रमाणपत्र के OpenPGP v4 फ़िंगरप्रिंट के समान मान नहीं है। होस्ट टूल और डिवाइस उन्हें स्वतंत्र पहचान के रूप में मानते हैं। दोनों की जाँच किए बिना यह न मानें कि एक फ़िंगरप्रिंट दूसरे का संकेत देता है।
कोई भी कुंजी प्रकार स्वचालित रूप से उसके आस-पास के लेबलों की पुष्टि नहीं करता। OpenPGP User ID तब तक स्व-घोषित है जब तक कोई और उस पर हस्ताक्षर नहीं करता। Galdra संपर्क रिकॉर्ड में कॉलसाइन या DMR फ़ील्ड केवल उसके स्रोत जितना ही विश्वसनीय है — कुंजीसर्वर फ़ेच, मैन्युअल प्रविष्टि, या आपके द्वारा स्वयं किया गया आउट-ऑफ-बैंड सत्यापन। प्रोवेनेंस लेबल (SelfAttested, HostVerified, RegistrySync, OobVerified) रिकॉर्ड करते हैं कि कोई फ़ील्ड कैसे आई; वे उस पहचान को वास्तव में सत्यापित करने के कार्य को प्रतिस्थापित नहीं करते जिसकी आपको परवाह है।
यह फ़र्मवेयर Rust में लिखा गया है, एक सिस्टम प्रोग्रामिंग भाषा जिसे C या C++ जितनी तेज़ और निम्न-स्तरीय होने के लिए डिज़ाइन किया गया है, लेकिन सुरक्षा के प्रति मौलिक रूप से भिन्न दृष्टिकोण के साथ।
प्रत्येक निर्भरता को अपरिवर्तित अपस्ट्रीम (crates.io पर प्रकाशित), परिवर्तित या इन-ट्री वेंडर किया गया (पिन की गई प्रति या वर्कस्पेस पैच), या इस प्रोजेक्ट द्वारा निर्मित (फ़र्मवेयर, होस्ट, और टूलिंग क्रेट) के रूप में वर्गीकृत किया गया है। पूरी सूची, भूमिकाएँ, और निर्भरता ग्राफ़ docs/CRATE_DEPENDENCIES.md में हैं।
उद्योग कोडबेस में सुरक्षा-संबंधी बगों का एक बड़ा हिस्सा मेमोरी असुरक्षा (बफ़र ओवरफ़्लो, यूज़-आफ्टर-फ़्री, नल डेरेफ़रेंस, और इसी तरह) से आता है। Microsoft के MSRC ने बार-बार रिपोर्ट किया है कि उनके अपने उत्पादों में संबोधित लगभग 70% CVE इस श्रेणी में आते हैं; Chrome टीम ने Chrome के लिए समान अनुपात प्रकाशित किए हैं। ये आंकड़े उन विक्रेताओं के उत्पादों का वर्णन करते हैं, सभी फ़र्मवेयर के लिए एक सार्वभौमिक नियम नहीं, लेकिन वे दर्शाते हैं कि मेमोरी-सुरक्षित भाषाएँ क्यों मायने रखती हैं।
सुरक्षित Rust (डिफ़ॉल्ट) में, बॉरो चेकर कंपाइल समय पर डेटा रेस और सामान्य अपरिभाषित-व्यवहार मेमोरी त्रुटियों को बिना गार्बेज कलेक्शन पर निर्भर हुए समाप्त कर देता है। असुरक्षित Rust और C के लिए FFI अभी भी मेमोरी बग पेश कर सकते हैं; उन्हें छोटा और समीक्षित रखा जाना चाहिए।
Rust की स्लाइस पर बाउंड्स चेकिंग और इसके स्वामित्व नियम C/C++ एम्बेडेड कोड में सामान्य विफलता मोड की कई श्रेणियों को कम करते हैं:
unsafe ब्लॉक स्पष्ट होने चाहिए; रजिस्टरों के लिए MMIO और कच्चे पॉइंटर वहाँ रहते हैं, ताकि समीक्षक ऑडिट सतह के लिए grep कर सकें (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) लक्ष्यों का उपयोग करती है। सारांश और मैट्रिक्स Test results में हैं; रिकॉर्ड किया गया रन मेटाडेटा 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
VM के अंदर, मानक बिल्ड निर्देश लागू होते हैं। प्रत्येक प्रयोग से पहले VM का **स्नैपशॉट** लिया जा सकता है और यदि कुछ गलत हो जाए तो उसे साफ-सुथरे तरीके से **रोल बैक** किया जा सकता है।
### जोखिम मूल्यांकन और परिनियोजन
**अंततः, यह फर्मवेयर आपके वातावरण में तैनात करने के लिए सुरक्षित है या नहीं, यह निर्णय केवल आप ही ले सकते हैं**, जो आपके अपने जोखिम मूल्यांकन, आप जिस चीज़ की सुरक्षा कर रहे हैं उसकी संवेदनशीलता, और क्या आप परिनियोजन से पहले किसी स्वतंत्र तृतीय-पक्ष ऑडिट की प्रतीक्षा करना चुनते हैं, पर आधारित है। इस परियोजना का उद्देश्य आपको वह निर्णय स्वयं लेने के लिए आवश्यक सभी जानकारी देना है।
संपत्तियों, खतरों **T1–T14**, स्पष्ट गैर-लक्ष्यों, और Q2 सत्यापन अंतरालों की एक संरचित सूची **[docs/THREAT_MODEL.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/THREAT_MODEL.md)** में है।
---
## नाम के बारे में
**Galdr** पुरानी नॉर्स भाषा में बोले गए या गाए गए जादू की प्रथा है: मंत्र जो बांधने, सुरक्षा करने या प्रकट करने के लिए उपयोग किए जाते हैं। गाथाओं में यह मंत्र को कास्ट करने की क्रिया का नाम है, न कि केवल शब्दों का। कभी-कभी इसका उपयोग जादुई रूनिक शिलालेखों को सक्रिय करने के लिए भी किया जाता था, जैसे [Kragehul I lance shaft](https://en.wikipedia.org/wiki/Kragehul_I), [Lindholm amulet](https://en.wikipedia.org/wiki/Lindholm_amulet), [Vadstena bracteate](https://en.wikipedia.org/wiki/Vadstena_bracteate), और अन्य Elder Futhark खोजों पर।
**Galdralag** galdr के लिए उपयोग किया जाने वाला मीट्रिक रूप है: संरचित, सटीक, नियम-बद्ध पद्य जिसमें पैटर्न मंत्र की शक्ति का हिस्सा होता है। प्रत्यय *lag* "कानून" या "पैटर्न" के समान है।
**Runes** वस्तुतः गुप्त, एन्कोडेड ज्ञान थे — शैमैनिक उपयोग केवल उन्हीं को ज्ञात था जो इसे समझते थे।
---
## दस्तावेज़ीकरण
**शब्दावली:** [docs/GLOSSARY.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/GLOSSARY.md) — **सरल भाषा** में समझाए गए शब्द (A–Z क्रमबद्ध)। यदि README या अन्य दस्तावेज़ शब्दजाल से भरे लगें तो यहाँ से शुरू करें।
**डिबगिंग:** [docs/DEBUG_INSTRUCTIONS.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/DEBUG_INSTRUCTIONS.md) — बैकट्रेस, `cargo test` को संकीर्ण करना, `xtask` शॉर्टकट, फर्मवेयर ट्रिपल चेक, फज़िंग, और समस्या रिपोर्ट करने से पहले क्या एकत्र करना है।
**AI सहायक (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 टोकन **बिना** माइक्रो-एसडी); और [Hardware/kicad-sd-card/](https://github.com/supermagnum/galdralag-firmware/blob/main/Hardware/kicad-sd-card) — `dabao_v3c_sdcard` (समान आधार लेआउट **साथ** माइक्रो-एसडी होल्डर), गेरबर्स, BOM, उत्पादन आउटपुट, और [पिनआउट दस्तावेज़](https://github.com/supermagnum/galdralag-firmware/blob/main/Hardware/kicad-sd-card/docs/pinout/README.md)। USB-A डोंगल PCB लेआउट (न्यूनतम टोकन बनाम 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) | **USB डोंगल** KiCad प्रोजेक्ट `dabao_v3c` (कोई माइक्रो-एसडी नहीं); गेरबर्स, BOM, उत्पादन आउटपुट; [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) | **USB डोंगल** KiCad प्रोजेक्ट `dabao_v3c_sdcard` (माइक्रो-एसडी होल्डर); गेरबर्स, BOM, [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**: WoT-उन्मुख OpenPGP सार्वजनिक-कुंजी रजिस्ट्री (सर्वर रिपॉजिटरी और कार्यान्वयन)। **अभी तक कोई सार्वजनिक रजिस्ट्री इंस्टेंस नहीं चल रहा है**; एक की योजना है। **`galdra keyserver push`** / **`galdra keyserver fetch`** और वैकल्पिक **`[keyserver]`** कॉन्फ़िग इस इकोसिस्टम को लक्षित करते हैं—यह भी देखें [Web of Trust and Key Signing Parties](#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) | गैर-तकनीकी पाठकों के लिए **सरल-भाषा शब्दावली** (A–Z); तकनीकी विवरण लिंक किए गए दस्तावेज़ों में रहता है |
| [CLAUDE.md](https://github.com/supermagnum/galdralag-firmware/blob/main/CLAUDE.md) | **Claude** / AI कोडिंग एजेंटों के लिए निर्देश; **Cursor** के लिए [`.cursor/rules/`](https://github.com/supermagnum/galdralag-firmware/blob/main/.cursor/rules) की ओर इशारा करता है |
| [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) | Shamir और OpenPGP पर एक इंटीग्रेटर एक्सटेंशन पैटर्न के रूप में दो- (या N-) हार्डवेयर-कुंजी कोरम; फर्मवेयर द्वारा लागू नहीं किया गया |
| [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) संरेखण: Mode A वायर लेआउट, [ALGORITHM-REGISTRY.md — लुकअप टेबल](https://github.com/Supermagnum/CESS/blob/main/ALGORITHM-REGISTRY.md#cipher-suite-identifier-lookup-table) से `suite_id`, विचलन रजिस्टर (CESS-CORE बनाम बनाए रखा AES/SHA-2), रोडमैप |
| [crates/cess](https://github.com/supermagnum/galdralag-firmware/blob/main/crates/cess) | CESS Mode 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) | **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, क्या बचाव किया गया है और क्या नहीं, Q2 हार्डवेयर पर लंबित असत्यापित आइटम, ऑडिट स्थिति |
| [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) | Q2 पहले-हार्डवेयर ब्रिंग-अप: `galdralag-service` के साथ इमेज, libccid `1D50:6197`, ATR → `gpg --card-status` APDUs, Dabao लैब PINs (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` + SPI microSD वैकल्पिक बल्क स्टोरेज के रूप में; PSRAM के लिए BOM विकल्प |
| [docs/USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/USB_DONGLE_PCB.md) | Dabao संदर्भ से USB-A डोंगल PCB कैसे बनाएं: Pico-प्रारूप मूल्यांकन फर्मवेयर ब्रिंग-अप के लिए है; यह न्यूनतम टोकन के लिए GPIO हेडर हटाता है; KiCad, FreeCAD, 5 V / 500 mA बनाम 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 कार्ड एप्लिकेशन** को लागू करता है ([docs/OPENPGP_CARD.md](https://github.com/supermagnum/galdralag-firmware/blob/main/docs/OPENPGP_CARD.md) में संस्करण **3.4.1** के रूप में प्रलेखित)। यह उसी श्रेणी का डिवाइस है जिसे GnuPG **CCID/USB** पर **OpenPGP स्मार्ट कार्ड** के लिए चलाता है: होस्ट को एक सामान्य स्मार्ट कार्ड स्टैक (`pcscd`, `ccid` ड्राइवर, GnuPG का `scdaemon`) की आवश्यकता होती है। किसी भी OpenPGP कार्ड के लिए आप जो उपयोग करेंगे उससे परे **कोई कस्टम होस्ट-साइड क्रिप्टोग्राफ़िक ड्राइवर** आवश्यक नहीं है।
**यह होस्ट पर क्या सक्षम करता है (एक बार डिवाइस CCID रीडर के रूप में दिखाई देने पर):**
| क्षेत्र | नोट्स |
|------|--------|
| **GnuPG वर्कफ़्लो** | `gpg --card-status`, `gpg --card-edit`, कार्ड पर कुंजियों का उपयोग करके एन्क्रिप्ट/डिक्रिप्ट और साइन करना |
| **SSH** | `enable-ssh-support` और सामान्य `SSH_AUTH_SOCK` सेटअप के साथ `gpg-agent` |
| **मेल और फ़ाइलें** | वे क्लाइंट जो GnuPG का उपयोग करते हैं (जैसे Thunderbird, Evolution, Kleopatra) और मानक `gpg` फ़ाइल एन्क्रिप्शन |
| **अन्य टूल्स** | कुछ भी जो GnuPG के समान OpenPGP कार्ड + CCID से बात करता है |
**कुंजी स्लॉट (विशिष्ट डिफ़ॉल्ट):** **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 संदेश:** **कार्ड** विनिर्देश परिभाषित करता है कि टोकन CCID पर PIN, कुंजी स्लॉट और ऑन-कार्ड संचालन कैसे उजागर करता है। **GnuPG** इसे `scdaemon` के माध्यम से उपयोग करता है। फ़ाइलों और मेल के लिए **OpenPGP संदेश प्रारूप** (RFC 4880 और उत्तराधिकारी) एक **होस्ट-साइड** परत है: कार्ड कुंजियाँ प्रदान करता है; GnuPG अभी भी PC पर संदेश प्रारूप लागू करता है। न तो कार्ड विनिर्देश और न ही RFC 4880 **Shamir स्प्लिटिंग**, **एफेमरल ECDH सत्र**, या **सिफर प्रोफ़ाइल** को परिभाषित करता है — वे [फर्मवेयर-विशिष्ट](#standards-vs-firmware-specific-features) हैं।
**एकीकरण स्थिति:** OpenPGP और CCID लॉजिक **`usb-personality`**, **`baochip-openpgp`**, और **Xous** **`usb-bao1x`** सेवा में रहता है (**`feature/usb-bao1x-ccid-openpgp`** पर **xous-core** देखें)। वैकल्पिक **`galdralag-service`** (`services/galdralag`) **CCID** IPC के लिए **`usb-bao1x`** से जुड़ता है और **XfrBlock** APDUs का उत्तर देता है; 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](#known-limitations--open-work) के अंतर्गत आइटम की आवश्यकता है।
## टोकन सत्र और कुंजी निर्यात
**भौतिक डिस्कनेक्ट (अनप्लग):** होस्ट USB डिवाइस खो देता है; कोई भी चालू संचालन तब तक विफल रहता है जब तक टोकन फिर से कनेक्ट और पुनः-एन्यूमरेट नहीं हो जाता। डिवाइस पर, OpenPGP **कार्ड सत्र** साफ़ हो जाता है: **PIN सत्यापन स्थिति** पावर-ऑफ या हटाने पर जीवित नहीं रहती, इसलिए अन्य OpenPGP स्मार्ट कार्डों की तरह, पुनः कनेक्ट करने के बाद **साइनिंग, डिक्रिप्शन और अन्य संरक्षित संचालन के लिए फिर से VERIFY PIN की आवश्यकता होती है**। **निजी कुंजी सामग्री सील किए गए वॉल्ट स्टोरेज में टोकन पर संग्रहीत रहती है**; अनप्लग करने से यह मिटती नहीं है जब तक कि कोई अलग **ज़ीरोइज़ेशन** या वाइप पथ न चले।
**डिवाइस से क्या बाहर जा सकता है:** डिज़ाइन के अनुसार, **केवल सार्वजनिक कुंजी सामग्री** को 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) में वर्णित है क्योंकि एकीकरण परिपक्व होता है।
---
## Web of Trust और Key Signing Parties
OpenPGP और **GnuPG** यह सत्यापित करने में मदद करने के लिए एक विकेंद्रीकृत ट्रस्ट मॉडल—**web of trust**—का उपयोग करते हैं कि किसके पास कौन सी कुंजियाँ हैं और किसी दिए गए **सार्वजनिक कुंजी** पर भरोसा करना है या नहीं। वह मॉडल पूरी तरह से **होस्ट-साइड** है। जहाँ [German eID and Governikus](#german-eid-and-governikus-as-a-trust-anchor-for-public-keys) जैसे चिप-समर्थित प्रमाणीकरण अनुपलब्ध या अनुचित हैं, यह सामान्य विकेंद्रीकृत विकल्प है (**key signing parties**, प्रमाणपत्रों पर हस्ताक्षर); जहाँ वे **उपलब्ध** हैं, दोनों दृष्टिकोण पूरक पथों के रूप में सह-अस्तित्व में रह सकते हैं।
**Galdralag फ़िंगरप्रिंट (`G:`):** व्यक्तिगत सत्यापन वर्कफ़्लो के लिए, **Galdra** टोकन की **SIG** सार्वजनिक कुंजी से व्युत्पन्न एक **डिवाइस-बद्ध** फ़िंगरप्रिंट दिखा सकता है (**BLAKE3-160**, `G:` उपसर्ग)। यह OpenPGP v4 प्रमाणपत्र फ़िंगरप्रिंट **नहीं** है। यह **केवल** तब उपलब्ध है जब सक्रिय **सिफर प्रोफ़ाइल** में **`ephemeral_ecdh: false`** हो; बिल्ट-इन प्रोफ़ाइल डिफ़ॉल्ट रूप से **`ephemeral_ecdh: true`** होती हैं, इसलिए आप आमतौर पर **WoT**-शैली होस्ट साइनिंग के स```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 चलाएँ ताकि निरस्तीकरण और नए हस्ताक्षर स्थानीय रूप से प्रचारित हों।galdra profile show <name> के साथ पुष्टि करें कि सक्रिय प्रोफ़ाइल में ephemeral_ecdh: false है।gpg के आधिकारिक व्यवहार, विश्वास मॉडल और वितरण विकल्पों के लिए, GnuPG मैनुअल और अपस्ट्रीम दस्तावेज़ देखें।
| फ़ील्ड | उद्देश्य | होस्ट (galdra SQLite) | ऑन-चिप संपर्क स्टोर | प्रारूप / सीमा |
|---|
| संपर्क id | स्थिर होस्ट प्राथमिक कुंजी | हाँ | नहीं | टेक्स्ट (SQLite में id) |
| प्रदर्शन नाम | मानव-पठनीय लेबल | हाँ | हाँ | UTF-8 स्ट्रिंग; चिप पर प्रति हीप फ़ील्ड अधिकतम 240 बाइट्स |
| ई-मेल | प्राथमिक मेल पता | हाँ | हाँ | UTF-8 स्ट्रिंग; ई-मेल स्कैन द्वारा चिप पर लुकअप |
| कॉलसाइन | शौकिया-रेडियो कॉलसाइन | हाँ | हाँ | 12 बाइट्स, NUL-पैडेड; चिप पर लुकअप |
| DMR सब्सक्राइबर ID | DMR रेडियो ID | हाँ | हाँ | 32-बिट अहस्ताक्षरित (0 = अनुपस्थित); चिप पर लुकअप |
| बैज नंबर | कर्मचारी या बैज ID | हाँ | हाँ | UTF-8 स्ट्रिंग |
| संगठन | एजेंसी या नियोक्ता | हाँ | हाँ | UTF-8 स्ट्रिंग |
| विभाग | टीम या इकाई | हाँ | हाँ | UTF-8 स्ट्रिंग |
| भूमिका | नौकरी या कार्य लेबल | हाँ | हाँ | UTF-8 स्ट्रिंग |
| नोट | मुक्त-रूप टिप्पणी | हाँ | हाँ | UTF-8 स्ट्रिंग |
| रेडियो संबद्धता | क्लब, नेट, या गठबंधन लेबल | हाँ | हाँ | UTF-8 स्ट्रिंग |
| गली | सड़क पता पंक्ति | हाँ | हाँ | UTF-8 स्ट्रिंग |
| देश | देश का नाम या कोड | हाँ | हाँ | UTF-8 स्ट्रिंग |
| पोस्टल कोड | ZIP या पोस्टल कोड | हाँ | हाँ | UTF-8 स्ट्रिंग |
| क्षेत्र | राज्य, काउंटी, या क्षेत्र | हाँ | हाँ | UTF-8 स्ट्रिंग |
| Fluxer ID | Fluxer हैंडल या id | हाँ | हाँ | UTF-8 स्ट्रिंग |
| Discord ID | Discord उपयोगकर्ता id | हाँ | हाँ | UTF-8 स्ट्रिंग |
| IRC id | 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-बिट टाइमस्टैम्प |
| समाप्ति समय | कुंजी समाप्ति समय | हाँ | नहीं | केवल SQLite में UTC डेटाटाइम |
| कुंजी स्रोत | होस्ट रिकॉर्ड कैसे बनाया गया | हाँ (source) | नहीं | जैसे मैनुअल, keyserver, WKD, LDAP, फ़ाइल, पीयर |
| फ़ील्ड उत्पत्ति | प्रति मेटाडेटा फ़ील्ड ट्रस्ट लेबल | नहीं | हाँ (source_map) | प्रति फ़ील्ड दो बिट: SelfAttested, HostVerified, RegistrySync, OobVerified |
| रिकॉर्ड फ़्लैग | सक्रिय, स्टेल, स्व-पहचान, रद्द | आंशिक रूप से (होस्ट लॉजिक) | हाँ | जैसे चिप पर STALE, SELF_KEY |
crates/vault/tests/twofish_vectors.jsoncrates/cipher-profile/tests/fixtures/cascade_cess_kat.jsoncargo test --workspacepython3 scripts/verify_cascade_kats.py