
Baochip-1x के लिए क्रिप्टोग्राफिक ढांचे का एक प्रयास।

यह परियोजना ओपन इन्वेंशन नेटवर्क (OIN) के साथ पंजीकृत है। OIN एक रक्षात्मक पेटेंट पूल है: सदस्य लिनक्स-संबंधित पेटेंटों को क्रॉस-लाइसेंस देते हैं ताकि प्रतिभागी कम पेटेंट जोखिम के साथ ओपन-सोर्स सॉफ़्टवेयर भेज और उपयोग कर सकें।
स्थिति: परीक्षण के लिए हार्डवेयर आने की प्रतीक्षा है। https://www.crowdsupply.com/baochip/dabao/updates/our-campaign-has-launched
Baochip-1x (Dabao मूल्यांकन बोर्ड) उपकरणों के लिए फर्मवेयर जो Xous माइक्रोकर्नेल पर चलता है, 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 उपयोगकर्ता आईडी से बंधे नहीं हैं जब तक कि आप स्वयं उन्हें संरेखित न करें, और क्रिप्टोग्राफिक रूप से दावा नहीं किए गए हैं जब तक कि आप उन्हें आउट ऑफ बैंड जाँच न करें। वैकल्पिक 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 कार्ड उपयोग है, बाजार के हर टोकन प्रोटोकॉल के लिए नहीं।
यह फर्मवेयर नहीं है:
उन्हीं बाधाओं के साथ संरेखित क्रेट-स्तरीय बहिष्करण docs/future-todo.md में स्पष्ट रूप से बहिष्कृत क्रेट के अंतर्गत सूचीबद्ध हैं।
CESS: यह फर्मवेयर पेड़ में लागू मानक निर्माणों के लिए CESS के अनुरूप है (जिसमें मोड 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 पर एक प्रतिलिपि प्रस्तुत करने योग्य बूटलोडर के साथ।
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 एक बिल्ड-ऑर्केस्ट्रेशन क्रेट है। जब आप इसके परीक्षण चाहते हैं तो cargo test -p xtask चलाएँ।#[ignore] चिह्नित परीक्षण: ये तब तक छोड़े जाते हैं जब तक आप --ignored (और कोई आवश्यक क्रेट फ़िल्टर) पास नहीं करते। कारणों में शामिल हैं: कवरेज जो पहले से केंद्रित इकाई परीक्षणों में प्रयोग किया गया है (जैसे पोस्ट-ड्रॉप शून्यीकरण), धीमे मामले (जैसे RSA कुंजी पीढ़ी), और होस्ट टूल्स जैसे galdra में हार्डवेयर या टोकन-आश्रित प्रवाह जिन्हें कनेक्टेड डिवाइस या फिक्स्चर की आवश्यकता होती है।test-all --no-fuzz: CI या त्वरित रन को छोटा रखने और उस चरण के लिए नाइटली टूलचेन की आवश्यकता से बचने के लिए cargo-fuzz चरण को छोड़ देता है; --no-fuzz के बिना cargo run -p xtask -- test-all चलाएँ, या fuzz लक्ष्यों को अलग से लागू करें (देखें ).कोई PR बंद होने पर इस कमांड से क्रेट की अखंडता भी जाँची जा सकती है: https://github.com/rust-lang/cargo/issues/16850
स्थिति: वास्तविक हार्डवेयर पर मनुष्यों द्वारा परीक्षण के लिए तैयार — कोई उत्पादन-तैयार रिलीज़ मौजूद नहीं। यह Rust में मान्य और ऑडिटेड क्रिप्टो क्रेट का उपयोग करके लिखा गया है। क्रिप्टोग्राफिक प्राइमिटिव विशेष रूप से ऑडिटेड कार्यक्षेत्र निर्भरताओं से लिए गए हैं। पोस्ट-क्वांटम एल्गोरिदम फ़ीचर-गेटेड हैं और PENDING INDEPENDENT AUDIT चिह्नित हैं। देखें पोस्ट-क्वांटम स्थिति.
नोट: इस परियोजना के कुछ हिस्से AI सहायता (Claude, Anthropic) से विकसित किए गए थे। डिज़ाइन, क्रिप्टोग्राफिक विकल्प, और सुरक्षा निर्णयों की समीक्षा किसी पेशेवर क्रिप्टोग्राफर द्वारा नहीं की गई है। इसे एक प्रयोगात्मक परियोजना मानें और अपने स्वयं के आलोचनात्मक निर्णय का उपयोग करें। किसी भी उत्पादन तैनाती से पहले स्वतंत्र विशेषज्ञ समीक्षा की दृढ़ता से अनुशंसा की जाती है।
यह मनुष्यों द्वारा परीक्षण के लिए तैयार है। आप तय करें कि इस सॉफ़्टवेयर को बनाना या चलाना है या नहीं; ऐसी बग हो सकती हैं जो यूनिट टेस्ट, फ़ज़िंग, और अन्य जाँचों ने नहीं पाई हैं। प्रयोग के लिए वैकल्पिक वर्चुअल मशीन का उपयोग करने से आपके होस्ट सिस्टम के जोखिम कम होता है लेकिन समाप्त नहीं होता। विस्तृत परिणाम परीक्षण परिणाम (docs/TEST_RESULTS.md#run-metadata) में हैं। तकनीकी शर्तों की सादा-भाषा परिभाषाएँ (A–Z): शब्दावली.
प्राथमिक डेवलपर को डिस्कैल्कुलिया से संबंधित एक न्यूरोलॉजिकल स्थिति है। डिस्कैल्कुलिया संख्या बोध और संबंधित प्रतीकात्मक प्रसंस्करण को उन तरीकों से प्रभावित करता है जो उनके लिए पारंपरिक प्रोग्रामिंग — हस्त-लेखित कोड संपादन एकमात्र कार्यप्रवाह के रूप में — सहायक टूलिंग (जैसे संवादात्मक AI संपादक) के बिना कार्य योग्य नहीं बनाते हैं। वह बाधा सहीता से अलग है: समीक्षकों को अभी भी परीक्षणों, फ़ज़िंग, और स्वतंत्र ऑडिट को इस पृष्ठ पर कहीं और प्रलेखित अनुसार तौलना चाहिए।
Galdralag की समीक्षा करने वाला एक क्रिप्टोग्राफर या गंभीर कार्यान्वयनकर्ता आमतौर पर गद्य पढ़ने से पहले crates/vault/tests/ और crates/cipher-profile/tests/ खोलेगा। परीक्षण सूट कार्य का प्रमाण है: यह डोमेन ज्ञान को एन्कोड करता है जिसे केवल कथा से प्रतिस्थापित नहीं किया जा सकता है।
यह बिंदु को सभी से छिपाने का कारण नहीं है। परियोजना का मूल्यांकन खरीद के लिए करने वाले लोग, योगदान देने का निर्णय लेने वाले, या क्रिप्टोग्राफिक परीक्षण पद्धति में गहन प्रशिक्षण के बिना कोड शिप करने वाले अभी भी ठोस साक्ष्य की ओर एक संकेत के पात्र हैं।
क्या देखें: अनुरूपता सामग्री में 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 इनपुट लंबाई, सभी तीन मोड), crates/vault/tests/twofish_vectors.json के अंतर्गत Twofish विनिर्देश वेक्टर (मोंटे कार्लो सहित 1203 मामले), और crates/cipher-profile/tests/fixtures/cascade_cess_kat.json के अंतर्गत स्वतंत्र रूप से सत्यापित मध्यवर्ती के साथ परियोजना का अपना CESS कैस्केड KAT फिक्स्चर शामिल है। ये सभी मिलकर वह ग्राउंड ट्रुथ हैं जिसे रनर और समीक्षक cargo test --workspace और python3 scripts/verify_cascade_kats.py के साथ व्यायाम कर सकते हैं।RFC 8439 इंटरनेट इंजीनियरिंग टास्क फोर्स (IETF) द्वारा प्रकाशित है, यह वह संगठन है जो इंटरनेट के आपसी संचालन के कई पहलुओं को मानकीकृत करता है। RFC (Request for Comments) प्रोटोकॉल और अनेक क्रिप्टोग्राफ़िक विनिर्देशों का सामान्य रूप है। RFC 8439 ChaCha20-Poly1305 प्रमाणित एन्क्रिप्शन को परिभाषित करता है (डेनियल बर्नस्टीन के डिज़ाइनों पर आधारित) और इसमें विशिष्ट इनपुट और अपेक्षित आउटपुट के साथ ठोस कार्य उदाहरण शामिल हैं ताकि स्वतंत्र कार्यान्वयन जाँच सकें कि वे बाइट-दर-बाइट मानक से मेल खाते हैं। से शुरू होने वाला व्यापक रूप से पुनरुत्पादित सादा पाठ 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 के अपने डिस्क टूल्स से किया जाता है; टोकन बस कुंजी रखता है। यदि आप कई लोगों के बीच ड्राइव को अनलॉक करने की क्षमता साझा करना चाहते हैं, ताकि कोई एक व्यक्ति अकेला ऐसा न कर सके, शमीर गुप्त साझाकरण और ड्राइव एन्क्रिप्शन देखें।
डिफ़ॉल्ट रूप से GnuPG कुंजियाँ ~/.gnupg के अंतर्गत संग्रहीत करता है। एक OpenPGP स्मार्ट कार्ड के साथ, संवेदनशील निजी कुंजियाँ कार्ड पर रहती हैं; scdaemon (GnuPG सूट का हिस्सा) कार्ड से CCID/USB पर बात करता है जबकि gpg अभी भी होस्ट पर OpenPGP पैकेट्स को असेंबल करता है।
आप इसका उपयोग किस लिए कर सकते हैं। क्रिप्टो मोड में टोकन अन्य OpenPGP स्मार्ट कार्डों के समान कार्य के लिए है: मेल और फ़ाइलों पर हस्ताक्षर और डिक्रिप्ट करना, प्रमाणीकरण करना (उदाहरण के लिए SSH जब आप सामान्य रूप से gpg-agent का उपयोग करते हैं), और दीर्घकालिक निजी कुंजियाँ उस मशीन से दूर रखना जिस पर आप टाइप करते हैं। संगठन इसे टोकन पर शमीर शेयर के साथ जोड़ सकते हैं ताकि कोई एक व्यक्ति पूरा रहस्य न रखे (नीचे आगे वर्णित)। GnuPG होस्ट पर प्राथमिक अंतरसंचालनीयता लक्ष्य है: यह फर्मवेयर CCID पर OpenPGP कार्ड एप्लिकेशन को लागू करता है, जिसे scdaemon चलाता है (gpg --card-status, gpg --card-edit, और कार्ड पर कुंजियों के साथ सामान्य एन्क्रिप्ट/हस्ताक्षर/डिक्रिप्ट)। अन्य सॉफ्टवेयर जो समान स्मार्ट-कार्ड प्रोटोकॉल बोलता है वह भी काम कर सकता है; कमांड, स्लॉट, एल्गोरिदम और वर्तमान एकीकरण सीमाएँ OpenPGP और GnuPG संगतता में हैं। जब NFC हार्डवेयर पर लाया जाता है (योजनाबद्ध एकीकरण — अभी फर्मवेयर में नहीं), तो वही उपकरण वर्ग भौतिक पहुँच का समर्थन कर सकता है: एक दरवाजे, गेट, या लॉक पैनल पर NFC रीडर को टैप करना एक नीति में भाग ले सकता है जो क्रिप्टोग्राफ़िक जाँचों के बाद ही लॉक को जारी करता है (अक्सर PIN, बायोमेट्रिक्स, या तैनाती के आधार पर शमीर-शैली कोरम के साथ संयुक्त)। रीडर और पैनल के लिए PN532-उन्मुख स्केच docs/NFC_PN532_INTEGRATION.md में है।
यह संक्षिप्त संस्करण है। यहाँ बताया गया है कि यह आपके द्वारा देखे गए अन्य टोकन से कैसे भिन्न है।
स्टोरेज कैमोफ्लेज। उपकरण सामान्य हटाने योग्य स्टोरेज के रूप में कार्य कर सकता है ताकि एक त्वरित नज़र से इसकी वास्तविक भूमिका स्पष्ट न हो। जब आप इसे एक सामान्य कंप्यूटर में प्लग करते हैं, तो यह एक सामान्य USB ड्राइव या SD-समर्थित वॉल्यूम की तरह दिखाई दे सकता है; आप दृश्यमान फ़ाइल सिस्टम को प्रशंसनीय रोजमर्रा की फ़ाइलों (उदाहरण के लिए छुट्टियों की तस्वीरें) से भर सकते हैं ताकि आकस्मिक ब्राउज़िंग यह धारणा मजबूत करे कि यह केवल स्टोरेज है। यह एक डेस्क या चेकपॉइंट पर सतही निरीक्षण को विफल करता है। यह पता लगाना कि यह वास्तव में एक सुरक्षा टोकन है, आमतौर पर हाउसिंग को अलग करना होता है, न कि केवल इसे प्लग करना।
आपकी कुंजियाँ उपकरण पर रहती हैं। जब आप एक ईमेल पर हस्ताक्षर करते हैं या एक फ़ाइल को डिक्रिप्ट करते हैं, तो निजी कुंजी कभी भी टोकन नहीं छोड़ती। कंप्यूटर डेटा अंदर भेजता है, टोकन काम करता है, परिणाम बाहर आता है। एक हमलावर जो आपके कंप्यूटर से समझौता करता है, उसे कुछ भी उपयोगी नहीं मिलता।
पिछले सत्र तब भी सुरक्षित रहते हैं भले ही टोकन चोरी हो जाए। अधिकांश हार्डवेयर टोकन सीधे कुंजी समझौते के लिए एक दीर्घकालिक निजी कुंजी का उपयोग करते हैं। यह हर सत्र के लिए एक ताजा डिस्पोजेबल कुंजी जोड़ी उत्पन्न करता है, इसे वास्तविक साबित करने के लिए दीर्घकालिक कुंजी से हस्ताक्षर करता है, और फिर वास्तविक आदान-प्रदान के लिए डिस्पोजेबल जोड़ी का उपयोग करता है। यदि कोई वर्षों बाद टोकन चुराता है और किसी तरह दीर्घकालिक कुंजी निकालता है, तब भी वे पिछले सत्रों से कुछ भी डिक्रिप्ट नहीं कर सकते। इस गुण को फॉरवर्ड सीक्रेसी कहा जाता है, और यह हार्डवेयर टोकन में असामान्य है।
आप कुंजी को कई लोगों के बीच विभाजित कर सकते हैं। टोकन दीर्घकालिक कुंजी को N शेयरों में विभाजित कर सकता है ताकि इसे पुनर्निर्माण करने के लिए उनमें से किसी भी K शेयर की आवश्यकता हो — लेकिन कोई एक शेयर धारक अकेला कुछ नहीं कर सकता। इसे शमीर गुप्त साझाकरण कहा जाता है। यह संगठनात्मक कुंजियों के लिए उपयोगी है जहाँ किसी एक व्यक्ति के पास एकतरफा पहुँच नहीं होनी चाहिए, या एक बैकअप रणनीति के रूप में जहाँ शेयर अलग-अलग स्थानों पर संग्रहीत किए जाते हैं। यह हार्डवेयर टोकन में भी असामान्य है।
एन्क्रिप्शन स्तरित है। आपके डेटा को एकल सिफर से एन्क्रिप्ट करने के बजाय, टोकन इसे कई स्वतंत्र सिफरों के माध्यम से क्रम में चला सकता है — उदाहरण के लिए 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 vs 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 प्रदान करने वाले फर्मवेयर से अपग्रेड किया गया था, वे अभी भी GET DATA पर P-512 गुण लौटा सकते हैं; उन स्लॉटों पर GnuPG संचालन तब सामान्य कार्ड त्रुटियों के साथ विफल होते हैं। पुराने स्लॉटों की पहचान करने के लिए galdra device status चलाएँ (या docs/OPENPGP_CARD.md देखें); हटाने की पृष्ठभूमि CHANGELOG.md में है।
| PW1 / PW3 | कभी संग्रहीत नहीं | चिप पर सत्यापक (न्यूनतम 5 वर्ण, डिफ़ॉल्ट 3 प्रयास) |
| कार्डधारक DOs (लॉगिन, भाषा, URL, …) | GnuPG द्वारा कैश्ड | वैकल्पिक (प्रति DO अधिकतम 254 बाइट्स) |
कार्ड एप्लिकेशन 3.4.1, CCID, और GnuPG कार्यप्रवाह: docs/OPENPGP_CARD.md और OpenPGP और GnuPG संगतता।
यह विभाजन मौजूद है क्योंकि उन समुदायों में जिन्हें Galdralag लक्षित करता है, पहचान की जानकारी जो मायने रखती है — कॉलसाइन, DMR ID, रेडियो नेटवर्क संबद्धता — का OpenPGP उपयोगकर्ता आईडी में कोई प्राकृतिक घर नहीं है। एक उपयोगकर्ता आईडी नाम और ईमेल के लिए है। उपयोगकर्ता आईडी स्ट्रिंग में LA5XYZ <[email protected]> DMR:2345678 जैसा कुछ लिखना अनौपचारिक, असंरचित और किसी भी मानक तरीके से मशीन-पठनीय नहीं है। Galdra कुंजियाँ क्रिप्टोग्राफ़िक सामग्री को साफ रखती हैं और परिचालन पहचान को एक रिकॉर्ड प्रारूप में रखती हैं जिसे होस्ट टूल और ऑन-चिप स्टोर मूल रूप से समझते हैं।
व्यवहार में, एक एकल उपकरण दोनों प्रकार की कुंजियाँ बिना विरोध के रख सकता है। OpenPGP कार्ड एप्लिकेशन मानक SIG, DEC, और AUT स्लॉट के माध्यम से GnuPG की सेवा करता है। संपर्क स्टोर परिचालन कार्य के लिए Galdra कुंजियाँ रखता है — उदाहरण के लिए कॉलसाइन द्वारा एक रेडियो संपर्क को एन्क्रिप्ट करना, DMR ग्राहक आईडी के विरुद्ध एक संदेश की जाँच करना, या बैज नंबर द्वारा एक सहकर्मी को खोजना। दो पथ एक-दूसरे पर कदम नहीं रखते।यदि किसी के पास होस्ट पर GnuPG द्वारा प्रबंधित एक OpenPGP प्रमाणपत्र और ऑन-चिप संपर्क स्टोर में एक Galdra कुंजी है, तो वे दो अलग-अलग कुंजियाँ हैं जिनके दो अलग-अलग फिंगरप्रिंट हैं। Galdra फिंगरप्रिंट — G: उपसर्ग के साथ और कच्चे सार्वजनिक कुंजी बाइट्स से BLAKE3 के साथ व्युत्पन्न — उस व्यक्ति के GnuPG प्रमाणपत्र के OpenPGP v4 फिंगरप्रिंट के समान मान नहीं है। होस्ट टूल और डिवाइस उन्हें स्वतंत्र पहचान के रूप में मानते हैं। यह न मानें कि एक फिंगरप्रिंट दूसरे का संकेत देता है बिना दोनों की जाँच किए।
कोई भी कुंजी प्रकार स्वचालित रूप से उसके चारों ओर के लेबलों की पुष्टि नहीं करता। एक OpenPGP उपयोगकर्ता ID स्व-घोषित होती है जब तक कोई और उस पर हस्ताक्षर न करे। Galdra संपर्क रिकॉर्ड में एक कॉलसाइन या DMR फ़ील्ड केवल उसके स्रोत जितना ही विश्वसनीय है — एक कीसर्वर फ़ेच, एक मैनुअल प्रविष्टि, या एक आउट-ऑफ-बैंड जाँच जो आपने स्वयं की। प्रोवेनेंस लेबल (SelfAttested, HostVerified, RegistrySync, OobVerified) यह रिकॉर्ड करते हैं कि कोई फ़ील्ड कैसे आया; वे वास्तव में उस पहचान को सत्यापित करने के कार्य को प्रतिस्थापित नहीं करते जिसकी आपको परवाह है।
यह फर्मवेयर Rust में लिखा गया है, जो एक सिस्टम प्रोग्रामिंग भाषा है जिसे C या C++ जितना तेज़ और निम्न-स्तरीय बनाने के लिए डिज़ाइन किया गया है, लेकिन सुरक्षा के प्रति मौलिक रूप से भिन्न दृष्टिकोण के साथ।
उद्योग कोडबेस में सुरक्षा-संबंधित बगों का एक बड़ा हिस्सा मेमोरी असुरक्षा (बफ़र ओवरफ़्लो, उपयोग-के-बाद-मुक्त, नल डीरेफ़रेंस, और इसी तरह) से आता है। 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 लेबल का उपयोग करता है (Cryptographic dependency policy)।catch_unwind या abort रणनीतियों का उपयोग करें।unsafe को स्रोत में स्पष्ट रूप से लिखा जाना चाहिए, जो मैन्युअल समीक्षा को सीमित करता है। निर्भरताएँ: इस प्रोजेक्ट की क्रिप्टोग्राफ़िक नीति ऑडिटेड Rust क्रेट्स (RustCrypto और अन्य) को पसंद करती है; Cryptographic dependency policy में तालिका देखें — प्रत्येक निर्भरता एकल छत्र परियोजना से नहीं है।
Rust डेडलॉक (जैसे गलत क्रम वाले Mutex लॉक), लॉजिक बग, गलत प्रोटोकॉल, खराब लूप से फ्लैश वियर, भौतिक हमले (ग्लिचिंग, पावर विश्लेषण), या गलत इमेज के सही बिल्ड से जोखिम को नहीं हटाता। यह सावधानीपूर्वक कोडिंग के बिना सभी हार्डवेयर पर स्थिर-समय निष्पादन की गारंटी भी नहीं देता। वे क्षेत्र डिज़ाइन, समीक्षा, परीक्षण और इस README में अन्यत्र वर्णित प्रोजेक्ट की क्रिप्टो और आपूर्ति श्रृंखला प्रथाओं पर निर्भर करते हैं।
Verification (tests and fuzzing): भाषा के अलावा, यह रिपॉजिटरी यूनिट टेस्ट, इंटीग्रेशन टेस्ट, dudect टाइमिंग हार्नेस और libFuzzer (cargo-fuzz) लक्ष्यों का उपयोग करती है। सारांश और मैट्रिक्स Test results में हैं; रिकॉर्ड किए गए रन मेटाडेटा docs/TEST_RESULTS.md#run-metadata से शुरू होता है। पासिंग टेस्ट उत्पादन तत्परता या कमजोरियों की अनुपस्थिति साबित नहीं करते — वे जोखिम को कम करते हैं। आप निर्णय करें कि आपके वातावरण के लिए बिल्ड या परीक्षण चलाना स्वीकार्य है या नहीं; एक virtual machine वैकल्पिक है लेकिन आपकी मशीन पर ब्लास्ट रेडियस को सीमित करती है।
कोई भी प्रमुख VM प्लेटफ़ॉर्म उपयुक्त है — VirtualBox (मुफ़्त, ओपन सोर्स), QEMU (मुफ़्त, ओपन सोर्स, कमांड-लाइन), या VMware। Linux गेस्ट की सिफारिश की जाती है क्योंकि बिल्ड वातावरण वहाँ सबसे अच्छा समर्थित है।
Quick start with QEMU and 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/HEAD/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** गल्द्र के लिए उपयोग किया जाने वाला मीट्रिक रूप है: संरचित, सटीक, नियम-बद्ध कविता जिसमें पैटर्न मंत्र की शक्ति का हिस्सा है। प्रत्यय *lag* 'कानून' या 'पैटर्न' के समान है।
**रून्स** वस्तुतः गुप्त, एन्कोडेड ज्ञान थे — शैमैनिक उपयोग केवल उन्हीं को पता था जो समझते थे।
---
## दस्तावेज़ीकरण
**ग्लॉसरी:** [docs/GLOSSARY.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GLOSSARY.md) — शर्तों को **सरल भाषा** में समझाया गया (A–Z क्रम में)। यदि README या अन्य दस्तावेज़ों में बहुत अधिक शब्दजाल लगे तो यहीं से शुरू करें।
**डिबगिंग:** [docs/DEBUG_INSTRUCTIONS.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/DEBUG_INSTRUCTIONS.md) — बैकट्रेसेस, `cargo test` को संकीर्ण करना, `xtask` शॉर्टकट, फर्मवेयर ट्रिपल चेक, फ़ज़िंग, और समस्या की रिपोर्ट करने से पहले क्या एकत्र करें।
**AI सहायक (Claude, Cursor):** [CLAUDE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/CLAUDE.md) — कोडिंग एजेंटों के लिए परियोजना निर्देश। Cursor-विशिष्ट नियम: [`.cursor/rules/`](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/.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/HEAD/Hardware/kicad-files-usb/) — `dabao_v3c` (USB-A टोकन **बिना** माइक्रो-एसडी); और [Hardware/kicad-sd-card/](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/Hardware/kicad-sd-card/) — `dabao_v3c_sdcard` (समान बेस लेआउट **साथ** माइक्रो-एसडी होल्डर), गेरबर्स, BOM, उत्पादन आउटपुट, और [पिनआउट दस्तावेज़](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/Hardware/kicad-sd-card/docs/pinout/README.md)। USB-A डोंगल PCB लेआउट (न्यूनतम टोकन बनाम Pico-format eval) का वर्णन [docs/USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/USB_DONGLE_PCB.md) में किया गया है।
| दस्तावेज़ | विवरण |
|----------|-------------|
| [Hardware/kicad-files-usb/](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/Hardware/kicad-files-usb/) | **USB डोंगल** KiCad प्रोजेक्ट `dabao_v3c` (कोई माइक्रो-एसडी नहीं); गेरबर्स, BOM, उत्पादन आउटपुट; [USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/USB_DONGLE_PCB.md) का पूरक |
| [Hardware/kicad-sd-card/](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/Hardware/kicad-sd-card/) | **USB डोंगल** KiCad प्रोजेक्ट `dabao_v3c_sdcard` (माइक्रो-एसडी होल्डर); गेरबर्स, BOM, [docs/pinout](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/Hardware/kicad-sd-card/docs/pinout/README.md) के अंतर्गत पिनआउट; [USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/USB_DONGLE_PCB.md) का पूरक |
| [docs/CODE_MAP.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/CODE_MAP.md) | वर्कस्पेस **फ़ंक्शन और मॉड्यूल इंडेक्स** (लाइन एंकर के साथ प्रति-फ़ाइल `pub fn` / प्रकार) |
| [docs/CRATE_DEPENDENCIES.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/CRATE_DEPENDENCIES.md) | **अपस्ट्रीम बनाम प्रोजेक्ट** Rust क्रेट्स और वे एक-दूसरे पर कैसे निर्भर करते हैं |
| [docs/API_REFERENCE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/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/HEAD/docs/ARCHITECTURE.md) | उच्च-स्तरीय फर्मवेयर आर्किटेक्चर और प्रमुख उपप्रणालियाँ |
| [docs/AUDIT_LOG.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/AUDIT_LOG.md) | प्रोफाइल ऑडिट रिकॉर्ड (`cipher-profile`), OpenPGP `OpenPgpAudit` हुक; **अभी तक कोई एपेंड-ओनली RRAM लॉग लागू नहीं किया गया** |
| [docs/BIOMETRIC_API.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/BIOMETRIC_API.md) | बायोमेट्रिक प्री-गेट: आर्किटेक्चर, वायर फॉर्मेट, वॉल्ट लेआउट; एकीकरण आंशिक रूप से लागू |
| [docs/BIOMETRIC_DEVICE_GUIDE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/BIOMETRIC_DEVICE_GUIDE.md) | नए बायोमेट्रिक हार्डवेयर बैकएंड के लिए समर्थन कैसे जोड़ें |
| [docs/BIOMETRIC_TESTING.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/BIOMETRIC_TESTING.md) | परीक्षण पद्धति: ISO/IEC 30107-3 PAD मीट्रिक्स, डेटासेट, कैसे चलाएँ |
| [docs/FINGERVEIN_DEVICE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/FINGERVEIN_DEVICE.md) | ESP32-CAM ओपन फिंगर वेन डिवाइस: हार्डवेयर, प्रोटोकॉल स्केच, लिवनेस |
| [docs/SWEET_PLATFORM_INTEGRATION.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/SWEET_PLATFORM_INTEGRATION.md) | स्वीट प्लेटफॉर्म हैंड स्कैनर: हार्डवेयर, एकीकरण, लिवनेस, डेटासेट |
| [docs/GALDRA-TOOL.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/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)। पूरक डिज़ाइन नोट्स [docs/server.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/server.md) में बने हुए हैं। |
| [docs/GLOSSARY.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GLOSSARY.md) | गैर-तकनीकी पाठकों के लिए **सरल-भाषा ग्लॉसरी** (A–Z); तकनीकी विस्तार लिंक किए गए दस्तावेज़ों में रहता है |
| [CLAUDE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/CLAUDE.md) | **Claude** / AI कोडिंग एजेंटों के लिए निर्देश; **Cursor** के लिए [`.cursor/rules/`](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/.cursor/rules/) की ओर संकेत करता है |
| [docs/GALDRALAG_DEV_REFERENCE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GALDRALAG_DEV_REFERENCE.md) | टूलचेन, `xtask` कमांड, फ़ज़िंग और क्रिप्टो टेस्ट एंट्री पॉइंट |
| [docs/dev-ref.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/dev-ref.md) | वर्कस्पेस लेआउट, क्रेट्स, HAL ट्रेट्स, USB/PSRAM व्यवहार, सुरक्षा इनवेरिएंट |
| [docs/DEBUG_INSTRUCTIONS.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/DEBUG_INSTRUCTIONS.md) | डिबगिंग: `RUST_BACKTRACE`, वर्बोज़ बिल्ड, स्कोप्ड टेस्ट, `xtask` रेसिपीज़, एम्बेडेड टार्गेट चेक, फ़ज़िंग पॉइंटर्स, OpenPGP होस्ट चेक |
| [docs/KEY_LIFECYCLE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/KEY_LIFECYCLE.md) | कुंजी जनरेशन, आयात, निर्यात नीति, रोटेशन, शून्यीकरण, Shamir (जैसा कि `vault` / OpenPGP में परिलक्षित होता है) |
| [docs/OPENPGP_CARD.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/OPENPGP_CARD.md) | OpenPGP कार्ड एप्लिकेशन, GnuPG/CCID होस्ट सेटअप, कुंजी स्लॉट, एल्गोरिदम, udev |
| [docs/CIPHER_PROFILES.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/CIPHER_PROFILES.md) | सिफर प्रोफाइल प्रणाली और कॉन्फ़िगरेशन |
| [docs/CIPHER_PROFILE_SECURITY.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/CIPHER_PROFILE_SECURITY.md) | सुरक्षा विचार: क्लियरटेक्स्ट प्रोफाइल पहचानकर्ता, ट्रैफिक एनालिसिस, BrainpoolP384r1 आउटर-रेपर तर्क, एन्क्रिप्टेड पहचानकर्ता, वाइल्डकार्ड गुण |
| [docs/CESS_CONFORMANCE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/CESS_CONFORMANCE.md) | [CESS](https://github.com/Supermagnum/CESS/tree/main) संरेखण: मोड 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/HEAD/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/HEAD/docs/CESS_CONFORMANCE.md) |
| [docs/EPHEMERAL_SESSION.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/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/HEAD/docs/PQ_SIGNATURES.md) | पोस्ट-क्वांटम स्टेटफुल सिग्नेचर (XMSS, LMS/HSS), फीचर गेटिंग |
| [docs/Psram.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/Psram.md) | वैकल्पिक microSD डीकॉय वॉल्यूम और संबंधित व्यवहार |
| [docs/RRAM_LAYOUT.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/RRAM_LAYOUT.md) | **4,194,304 बाइट** ऑन-चिप RRAM: स्रोत से वॉल्ट ऑफ़सेट, HAL मैपिंग, वियर / शून्यीकरण नोट्स |
| [docs/TEST_RESULTS.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/TEST_RESULTS.md#run-metadata) | **रन मेटाडेटा** पर खुलता है; पाइपलाइन सारांश, वेक्टर, dudect, cargo-fuzz ([अनुभाग 6](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/TEST_RESULTS.md#6-cargo-fuzz-libfuzzer)), कुंजी जीवनचक्र |
| [docs/THREE_FACTOR_AUTH.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/THREE_FACTOR_AUTH.md) | टोकन + PIN + वैकल्पिक बायोमेट्रिक: यह रिपोजिटरी क्या लागू करता है बनाम प्लेसहोल्डर; खतरा स्केच |
| [docs/THREAT_MODEL.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/THREAT_MODEL.md) | खतरा मॉडल: संपत्तियां, खतरे T1–T14, क्या बचाव किया गया है और क्या नहीं, Q2 हार्डवेयर पर लंबित अप्रमाणित आइटम, ऑडिट स्थिति |
| [docs/PERFORMANCE.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/PERFORMANCE.md) | प्रदर्शन नोट्स |
| [docs/HARDWARE_BRINGUP_TEST_PLAN.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/HARDWARE_BRINGUP_TEST_PLAN.md) | Q2 पहली-हार्डवेयर ब्रिंग-अप: CCID एनुमरेशन, `gpg --card-status`, पहले-बूट PIN के लिए USB CDC `galdralag-provision`, फिर `gpg --card-edit` / क्रिप्टो स्मोक टेस्ट |
| [docs/HARDWARE_VERIFICATION.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/HARDWARE_VERIFICATION.md) | हार्डवेयर शून्यीकरण: सिमुलेशन बनाम सिलिकॉन सत्यापन |
| [docs/HARDWARE_TEST.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/HARDWARE_TEST.md) | हार्डवेयर-उन्मुख परीक्षण नोट्स |
| [docs/NFC_PN532_INTEGRATION.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/NFC_PN532_INTEGRATION.md) | PN532 / NFC: libnfc, Rust विकल्प, डोर पैसिव बनाम USB पैनल, Shamir और PIN के साथ कोरम |
| [docs/SDMMC_STORAGE_INTEGRATION.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/SDMMC_STORAGE_INTEGRATION.md) | `embedded-sdmmc` + SPI microSD वैकल्पिक बल्क स्टोरेज के रूप में; PSRAM के लिए BOM विकल्प |
| [docs/USB_DONGLE_PCB.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/USB_DONGLE_PCB.md) | Dabao संदर्भ से USB-A डोंगल PCB कैसे बनाएं: Pico-format eval फर्मवेयर ब्रिंग-अप के लिए है; यह न्यूनतम टोकन के लिए 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/HEAD/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** | `gpg-agent` `enable-ssh-support` और सामान्य `SSH_AUTH_SOCK` सेटअप के साथ |
| **मेल और फ़ाइलें** | वे क्लाइंट जो GnuPG का उपयोग करते हैं (जैसे Thunderbird, Evolution, Kleopatra) और मानक `gpg` फ़ाइल एन्क्रिप्शन |
| **अन्य उपकरण** | कोई भी चीज़ जो GnuPG की तरह OpenPGP कार्ड + CCID से बात करती है |
**कुंजी स्लॉट (सामान्य डिफ़ॉल्ट):** **SIG** (हस्ताक्षर), **DEC** (डिक्रिप्शन / ECDH), **AUT** (प्रमाणीकरण, जैसे SSH)। एल्गोरिदम प्रति स्लॉट चुनने योग्य हैं (Brainpool वक्र, NIST P-256/P-384, Ed25519 / X25519, RSA)। पूर्ण तालिका और `key-attr` व्यवहार [docs/OPENPGP_CARD.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/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**)। वैकल्पिक **`galdralag-service`** (`services/galdralag`) एक अलग Xous प्रक्रिया के रूप में चलता है, **CCID** IPC के लिए **`usb-bao1x`** से जुड़ता है, और **PDDB** प्रावधान डेटा को **RRAM** में पुल करता है; बिल्ड और **`baosec`** पंजीकरण: [services/galdralag/README.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/services/galdralag/README.md) और **`cargo run -p xtask -- build-and-register`**। मेमोरी लेआउट: [docs/RRAM_LAYOUT.md](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/RRAM_LAYOUT.md)। **वास्तविक हार्डवेयर पर एंड-टू-एंड GnuPG** को अभी भी एक पूर्ण Xous इमेज (with **`ccid-openpgp`**), एक कार्यशील होस्ट CCID स्टैक (`pcscd`, ड्राइवर), और [ज्ञात सीमाएँ / खुला कार्य](#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/HEAD/docs/GALDRA-TOOL.md) में किया गया है क्योंकि एकीकरण परिपक्व होता है।
---
## वेब ऑफ ट्रस्ट और कुंजी हस्ताक्षर पार्टियाँ
OpenPGP और **GnuPG** यह सत्यापित करने में मदद करने के लिए एक विकेंद्रीकृत विश्वास मॉडल—**वेब ऑफ ट्रस्ट**—का उपयोग करते हैं कि किसके पास कौन सी कुंजियाँ हैं और किसी दिए गए **सार्वजनिक कुंजी** पर भरोसा करना है या नहीं। वह मॉडल पूरी तरह से **होस्ट-साइड** है। जहाँ चिप-समर्थित प्रमाणपत्र जैसे [German eID और 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`** होती है, इसलिए आप आमतौर पर **WoT**-शैली होस्ट हस्ताक्षर के साथ इस पहचानकर्ता की आवश्यकता वाले कार्यप्रवाहों के लिए **`galdra profile add ... --no-ephemeral-ecdh`** के साथ एक उपयोगकर्ता प्रोफ़ाइल जोड़ते हैं। सरल-भाषा परिभाषा और प्रारूप विनिर्देश: [Galdralag फिंगरप्रिंट](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/GLOSSARY.md#g)। जीवनचक्र, रोटेशन नीति, और अस्थायी ECDH गेट: [KEY_LIFECYCLE.md — Galdralag फिंगरप्रिंट](https://github.com/supermagnum/galdralag-firmware/blob/HEAD/docs/KEY_LIFECYCLE.md#galdralag-fingerprint-host)।
### अपना Galdralag फिंगरप्रिंट प्राप्त करना
होस्ट एक स्ट्रिंग प्रिंट करता है जो **हमेशा `G:` से शुरू होती है** (SIG सार्वजनिक कुंजी बाइट्स पर BLAKE3-160, कैननिकल रूप में उपसर्ग के बाद **40 लोअरकेस हेक्साडेसिमल वर्ण**)।
| फ़ील्ड | उद्देश्य | होस्ट (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 स्ट्रिंग |
| पोस्टल कोड | ZIP या डाक कोड | हाँ | हाँ | 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-बिट टाइमस्टैम्प |
| समाप्त होता है | कुंजी समाप्ति समय | हाँ | नहीं | केवल SQLite में UTC डेटटाइम |
| कुंजी स्रोत | होस्ट रिकॉर्ड कैसे बनाया गया | हाँ (source) | नहीं | जैसे manual, keyserver, WKD, LDAP, file, peer |
| फ़ील्ड उत्पत्ति | प्रति मेटाडेटा फ़ील्ड विश्वास लेबल | नहीं | हाँ (source_map) | प्रति फ़ील्ड दो बिट: SelfAttested, HostVerified, RegistrySync, OobVerified |
| रिकॉर्ड फ़्लैग | सक्रिय, पुराना, स्व-पहचान, निरस्त | आंशिक (होस्ट तर्क) | हाँ | जैसे चिप पर STALE, SELF_KEY |
fuzz/README.mddocs/TEST_RESULTS.md.| मेटाडेटा फ़ील्ड | OpenPGP / GnuPG | Galdra कुंजी (होस्ट + संपर्क स्टोर) |
|---|
| संपर्क / रिकॉर्ड आईडी | नहीं (कुंजी आईडी या फिंगरप्रिंट का उपयोग करें) | हाँ (होस्ट पर SQLite id; चिप पर नहीं) |
| प्रदर्शन नाम | केवल उपयोगकर्ता आईडी टेक्स्ट के अंदर (Name <email>) | हाँ (अलग UTF-8 फ़ील्ड) |
| ई-मेल | केवल उपयोगकर्ता आईडी टेक्स्ट के अंदर | हाँ (अलग फ़ील्ड; चिप पर ई-मेल द्वारा खोज) |
| सड़क का पता | कोई मानक फ़ील्ड नहीं | हाँ |
| देश | कोई मानक फ़ील्ड नहीं | हाँ |
| डाक / ZIP कोड | कोई मानक फ़ील्ड नहीं | हाँ |
| क्षेत्र / राज्य | कोई मानक फ़ील्ड नहीं | हाँ |
| संगठन | कोई मानक फ़ील्ड नहीं | हाँ |
| विभाग | कोई मानक फ़ील्ड नहीं | हाँ |
| भूमिका / नौकरी का शीर्षक | कोई मानक फ़ील्ड नहीं | हाँ |
| बैज / कर्मचारी आईडी | कोई मानक फ़ील्ड नहीं | हाँ |
| कॉलसाइन | कोई मानक फ़ील्ड नहीं | हाँ (12 बाइट्स, चिप पर NUL-पैडेड) |
| DMR ग्राहक आईडी | कोई मानक फ़ील्ड नहीं | हाँ (32-बिट; चिप पर खोज) |
| रेडियो संबद्धता | कोई मानक फ़ील्ड नहीं | हाँ |
| फ्लक्सर आईडी | कोई मानक फ़ील्ड नहीं | हाँ |
| डिस्कॉर्ड आईडी | कोई मानक फ़ील्ड नहीं | हाँ |
| IRC आईडी | कोई मानक फ़ील्ड नहीं | हाँ |
| फ़ोन नंबर | कोई मानक फ़ील्ड नहीं | हाँ (केवल होस्ट SQLite) |
| मुक्त-रूप नोट | कोई मानक फ़ील्ड नहीं | हाँ |
| OpenPGP v4 फिंगरप्रिंट | हाँ (40 हेक्स वर्ण) | एक प्रमाणपत्र लिंक करते समय होस्ट पंक्ति पर वैकल्पिक (pgp_fingerprint); Galdra कुंजियों के लिए चिप पर 32 बाइट्स |
G: उपकरण फिंगरप्रिंट | नहीं | हाँ (SIG सार्वजनिक कुंजी पर BLAKE3-160; होस्ट टूल; नहीं OpenPGP v4 मान) |
| OpenPGP कुंजी आईडी | हाँ (छोटा / लंबा रूप) | नहीं |
| विश्वास / उत्पत्ति | उपयोगकर्ता आईडी पर WoT हस्ताक्षर | प्रति-फ़ील्ड लेबल: SelfAttested, HostVerified, RegistrySync, OobVerified (चिप पर) |
| कुंजी समाप्ति | हाँ (प्रमाणपत्र / उपकुंजी) | केवल होस्ट (SQLite में expires_at) |
| अंतिम कुंजी प्राप्ति समय | होस्ट टूलिंग पर निर्भर | हाँ (fetched_at / last_fetched) |
| टोकन पर निजी कुंजी | SIG, DEC, AUT कार्ड स्लॉट | अलग Galdra कुंजी क्षेत्र (उपयोगकर्ता आईडी पैकेट नहीं) |
| निजी कुंजी का उपयोग करने के लिए PIN | PW1 / PW3 (OpenPGP कार्ड) | प्रति Galdra संपर्क रिकॉर्ड वैकल्पिक PIN रैप |
| OpenPGP कार्ड ऑब्जेक्ट (ऊपर तालिका में नहीं) | होस्ट (GnuPG) | टोकन पर |
|---|
| प्राथमिक + SIG / DEC / AUT उपकुंजियाँ | कीरिंग में सार्वजनिक | सील्ड स्लॉट में निजी |
| प्रमाणन हस्ताक्षर (WoT) | हाँ | नहीं |
| निरस्तीकरण प्रमाणपत्र | हाँ | नहीं |
| एल्गोरिदम गुण (DO 0xC1 / 0xC2 / 0xC3) | gpg --card-edit | हाँ |