Macユーザーは、物理的に抽出から保護されたSSHアイデンティティを保存するために、専用のハードウェアセキュリティモジュールであるデバイスのSecure Enclaveを利用できるようになりました。`~/.ssh`ディレクトリ内のファイルとして保存される従来のSSHキーとは異なり、これらのアイデンティティはエンクレーブ内で生成され、Touch IDなどの生体認証を介してのみアクセス可能です。この構成により、マシンのファイルシステムが侵害されたとしても、秘密鍵のデータは安全なハードウェアから決して外に出ることがないため、アクセス不能な状態が保たれます。

macOS上のネイティブSecure EnclaveバックアップSSHキーを表すグラフィック。
Secure Enclaveは、取り出し不可能なSSHアイデンティティを管理するためのハードウェア隔離環境を提供します。gist.github.com

このビジュアルは、記事で説明されているハードウェアに紐付けられたSSHキーのためのSecure Enclaveの使用という概念を表しています。

これを実装するために、ユーザーは`sc_auth`コマンドラインツールを使用して「CryptoTokenKit」(CTK)アイデンティティを作成できます。`p-256-ne`キータイプを指定することで、システムは「取り出し不可能(Non-Extractable)」なキーを生成します。これを標準的なSSHプロトコルと橋渡しするために、macOSは`ssh-keychain.dylib`という変換ライブラリを提供しています。`ssh-add -K -S`コマンドを使用してこのライブラリをセキュリティキープロバイダーとして登録することで、SSHエージェントはSecure Enclaveとの通信を学習します。ユーザーがサーバー(例:GitHub)への接続を試みると、エージェントはエンクレーブに署名を要求し、Mac上でTouch IDのプロンプトがトリガーされます。

この手法は高度なセキュリティを提供しますが、重要なトレードオフがあります。それは、キーがハードウェアに紐付けられていることです。秘密鍵をエクスポートできないため、Macを紛失したりハードウェアの故障が発生したりした場合、ユーザーはその特定のアイデンティティへのアクセス権を失います。そのため、二次的な物理セキュリティキーを保持する、あるいは別のキーの紙ベースのバックアップを維持するなど、堅牢なバックアップ戦略が必要になります。さらに、この方法は誤ってファイルを削除するリスクを排除しますが、アイデンティティが特定のハードウェアにロックされる「一方通行の道」を作り出すため、頻繁なデバイス移行やマルチデバイス同期を必要とするワークフローを複雑にする可能性があります。

技術的な細部として、`ssh-add`は生体認証を使用している場合でも、FIDOスタイルの認証ロジックをデフォルトとして採用しているため、依然としてPINの入力を求めることがある点が挙げられます。また、現在は`p-256-ne`曲線がこのワークフローの標準ですが、ユーザーは`-t bio`保護フラグを使用して生体認証の要件を強制することを確実にする必要があります。そうしないと、エンクレーブが指紋チェックなしでソフトウェアのみのアクセスを許可してしまう可能性があるためです。これらの設定により、エンクレーブの「SF映画のような」セキュリティが、オペレーティングシステムのネットワークスタックによって実際に活用されるようになります。

最終的に、このアプローチはセキュリティモデルを「持っているもの(ディスク上のファイル)」から「自分自身であるもの(生体署名)」とハードウェアロックされた秘密の組み合わせへと移行させます。これにより、ファイルシステムへのアクセスによるキー盗難のリスクを事実上排除しますが、ユーザーはハードウェアとのリンクの永続性を受け入れる必要があります。より柔軟性を必要とするユーザーにとっては、Touch IDで保護されたローカルパスワードストアを使用して標準的なSSHキーを復号する代替手法が、ポータブルなキーバックアップを必要とする場合の選択肢として残ります。

このメカニズムは、`ssh-keychain.dylib`ライブラリによってエクスポートされる`_sk_load_resident_keys`および`_sk_sign`シンボルに依存しています。これらにより、SSHエージェントはエンクレーブ内に存在する公開鍵を検出し、チャレンジに対する暗号署名をエンクレーブに実行するよう要求できます。このフローはFIDO2セキュリティキーの動作を反映していますが、外部のUSBデバイスの代わりにMacプロセッサの内部シリコンを使用している点が異なります。

ユーザーによって指摘されている制限の一つとして、すべてのアプリケーションやプロトコルが同じ方法でSecure Enclaveとインターフェースできるわけではないという点があります。標準的なSSHやGit-over-SSHではシームレスに動作しますが、すべてのカスタム認証フローと互換性があるとは限りません。また、アイデンティティが取り出し不可能であるため、新しいコンピュータにキーを単純にコピーすることはできず、ハードウェアを切り替えるたびに新しいアイデンティティを生成し、サービスプロバイダーに登録する必要があることにも注意が必要です。