1 poin oleh GN⁺ 2025-11-24 | 1 komentar | Bagikan ke WhatsApp
  • Di versi Tahoe macOS, fitur pembuatan dan penggunaan SSH key dengan Secure Enclave didukung secara bawaan
  • Library /usr/lib/ssh-keychain.dylib mengimplementasikan antarmuka SecurityKeyProvider selain PKCS11Provider untuk smart card yang sudah ada, sehingga bisa berkomunikasi langsung dengan Secure Enclave alih-alih perangkat FIDO2
  • Dengan perintah sc_auth, pengguna dapat membuat kunci autentikasi biometrik berbasis Touch ID, lalu menggunakan ssh-keygen atau ssh-add untuk memuat dan memakai key langsung dari area aman
  • Jika menetapkan variabel lingkungan SSH_SK_PROVIDER di .zprofile, maka SSH, ssh-agent, dan ssh-keygen akan mengenalinya secara otomatis
  • Tanpa alat eksternal, hanya dengan fitur bawaan macOS, kini dimungkinkan membangun skema autentikasi SSH yang sekaligus aman dan praktis

Gambaran umum dukungan SSH key berbasis Secure Enclave

  • macOS Tahoe mendukung pembuatan dan penggunaan SSH key berbasis Secure Enclave
    • Sebelumnya diperlukan proyek eksternal seperti secretive, tetapi sekarang bisa digantikan oleh fitur bawaan macOS
  • /usr/lib/ssh-keychain.dylib mengimplementasikan SecurityKeyProvider sehingga Secure Enclave dapat diakses dengan cara yang mirip perangkat FIDO2
  • Melalui fitur ini, autentikasi SSH bisa dilakukan dengan chip keamanan bawaan macOS tanpa perangkat keras eksternal seperti YubiKey

Pembuatan dan pengelolaan key

  • Perintah sc_auth create-ctk-identity -l ssh -k p-256-ne -t bio membuat key Secure Enclave yang memerlukan autentikasi Touch ID
    • Daftar key yang dibuat dan hash-nya dapat dilihat dengan perintah list-ctk-identities
    • Key dapat dihapus dengan perintah delete-ctk-identity
  • Opsi list-ctk-identities -t ssh dapat digunakan untuk melihat fingerprint SSH key
Iklan

Penggunaan di SSH

  • Perintah ssh-keygen -w /usr/lib/ssh-keychain.dylib -K -N "" digunakan untuk memuat pasangan key dari Secure Enclave
    • Tidak perlu memasukkan PIN, autentikasi dilakukan dengan Touch ID
    • “Private key” yang dihasilkan bukan secret key yang sebenarnya, melainkan nilai referensi kredensial FIDO
  • Setelah public key disalin ke server dengan ssh-copy-id,
    koneksi dapat dilakukan dengan perintah ssh -o SecurityKeyProvider=/usr/lib/ssh-keychain.dylib localhost

Integrasi dengan ssh-agent

  • Dengan perintah ssh-add -K -S /usr/lib/ssh-keychain.dylib, key Secure Enclave dapat langsung didaftarkan ke ssh-agent
    • Key yang telah didaftarkan dapat diperiksa dengan ssh-add -L
    • Setelah itu autentikasi dilakukan dengan perintah ssh -o SecurityKeyProvider=/usr/lib/ssh-keychain.dylib

Pengaturan default SecurityKeyProvider

  • Bisa ditentukan langsung di .ssh/config, atau tambahkan
    export SSH_SK_PROVIDER=/usr/lib/ssh-keychain.dylib ke .zprofile agar dikenali otomatis
  • Setelah itu, cukup gunakan perintah ssh-add -K atau ssh my-server untuk koneksi SSH berbasis security key
Iklan

