1 पॉइंट द्वारा GN⁺ 2025-11-24 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • macOS के Tahoe version में Secure Enclave का उपयोग करके SSH key generation और usage की सुविधा अब default रूप से supported है
  • /usr/lib/ssh-keychain.dylib लाइब्रेरी, मौजूदा smart card के लिए PKCS11Provider के अलावा SecurityKeyProvider interface को implement करती है, जिससे FIDO2 device की बजाय Secure Enclave से सीधे communication संभव है
  • sc_auth command से Touch ID-आधारित biometric authentication key generation और ssh-keygen या ssh-add के जरिए secure area से सीधे key load और use करना संभव है
  • .zprofile में SSH_SK_PROVIDER environment variable सेट करने पर SSH, ssh-agent, ssh-keygen तीनों में यह अपने-आप पहचाना जाता है
  • बिना किसी external tool के, सिर्फ macOS की built-in functionality से security और convenience दोनों देने वाला SSH authentication structure implement किया जा सकता है

Secure Enclave-आधारित SSH key support का overview

  • macOS Tahoe Secure Enclave-आधारित SSH key creation और usage को support करता है
    • पहले secretive जैसे external project की जरूरत होती थी, लेकिन अब इसे macOS की built-in functionality से replace किया जा सकता है
  • /usr/lib/ssh-keychain.dylib SecurityKeyProvider को implement करता है, जिससे FIDO2 device जैसी पद्धति से Secure Enclave तक access संभव है
  • इस सुविधा के जरिए YubiKey जैसे external hardware के बिना macOS के built-in security chip से SSH authentication किया जा सकता है

key generation और management

  • sc_auth create-ctk-identity -l ssh -k p-256-ne -t bio command से Touch ID authentication की आवश्यकता वाली Secure Enclave key बनाई जा सकती है
    • list-ctk-identities command से बनी हुई keys की list और hash देखा जा सकता है
    • delete-ctk-identity command से key delete की जा सकती है
  • list-ctk-identities -t ssh option से SSH key fingerprint देखा जा सकता है

SSH में उपयोग

  • ssh-keygen -w /usr/lib/ssh-keychain.dylib -K -N "" command से Secure Enclave से key pair load किया जा सकता है
    • PIN डालने की जरूरत नहीं होती, authentication Touch ID से होता है
    • बनी हुई “private key” असली secret key नहीं, बल्कि FIDO credential reference value होती है
  • ssh-copy-id से public key को server पर copy करने के बाद,
    ssh -o SecurityKeyProvider=/usr/lib/ssh-keychain.dylib localhost command से connect किया जा सकता है

ssh-agent integration

  • ssh-add -K -S /usr/lib/ssh-keychain.dylib command से Secure Enclave key को सीधे ssh-agent में register किया जा सकता है
    • registered key को ssh-add -L से देखा जा सकता है
    • इसके बाद ssh -o SecurityKeyProvider=/usr/lib/ssh-keychain.dylib command से authentication किया जा सकता है

default SecurityKeyProvider setting

  • इसे सीधे .ssh/config में specify किया जा सकता है, या .zprofile में
    export SSH_SK_PROVIDER=/usr/lib/ssh-keychain.dylib जोड़ने पर यह अपने-आप पहचाना जाएगा
  • इसके बाद सिर्फ ssh-add -K या ssh my-server command से security key-आधारित SSH connection संभव है

exportable keys

  • sc_auth create-ctk-identity -l ssh-exportable -k p-256 -t bio command से Secure Enclave द्वारा encrypted exportable key बनाई जा सकती है
    • export-ctk-identity से इसे PEM file में export किया जा सकता है, और
      import-ctk-identities से किसी दूसरे device पर फिर से register किया जा सकता है
  • यह तरीका security के मामले में थोड़ा कमज़ोर, लेकिन backup के लिए अधिक उपयोगी है

