
पोर्टेबल, हार्डवेयर-समर्थित वेबऑथन क्रेडेंशियल्स जो TPM 2.0 का उपयोग करते हैं। मास्टर सीड से व्युत्पन्न नियतात्मक मूल कुंजी क्रॉस-डिवाइस क्रेडेंशियल पोर्टेबिलिटी सक्षम करती है। निजी हस्ताक्षर कुंजी कभी TPM से बाहर नहीं जाती। ब्राउज़र एक्सटेंशन और CLI शामिल है।
⚠️ प्रारंभिक प्रमाण-अवधारणा। इस परियोजना का पूरी तरह से परीक्षण या ऑडिट नहीं किया गया है। इसे प्रयोग के अलावा किसी अन्य चीज़ के लिए उपयोग न करें।
पोर्टेबल, हार्डवेयर-समर्थित WebAuthn/पासकी क्रेडेंशियल्स जो TPM 2.0 का उपयोग करके कई उपकरणों पर काम करते हैं।
पारंपरिक TPM क्रेडेंशियल्स उस उपकरण से बंधे होते हैं जिसने उन्हें बनाया है। यह परियोजना उन्हें पोर्टेबल बनाती है, प्रत्येक उपकरण के TPM में एक निर्धारणात्मक मूल कुंजी (मास्टर सीड से व्युत्पन्न) आयात करके। एक TPM द्वारा एन्क्रिप्ट किए गए क्रेडेंशियल ब्लॉब्स को फिर किसी भी अन्य TPM द्वारा लोड और उपयोग किया जा सकता है जो उसी सीड से प्रावधानित है। निजी हस्ताक्षर कुंजियाँ TPM द्वारा प्रत्येक क्रेडेंशियल के लिए यादृच्छिक रूप से उत्पन्न होती हैं और हार्डवेयर के बाहर सादे पाठ में कभी मौजूद नहीं होती हैं।
मास्टर सीड की आवश्यकता केवल एक बार प्रति उपकरण प्रावधान के दौरान होती है। उसके बाद, सभी क्रिप्टोग्राफिक संचालन पूरी तरह से TPM के अंदर होते हैं।
एक ब्राउज़र एक्सटेंशन navigator.credentials को ओवरराइड करता है और WebAuthn कॉल को नेटिव मैसेजिंग के माध्यम से एक Python बैकएंड पर रूट करता है जो सीधे TPM से बात करता है। पंजीकरण पर, TPM पोर्टेबल पैरेंट के तहत एक नई हस्ताक्षर कुंजी बनाता है और एक एन्क्रिप्टेड ब्लॉब लौटाता है। प्रमाणीकरण पर, यह ब्लॉब को वापस लोड करता है, आंतरिक रूप से इसे डिक्रिप्ट करता है, और चुनौती पर हस्ताक्षर करता है।
Linux (Debian/Ubuntu):
sudo apt install tpm2-tools python3-tpm2-pytss python3-cryptography
Windows:
pip install cryptography
Windows TBS (TPM Base Services) के माध्यम से ctypes के ज़रिए TPM से बात करता है, इसलिए किसी अतिरिक्त नेटिव पैकेज की आवश्यकता नहीं है।
ब्राउज़र एक्सटेंशन native_host.py के साथ नेटिव मैसेजिंग के माध्यम से संचार करता है। आपको एक मेनिफेस्ट पंजीकृत करना होगा जो Firefox को बताता है कि होस्ट कहाँ मिलेगा।
फ़ाइल ~/.mozilla/native-messaging-hosts/webauthn_tpm_portable.json बनाएँ:
{
"name": "webauthn_tpm_portable",
"description": "WebAuthn TPM Portable Credentials Backend",
"path": "/absolute/path/to/native_host.py",
"type": "stdio",
"allowed_extensions": [
"[email protected]"
]
}
path को native_host.py के पूर्ण पथ से बदलें। सुनिश्चित करें कि यह निष्पादन योग्य है (chmod +x native_host.py)।
Windows पर, नेटिव मैसेजिंग मेनिफेस्ट विंडोज रजिस्ट्री के माध्यम से पंजीकृत किया जाता है। विवरण के लिए Firefox नेटिव मैसेजिंग दस्तावेज़ देखें।
cd extension
npm install
npm run build
फिर Firefox में:
about:debugging#/runtime/this-firefox खोलेंextension/dist फ़ोल्डर के अंदर कोई भी फ़ाइल चुनें (जैसे manifest.json)एक्सटेंशन पॉपअप खोलें और या तो मौजूदा सीड पेस्ट करें या "Generate" पर क्लिक करके नया बनाएं, फिर "Provision" पर क्लिक करें। यदि आप नई सीड बनाते हैं, तो इसे किसी सुरक्षित स्थान पर सहेजें। आपको अतिरिक्त उपकरणों को प्रावधानित करने के लिए इसकी आवश्यकता होगी, और इसे खोने का मतलब नए उपकरण स्थापित करने की क्षमता खोना है (पहले से प्रावधानित उपकरणों पर मौजूदा क्रेडेंशियल्स काम करते रहेंगे)।
प्रावधान CLI से भी किया जा सकता है:
./webauthn_cli.py provision --generate
# or with an existing seed:
./webauthn_cli.py provision <seed_hex>
./webauthn_cli.py test
यह एक क्रेडेंशियल बनाता है, एक चुनौती पर हस्ताक्षर करता है, और हस्ताक्षर को सत्यापित करता है।
webauthn_cli.py [--backend=BACKEND] <command> [args]
आदेश:
बैकएंड (--backend या WEBAUTHN_BACKEND env var के साथ चुने जाते हैं):
| Backend | विवरण |
|---|---|
tpm | कच्चे आदेशों के माध्यम से क्रॉस-प्लेटफ़ॉर्म TPM (डिफ़ॉल्ट) |
linux | केवल Linux, tpm2-pytss लाइब्रेरी का उपयोग करता है |
soft | शुद्ध सॉफ़्टवेयर, कोई TPM आवश्यक नहीं (परीक्षण के लिए) |
क्रेडेंशियल हस्ताक्षर कुंजियाँ TPM के अंदर उत्पन्न होती हैं और कभी भी सादे पाठ में बाहर नहीं जाती हैं। क्रेडेंशियल ID में एन्क्रिप्टेड ब्लॉब प्रावधानित TPM तक पहुँच के बिना बेकार है। सॉफ़्टवेयर-आधारित क्रेडेंशियल स्टोर्स के विपरीत, प्रमाणीकरण के दौरान निजी कुंजियाँ होस्ट मेमोरी में कभी मौजूद नहीं होती हैं, जो कोल्ड बूट हमलों और मैलवेयर-आधारित कुंजी निष्कर्षण से बचाता है।
TPM2_Duplicate (जो सैद्धांतिक रूप से कुंजियों को निर्यात कर सकता है) को अवरुद्ध किया गया है क्योंकि क्रेडेंशियल्स एक खाली authPolicy के साथ बनाए जाते हैं, जिससे पूर्ण सिस्टम पहुँच के साथ भी दोहराव असंभव हो जाता है।
प्रावधानित सिस्टम पर चलने वाला मैलवेयर TPM से चुनौतियों पर हस्ताक्षर करने के लिए कह सकता है, क्योंकि कोई उपयोगकर्ता सत्यापन नहीं है (कोई बटन दबाना या बायोमेट्रिक नहीं)। यह कुंजियों को निकाल नहीं सकता, लेकिन सक्रिय रहते हुए उनका उपयोग कर सकता है। यह सॉफ़्टवेयर-आधारित क्रेडेंशियल स्टोर्स की तुलना में एक संकीर्ण हमला सतह है जहाँ मैलवेयर सीधे कुंजियाँ चुरा सकता है।
मास्टर सीड विश्वास की जड़ है। यदि यह समझौता किया जाता है, तो एक हमलावर अपना स्वयं का TPM प्रावधानित कर सकता है और उनके द्वारा प्राप्त किसी भी क्रेडेंशियल ब्लॉब का उपयोग कर सकता है। यदि यह खो जाता है और सभी प्रावधानित उपकरण अनुपलब्ध हो जाते हैं, तो क्रेडेंशियल्स पुनर्प्राप्त नहीं किए जा सकते। इसे ऐसे स्टोर करें जैसे आप एक हार्डवेयर वॉलेट रिकवरी वाक्यांश को स्टोर करेंगे: ऑफ़लाइन, एक सुरक्षित स्थान पर, आदर्श रूप से रिडंडेंसी के साथ (जैसे कई स्थानों पर विभाजित)।
परियोजना में तीन विनिमेय बैकएंड शामिल हैं:
webauthn_tpm_portable.py प्राथमिक बैकएंड है। यह बाइट स्तर पर TPM कमांड बनाता है और Linux (/dev/tpmrm0) और Windows (ctypes के माध्यम से TBS API) दोनों पर काम करता है।
webauthn_tpm_linux.py tpm2-pytss Python लाइब्रेरी का उपयोग करता है और केवल Linux पर काम करता है।
webauthn_soft.py एक शुद्ध-सॉफ़्टवेयर कार्यान्वयन है जो बिना किसी TPM के समान क्रेडेंशियल प्रारूप का अनुकरण करता है। परीक्षण और विकास के लिए उपयोगी, लेकिन कोई हार्डवेयर सुरक्षा प्रदान नहीं करता।
/dev/tpmrm0 पर 'अनुमति अस्वीकृत':
अपने उपयोगकर्ता को tss समूह में जोड़ें और पुनः लॉगिन करें: sudo usermod -aG tss $USER
tpm2-pytss आयात त्रुटियाँ:
sudo apt install python3-tpm2-pytss या pip install --upgrade tpm2-pytss --break-system-packages आज़माएँ।
एक्सटेंशन नेटिव होस्ट से कनेक्ट नहीं हो रहा है:
जाँचें कि नेटिव मैसेजिंग मेनिफेस्ट में path एक पूर्ण पथ है जो native_host.py की ओर इशारा करता है। Firefox में ब्राउज़र कंसोल खोलें (Ctrl+Shift+J) और एक्सटेंशन से त्रुटियों की जाँच करें।
MIT
| Command | विवरण |
|---|
status | जाँचें कि TPM प्रावधानित है या नहीं |
provision --generate | एक यादृच्छिक सीड उत्पन्न करें और प्रावधानित करें |
provision <seed_hex> | मौजूदा सीड के साथ प्रावधानित करें |
create <rp_id> | एक आश्रित पार्टी के लिए क्रेडेंशियल बनाएँ |
sign <cred_id> <rp_id> <challenge> | एक चुनौती पर हस्ताक्षर करें |
verify <cred_id> <rp_id> <challenge> <sig> | एक हस्ताक्षर सत्यापित करें |
clear | TPM से पोर्टेबल मूल कुंजी हटाएँ |
test | पूर्ण create/sign/verify चक्र चलाएँ |