Key yang dapat diekspor (Exportable Keys)

  • Perintah sc_auth create-ctk-identity -l ssh-exportable -k p-256 -t bio dapat membuat key untuk ekspor yang dienkripsi dengan Secure Enclave
    • Key dapat diekspor ke file PEM dengan export-ctk-identity,
      lalu didaftarkan ulang di perangkat lain dengan import-ctk-identities
  • Pendekatan ini sedikit lebih rendah dari sisi keamanan, tetapi lebih menguntungkan untuk cadangan

Diskusi pengembang dan perluasan kode

  • Di komentar, dibahas kemungkinan penggunaan flag .biometryCurrentSet
    • Saat ini hanya didukung "apakah biometrik digunakan atau tidak (on/off)", tanpa kontrol yang lebih rinci
  • Penulis meninjau kemungkinan menambahkan fitur biometryCurrentSet ke fungsi sk_enroll() dengan melakukan reverse-engineering pada ssh-keychain.dylib
  • Contoh kode yang diajukan memerlukan code signing (codesign) dengan akun Apple Developer Program agar bisa mengakses Secure Enclave
  • Kode tersebut mencakup logika pembuatan key, penandatanganan, dan pendaftaran (sk_enroll, sk_sign, dll.),
    serta mengimplementasikan proses pembuatan dan penandatanganan ECDSA P-256 key di Secure Enclave

Ringkasan

  • macOS kini mendukung secara native autentikasi SSH yang langsung memanfaatkan Secure Enclave
  • Melalui autentikasi biometrik berbasis Touch ID dan struktur yang kompatibel dengan FIDO2, keamanan dan kemudahan penggunaan meningkat
  • Tanpa perangkat keras eksternal atau software tambahan, SSH key dapat dikelola hanya dengan fitur bawaan sistem
  • Para pengembang juga sedang bereksperimen memperluas ssh-keychain.dylib untuk kontrol biometrik yang lebih terperinci

