macOS’ta Secure Enclave tabanlı SSH anahtarları için yerel destek
(gist.github.com/arianvp)- 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.dylibkü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 kurabiliyorsc_authkomutuyla Touch ID tabanlı biyometrik doğrulama anahtarı oluşturma,ssh-keygenveyassh-addile anahtarları güvenli bölgeden doğrudan yükleyip kullanma mümkün.zprofileiçineSSH_SK_PROVIDERortam 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
secretivegibi harici projeler gerekiyordu, artık bunların yerini macOS’un yerleşik özellikleri alabiliyor
- Daha önce
/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 biokomutuyla Touch ID doğrulaması gerektiren bir Secure Enclave anahtarı oluşturulabiliyorlist-ctk-identitieskomutuyla oluşturulan anahtarların listesi ve hash değerleri görülebiliyordelete-ctk-identitykomutuyla anahtar silinebiliyor
list-ctk-identities -t sshseç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-idile sunucuya kopyalandıktan sonra,
ssh -o SecurityKeyProvider=/usr/lib/ssh-keychain.dylib localhostkomutuyla bağlantı kurulabiliyor
ssh-agent entegrasyonu
ssh-add -K -S /usr/lib/ssh-keychain.dylibkomutuyla Secure Enclave anahtarı doğrudan ssh-agent’a eklenebiliyor- Eklenen anahtarlar
ssh-add -Lile görülebiliyor - Sonrasında
ssh -o SecurityKeyProvider=/usr/lib/ssh-keychain.dylibkomutuyla kimlik doğrulaması yapılabiliyor
- Eklenen anahtarlar
Varsayılan SecurityKeyProvider ayarı
- Doğrudan
.ssh/configiçine yazılabilir ya da.zprofiledosyasına
export SSH_SK_PROVIDER=/usr/lib/ssh-keychain.dylibeklenirse otomatik olarak tanınıyor - Sonrasında sadece
ssh-add -Kveyassh my-serverkomutuyla 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 biokomutuyla Secure Enclave ile şifrelenmiş, dışa aktarılabilir bir anahtar oluşturulabiliyorexport-ctk-identityile PEM dosyası olarak dışa aktarılabiliyor,
import-ctk-identitiesile 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
.biometryCurrentSetbayrağı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) yaparaksk_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