1 puan yazan GN⁺ 2025-11-24 | 1 yorum | WhatsApp'ta paylaş
  • macOS’un Tahoe sürümünde, Secure Enclave kullanılarak SSH anahtarı oluşturma ve kullanma özelliği varsayılan olarak destekleniyor
  • /usr/lib/ssh-keychain.dylib kütüphanesi, mevcut akıllı kartlar için PKCS11Provider desteğine ek olarak SecurityKeyProvider arayüzünü uygulayarak FIDO2 cihazı yerine Secure Enclave ile doğrudan iletişim kurabiliyor
  • sc_auth komutuyla Touch ID tabanlı biyometrik doğrulama anahtarı oluşturma, ssh-keygen veya ssh-add ile anahtarları güvenli bölgeden doğrudan yükleyip kullanma mümkün
  • .zprofile içine SSH_SK_PROVIDER ortam değişkeni ayarlanırsa SSH, ssh-agent, ssh-keygen tarafından otomatik olarak tanınıyor
  • Harici araçlar olmadan, yalnızca macOS’un yerleşik özellikleriyle güvenlik ve kullanım kolaylığını aynı anda sağlayan bir SSH kimlik doğrulama yapısı kurulabiliyor

Secure Enclave tabanlı SSH anahtarı desteğine genel bakış

  • macOS Tahoe, Secure Enclave tabanlı SSH anahtarı oluşturma ve kullanımı destekliyor
    • Daha önce secretive gibi harici projeler gerekiyordu, artık bunların yerini macOS’un yerleşik özellikleri alabiliyor
  • /usr/lib/ssh-keychain.dylib, SecurityKeyProvider arayüzünü uygulayarak Secure Enclave’e FIDO2 cihazlarına benzer bir yöntemle erişim sağlıyor
  • Bu sayede YubiKey gibi harici donanımlar olmadan, macOS’un yerleşik güvenlik çipiyle SSH kimlik doğrulaması yapılabiliyor

Anahtar oluşturma ve yönetimi

  • sc_auth create-ctk-identity -l ssh -k p-256-ne -t bio komutuyla Touch ID doğrulaması gerektiren bir Secure Enclave anahtarı oluşturulabiliyor
    • list-ctk-identities komutuyla oluşturulan anahtarların listesi ve hash değerleri görülebiliyor
    • delete-ctk-identity komutuyla anahtar silinebiliyor
  • list-ctk-identities -t ssh seçeneğiyle SSH anahtarı parmak izi (fingerprint) görülebiliyor

SSH içinde kullanım

  • ssh-keygen -w /usr/lib/ssh-keychain.dylib -K -N "" komutuyla Secure Enclave içindeki anahtar çifti yüklenebiliyor
    • PIN girilmesi gerekmiyor; doğrulama Touch ID ile yapılıyor
    • Oluşan “private key”, gerçek gizli anahtar değil, FIDO kimlik bilgisi referans değeri
  • Açık anahtar ssh-copy-id ile sunucuya kopyalandıktan sonra,
    ssh -o SecurityKeyProvider=/usr/lib/ssh-keychain.dylib localhost komutuyla bağlantı kurulabiliyor

ssh-agent entegrasyonu

  • ssh-add -K -S /usr/lib/ssh-keychain.dylib komutuyla Secure Enclave anahtarı doğrudan ssh-agent’a eklenebiliyor
    • Eklenen anahtarlar ssh-add -L ile görülebiliyor
    • Sonrasında ssh -o SecurityKeyProvider=/usr/lib/ssh-keychain.dylib komutuyla kimlik doğrulaması yapılabiliyor

Varsayılan SecurityKeyProvider ayarı

  • Doğrudan .ssh/config içine yazılabilir ya da .zprofile dosyasına
    export SSH_SK_PROVIDER=/usr/lib/ssh-keychain.dylib eklenirse otomatik olarak tanınıyor
  • Sonrasında sadece ssh-add -K veya ssh my-server komutuyla güvenlik anahtarı tabanlı SSH bağlantısı mümkün oluyor