1 komentar

 
GN⁺ 2025-11-24
Komentar Hacker News
  • Jika saya memahaminya dengan benar, ini berarti kunci privat tidak bisa dicadangkan
    Karena disimpan di dalam Secure Enclave, jika laptop hilang maka kuncinya juga ikut hilang
    Sepertinya hanya kunci publik yang bisa diekspor. Tentu mungkin ada pendekatan lain atau reset oleh admin, tetapi tetap terasa agak mengkhawatirkan
    Nantinya OP akan menambahkan balasan dan memperbarui halaman web

    • Lihat man sc_auth. Alih-alih membuatnya langsung di Secure Enclave, kita bisa membuat kunci terenkripsi yang dapat diekspor
      Contoh perintahnya menjalankan sc_auth create-ctk-identity -l ssh-exportable -k p-256 -t bio, lalu setelah itu bisa membuat file .pem dengan export-ctk-identity
      Di perangkat lain, itu bisa diimpor kembali dengan import-ctk-identities. Konten ini rencananya akan ditambahkan ke panduan
    • Kunci aslinya memang bukan untuk “diekspor”. Setiap kali kunci dipindahkan, ada risiko terekspos
      Inti PKI adalah hanya kunci publik yang berpindah, dan kunci privat harus ada di satu tempat saja
    • Betul. Sebaiknya membuat beberapa kunci sebagai cadangan
      Dengan begitu, dalam kondisi apa pun kunci tidak akan bocor
    • Tidak bisa mengekspor kunci privat adalah konsep yang sama seperti YubiKey
      Kunci privat yang dibuat di YubiKey juga tidak bisa dicadangkan
    • Secara prinsip, memang benar menggunakan beberapa kunci
      Idealnya satu per perangkat, agar tidak masalah meski perangkat hilang atau dicuri
      Saya menyimpan YubiKey yang dilindungi PIN di brankas. Jadi kalau laptop, ponsel, dan YubiKey harian saya semuanya hilang, saya tetap siap
  • Kalau melangkah sedikit lebih jauh, penandatanganan GPG berbasis ECDSA juga memungkinkan
    Hanya saja, karena bug, diperlukan GPG dan SSH agent yang sudah dipatch
    Ada versi paket dengan UI untuk macOS (KeetaNetwork/agent),
    dan backend yang sama juga berjalan di Linux dengan TPM melalui PKCS#11
    Perbedaan antara GPG dan SSH hanyalah cara pembungkusan kunci dan tanda tangan; pada dasarnya semuanya ECDSA

  • Secretive lebih mudah dikonfigurasi, tetapi saya berpikir untuk beralih ke cara ini agar mengurangi satu aplikasi
    Saya merangkum cara menyiapkan kunci SSH berbasis TPM di Windows 11 di blog saya

    • Saya penasaran apakah di Linux juga bisa menyimpan ssh-key di TPM
  • Ini fitur yang cukup keren
    Saya sudah lama menggunakan Secretive, dan itu jauh lebih nyaman daripada kunci atau kartu fisik
    Setiap kali kunci SSH digunakan, saya harus menekan tombol atau melakukan autentikasi sidik jari, jadi saya bisa tahu dengan jelas kapan kunci itu dipakai
    Saya bisa mempertahankan tunnel ssh-agent sehingga tetap bisa melakukan penandatanganan git dengan aman di server jarak jauh
    Hanya saja, versi Tahoe penuh bug dan sering macet. Saya tidak punya waktu untuk men-debug, jadi saya biarkan saja
    Saya pernah susah dengan UX SSH berbasis Smart Card dulu, tetapi kalau stabil, ini layak dicoba

    • Saya juga suka Secretive, tetapi fitur konfirmasi ssh-agent sudah lama didukung di OpenSSH
      Melalui ssh-askpass, kita bisa meminta konfirmasi setiap kali kunci privat digunakan. Hanya saja, tidak bisa membedakan lokal/jarak jauh
  • Cara ini memakai kurva yang dicurigai telah disisipi backdoor oleh NSA, jadi perlu hati-hati

  • Saya penasaran, kalau disimpan di dalam Secure Enclave, mengapa masih perlu file kunci privat

    • Implementasi sk di OpenSSH juga sama. Bahkan dengan opsi “resident key”, file kunci privat tetap diperlukan
      Itu sebenarnya hanya referensi ke kredensial FIDO dan tidak berisi data kunci rahasia yang sesungguhnya
      Untuk kunci sk non-resident, file itu diperlukan karena authenticator perangkat keras tidak menyimpan state
      Saya tidak yakin apakah implementasi macOS ini menyimpan state atau tidak. Bisa jadi akan rusak saat OS diinstal ulang
  • Ada proyek bernama facebookincubator/sks
    Ini adalah library golang yang mengabstraksikan berbagai kunci SSH berbasis perangkat keras, dan mendukung Linux, Windows, serta macOS

    • Tetapi hanya dengan library golang saja ssh-agent tidak akan berjalan
      Karena itu, dulu saya mulai membuat ssh-tpm-agent sendiri
  • Saya ingin menggunakan kunci privat yang sama di iPhone untuk menandatangani email atau file
    Saya penasaran apakah iCloud bisa menangani ini

    • Kunci seperti ini tidak disinkronkan melalui iCloud
      Yang disinkronkan justru Passkey. Kita perlu membuat SecurityKeyProvider baru yang berkomunikasi dengan API Passkey
      Passkey terikat pada bundle ID aplikasi atau domain tertentu
      Misalnya jika Secretive mendukung Passkey, pasangan kunci itu tidak bisa dipakai di aplikasi lain, tetapi
      akan disinkronkan antarperangkat untuk aplikasi yang sama
  • Sudah waktunya menambahkan fitur baru ke KeyMux
    Alat ini mendukung kunci enclave untuk SSH, SSL, dan PGP,
    misalnya Anda bisa mengakses server Vault dengan sertifikat SSL berbasis Secure Enclave lalu melakukan autentikasi SSH dengan kunci privat Vault yang tidak dapat diekspor
    Bisa dilihat di keymux.com dan tautan App Store