developer discussion और code extension

  • comments में .biometryCurrentSet flag के इस्तेमाल की संभावना पर चर्चा हुई
    • अभी सिर्फ “biometric authentication use करना है या नहीं (on/off)” इतना ही supported है, finer control नहीं
  • लेखक ने ssh-keychain.dylib का reverse-engineering करके sk_enroll() function में biometryCurrentSet feature जोड़ने की संभावना पर विचार किया
  • प्रस्तावित code example में Secure Enclave access के लिए Apple Developer Program account से code signing (codesign) जरूरी है
  • code में key generation, signing, registration (sk_enroll, sk_sign आदि) की logic शामिल है,
    और ECDSA P-256 key को Secure Enclave में generate और sign करने की प्रक्रिया implement की गई है

सारांश

  • macOS अब Secure Enclave का सीधे उपयोग करने वाले SSH authentication को native रूप से support करता है
  • Touch ID-आधारित biometric authentication और FIDO2-compatible structure के जरिए security और convenience बेहतर होती है
  • बिना external hardware या अतिरिक्त software के सिर्फ system की built-in functionality से SSH key management संभव है
  • developers ssh-keychain.dylib को extend करके अधिक granular biometric authentication control पर प्रयोग कर रहे हैं

1 टिप्पणियां

 
GN⁺ 2025-11-24
Hacker News की राय
  • अगर मैं सही समझ रहा हूँ, तो इसका मतलब है कि private key का backup नहीं लिया जा सकता
    क्योंकि यह Secure Enclave के अंदर स्टोर होती है, इसलिए अगर laptop खो जाए तो key भी साथ चली जाएगी
    लगता है कि सिर्फ public key ही export की जा सकती है। बेशक कोई दूसरा तरीका या admin reset संभव हो सकता है, लेकिन फिर भी इसमें थोड़ी असहजता लगती है
    बाद में OP जवाब जोड़कर web page अपडेट करने वाला है

    • man sc_auth देखें। Secure Enclave में सीधे generate करने के बजाय encrypted exportable key बनाई जा सकती है
      उदाहरण के लिए sc_auth create-ctk-identity -l ssh-exportable -k p-256 -t bio जैसे command चलाए जा सकते हैं, और उसके बाद export-ctk-identity से .pem file बनाई जा सकती है
      इसे दूसरे device पर import-ctk-identities से फिर import किया जा सकता है। इसे guide में जोड़ने वाले हैं
    • असली बात यह है कि key को ‘export’ नहीं करना चाहिए। हर बार key को move करने पर exposure का risk बढ़ता है
      PKI का मूल सिद्धांत यही है कि सिर्फ public key ही move हो, और private key सिर्फ एक ही जगह मौजूद रहे
    • सही है। backup के लिए कई keys बनाकर रखना बेहतर है
      इससे किसी भी स्थिति में key leak नहीं होगी
    • private key को export न कर पाना YubiKey जैसा ही concept है
      YubiKey पर generate की गई private key का भी backup नहीं लिया जा सकता
    • सिद्धांत रूप में कई keys इस्तेमाल करना ही सही है
      device खो जाए या चोरी हो जाए तब भी दिक्कत न हो, इसके लिए हर device के लिए अलग key होना आदर्श है
      मैं PIN-protected YubiKey को तिजोरी में रखता हूँ। अगर laptop, phone और रोज़मर्रा वाली YubiKey तीनों भी खो जाएँ, तब भी तैयारी रहती है
  • इससे एक कदम आगे बढ़कर ECDSA-आधारित GPG signing भी किया जा सकता है
    लेकिन bug की वजह से patched GPG और SSH agent चाहिए
    macOS के लिए UI वाला package version मौजूद है (KeetaNetwork/agent),
    और वही backend Linux पर भी PKCS#11 के जरिए TPM के साथ काम करता है
    GPG और SSH में फर्क सिर्फ keys और signatures को wrap करने के तरीके का है, मूल रूप से दोनों ECDSA ही हैं

  • Secretive को configure करना ज़्यादा आसान है, लेकिन मैं इस तरीके पर switch करके एक app कम करने की सोच रहा हूँ
    Windows 11 पर TPM-आधारित SSH keys सेट करने का तरीका मैंने अपने blog में लिखा है

    • क्या Linux में भी TPM पर ssh-key स्टोर की जा सकती है, यह जानने की जिज्ञासा है
  • यह काफ़ी शानदार feature है
    मैं काफ़ी समय से Secretive इस्तेमाल कर रहा हूँ, और यह physical key या card से कहीं ज़्यादा सुविधाजनक रहा है
    हर बार जब SSH key इस्तेमाल होती है, तो button दबाना या fingerprint authentication करना पड़ता है, इसलिए साफ़ पता चलता है कि इसका इस्तेमाल कब हो रहा है
    ssh-agent tunnel बनाए रखकर remote server पर भी सुरक्षित रूप से git signing की जा सकती है
    लेकिन Tahoe version में bugs बहुत हैं और यह अक्सर अटक जाता है। debug करने का समय नहीं मिला, इसलिए ऐसे ही छोड़ रखा है
    Smart Card-आधारित SSH UX के साथ पहले बुरा अनुभव रहा है, लेकिन अगर यह stable हो तो आज़माने लायक है

    • मुझे भी Secretive पसंद है, लेकिन ssh-agent की confirmation feature OpenSSH में बहुत पहले से मौजूद है
      ssh-askpass के जरिए हर private key use पर confirmation ली जा सकती है। बस local/remote का फर्क नहीं पता चलता
  • इस तरीके में ऐसी curve इस्तेमाल होती है जिसके बारे में शक है कि NSA ने उसमें backdoor डाला हो सकता है, इसलिए सावधान रहना चाहिए

  • अगर private key Secure Enclave में स्टोर होती है, तो फिर private key file की ज़रूरत क्यों है, यह समझ नहीं आता

    • OpenSSH की sk implementation में भी यही होता है। “resident key” option होने पर भी private key file की ज़रूरत पड़ती है
      यह सिर्फ FIDO credential का एक reference होती है, इसमें असली secret key data शामिल नहीं होता
      non-resident sk key के मामले में file ज़रूरी होती है क्योंकि hardware authenticator state store नहीं करता
      macOS की implementation stateful है या stateless, यह साफ़ नहीं है। OS reinstall करने पर यह टूट भी सकती है
  • facebookincubator/sks नाम का एक project है
    यह अलग-अलग hardware-आधारित SSH keys को abstract करने वाली golang library है, और Linux, Windows, macOS को support करती है

    • लेकिन सिर्फ golang library से ssh-agent काम नहीं करता
      इसलिए मैंने पहले ssh-tpm-agent खुद बनाना शुरू किया था
  • मैं iPhone पर भी उसी private key से email या files sign करना चाहता हूँ
    सोच रहा हूँ कि क्या iCloud यह संभाल सकता है

    • ऐसी keys iCloud से sync नहीं होतीं
      उसकी जगह Passkey sync होती है। Passkey API से बात करने वाला नया SecurityKeyProvider बनाना पड़ेगा
      Passkey किसी खास app bundle ID या domain से बंधी होती है
      उदाहरण के लिए अगर Secretive Passkey support करे, तो वह key pair दूसरे apps में इस्तेमाल नहीं किया जा सकेगा, लेकिन
      उसी app के कई devices के बीच sync हो जाएगा
  • अब KeyMux में नया feature जोड़ने का समय आ गया है
    यह tool SSH, SSL, PGP के लिए enclave keys support करता है,
    उदाहरण के लिए Secure Enclave-आधारित SSL certificate से Vault server में login करके non-exportable Vault private key के साथ SSH authentication किया जा सकता है
    keymux.com और App Store link पर देखा जा सकता है