Dışa aktarılabilir anahtarlar (Exportable Keys)

  • sc_auth create-ctk-identity -l ssh-exportable -k p-256 -t bio komutuyla Secure Enclave ile şifrelenmiş, dışa aktarılabilir bir anahtar oluşturulabiliyor
    • export-ctk-identity ile PEM dosyası olarak dışa aktarılabiliyor,
      import-ctk-identities ile başka bir cihaza yeniden kaydedilebiliyor
  • Bu yöntem güvenlik açısından biraz daha zayıf olsa da yedekleme için avantajlı

Geliştirici tartışmaları ve kod genişletmeleri

  • Yorumlarda .biometryCurrentSet bayrağının kullanılıp kullanılamayacağı tartışılıyor
    • Şu anda yalnızca “biyometrik doğrulama kullanılsın mı kullanılmasın mı (açık/kapalı)” desteği var, daha ayrıntılı kontrol yok
  • Yazar, ssh-keychain.dylib üzerinde tersine mühendislik (reverse-engineering) yaparak sk_enroll() işlevine biometryCurrentSet desteği ekleme olasılığını inceliyor
  • Önerilen kod örneğinde, Secure Enclave erişimi için Apple Developer Program hesabıyla kod imzalama (codesign) gerekiyor
  • Kod içinde anahtar oluşturma, imzalama, kayıt (sk_enroll, sk_sign vb.) mantığı yer alıyor ve
    ECDSA P-256 anahtarlarının Secure Enclave içinde oluşturulup imzalanma süreci uygulanıyor

Özet

  • macOS artık Secure Enclave’i doğrudan kullanan SSH kimlik doğrulamasını yerel olarak destekliyor
  • Touch ID tabanlı biyometrik doğrulama ve FIDO2 uyumlu yapı sayesinde güvenlik ve kullanım kolaylığı artıyor
  • Harici donanım veya ek yazılım olmadan yalnızca sistemin yerleşik özellikleriyle SSH anahtarı yönetimi mümkün hale geliyor
  • Geliştiriciler, ssh-keychain.dylib üzerinde genişletmeler yaparak daha ayrıntılı biyometrik doğrulama kontrolünü deniyor

