- 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
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_authbö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 biokomutu çalıştırılabilir; ardındanexport-ctk-identityile bir.pemdosyası üretilebilirBaşka bir cihazda
import-ctk-identitiesile yeniden içe aktarabilirsiniz. Bunu rehbere eklemeyi planlıyorumPKI'nin özü, yalnızca açık anahtarın taşınmasıdır ve özel anahtarın tek bir yerde bulunması gerekir
Böylece hiçbir durumda anahtar sızdırılmaz
YubiKey üzerinde oluşturulan özel anahtarlar da yedeklenemez
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
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
ssh-askpassaracılığıyla her özel anahtar kullanımı için onay alınabiliyor. Yalnız yerel/uzak ayrımı yapamıyorBu 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
skuygulaması da aynı şekilde çalışıyor. “resident key” seçeneği olsa bile özel anahtar dosyası gerekiyorBu dosya sadece FIDO kimlik bilgisine bir referans; gerçek gizli anahtar verisini içermiyor
Kalıcı olmayan
skanahtarlarında, donanım doğrulayıcı durumu saklamadığı için dosya gereklimacOS 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
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
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