1 yorum

 
GN⁺ 2025-11-24
Hacker News yorumu
  • Doğru anladıysam bu, özel anahtarın yedeklenemeyeceği anlamına geliyor
    Secure Enclave içinde saklandığı için dizüstü bilgisayarınızı kaybederseniz anahtar da onunla birlikte gider
    Görünüşe göre yalnızca açık anahtar dışa aktarılabiliyor. Elbette başka yaklaşımlar veya yönetici sıfırlaması mümkün olabilir, ama yine de biraz tedirgin edici bir tarafı var
    Daha sonra OP'nin yanıt verip web sayfasını güncelleyeceği söylenmiş

    • man sc_auth bölümüne bakın. Doğrudan Secure Enclave içinde oluşturmak yerine şifrelenmiş, dışa aktarılabilir anahtarlar oluşturabilirsiniz
      Örnek olarak sc_auth create-ctk-identity -l ssh-exportable -k p-256 -t bio komutu çalıştırılabilir; ardından export-ctk-identity ile bir .pem dosyası üretilebilir
      Başka bir cihazda import-ctk-identities ile yeniden içe aktarabilirsiniz. Bunu rehbere eklemeyi planlıyorum
    • Esasen anahtarın “dışa aktarılması” amaçlanmıyor. Anahtarı her taşıdığınızda açığa çıkma riski oluşur
      PKI'nin özü, yalnızca açık anahtarın taşınmasıdır ve özel anahtarın tek bir yerde bulunması gerekir
    • Evet. Yedek amaçlı birden fazla anahtar oluşturmak iyi olur
      Böylece hiçbir durumda anahtar sızdırılmaz
    • Özel anahtarın dışa aktarılamaması, YubiKey ile aynı kavram
      YubiKey üzerinde oluşturulan özel anahtarlar da yedeklenemez
    • Prensipte doğru yaklaşım birden fazla anahtar kullanmaktır
      Cihaz kaybolsa veya çalınsa bile sorun olmaması için ideal olan, cihaz başına bir tane bulundurmaktır
      Ben PIN korumalı bir YubiKey'i kasada tutuyorum. Böylece dizüstü bilgisayarım, telefonum ve günlük kullandığım YubiKey'in hepsi kaybolsa bile hazırlıklı oluyorum
  • Bir adım daha ileri gidilirse ECDSA tabanlı GPG imzalama da mümkün
    Ancak bir hata nedeniyle yamalanmış GPG ve SSH agent gerekiyor
    macOS için arayüz içeren paketli bir sürüm var (KeetaNetwork/agent),
    aynı backend Linux'ta da PKCS#11 üzerinden TPM ile çalışıyor
    GPG ile SSH arasındaki fark yalnızca anahtarların ve imzaların nasıl sarıldığı; temelde hepsi ECDSA

  • Secretive'in kurulumu daha kolay ama bu yönteme geçip bir uygulamayı eksiltmeyi düşünüyorum
    Windows 11'de TPM tabanlı SSH anahtarlarının nasıl kurulacağını blogumda anlattım

    • Linux'ta da TPM içinde ssh-key saklanıp saklanamayacağını merak ediyorum
  • Oldukça hoş bir özellik
    Ben uzun süredir Secretive kullanıyorum ve fiziksel anahtar ya da kartlardan çok daha kullanışlı buldum
    SSH anahtarı her kullanılacağında bir düğmeye basmanız veya parmak izinizi doğrulamanız gerekiyor; bu da ne zaman kullanıldığını net biçimde gösteriyor
    ssh-agent tünelini açık tutarak uzak sunucularda da güvenli biçimde git imzalama yapabiliyorum
    Ancak Tahoe sürümü oldukça hatalı ve sık sık takılıyor. Hata ayıklamaya ayıracak vaktim olmadığından öylece bırakmış durumdayım
    Smart Card tabanlı SSH UX geçmişte bana epey zorluk çıkarmıştı, ama kararlıysa denemeye değer

    • Ben de Secretive'i seviyorum ama ssh-agent'ın onay özelliği OpenSSH'de zaten uzun zamandır var
      ssh-askpass aracılığıyla her özel anahtar kullanımı için onay alınabiliyor. Yalnız yerel/uzak ayrımı yapamıyor
  • Bu yaklaşım, NSA'in arka kapı yerleştirdiğinden şüphelenilen eğrileri kullandığı için dikkatli olunmalı

  • Secure Enclave içinde saklanıyorsa neden özel anahtar dosyasına ihtiyaç duyulduğunu merak ediyorum

    • OpenSSH'nin sk uygulaması da aynı şekilde çalışıyor. “resident key” seçeneği olsa bile özel anahtar dosyası gerekiyor
      Bu dosya sadece FIDO kimlik bilgisine bir referans; gerçek gizli anahtar verisini içermiyor
      Kalıcı olmayan sk anahtarlarında, donanım doğrulayıcı durumu saklamadığı için dosya gerekli
      macOS uygulamasının durum bilgili mi yoksa durumsuz mu olduğu net değil. İşletim sistemi yeniden kurulduğunda bozulabilir
  • facebookincubator/sks adlı bir proje var
    Çeşitli donanım tabanlı SSH anahtarlarını soyutlayan bir golang kütüphanesi; Linux, Windows ve macOS destekliyor

    • Ama yalnızca bir golang kütüphanesi olması ssh-agent'ın çalışması için yeterli değil
      Bu yüzden ben de zamanında ssh-tpm-agent projesini kendim yapmaya başlamıştım
  • iPhone'da da aynı özel anahtarla e-posta veya dosya imzalamak istiyorum
    Acaba iCloud bunu halledebilir mi diye merak ediyorum

    • Bu tür anahtarlar iCloud ile senkronize edilmez
      Bunun yerine Passkey'ler senkronize edilir. Passkey API ile konuşan yeni bir SecurityKeyProvider yazmak gerekir
      Passkey'ler belirli bir uygulama bundle ID'sine veya domaine bağlıdır
      Örneğin Secretive Passkey desteği sunsaydı, o anahtar çifti başka uygulamalarda kullanılamazdı
      ama aynı uygulamanın farklı cihazları arasında senkronize edilirdi
  • Artık KeyMux için yeni bir özellik ekleme zamanı gelmiş gibi görünüyor
    Bu araç SSH, SSL ve PGP için enclave anahtarlarını destekliyor
    Örneğin Secure Enclave tabanlı SSL sertifikasıyla bir Vault sunucusuna bağlanıp dışa aktarılamayan Vault özel anahtarı ile SSH kimlik doğrulaması yapabilirsiniz
    keymux.com ve App Store bağlantısı üzerinden bakılabilir