Mac 用户现在可以使用设备的 Secure Enclave(一个专用的硬件安全模块)来存储在物理上受到保护、无法被提取的 SSH 身份。与存储在 `~/.ssh` 目录中的传统 SSH 密钥不同,这些身份是在 enclave 内部生成的,且只能通过生物识别身份验证(如 Touch ID)进行访问。这种设置确保了即使机器的文件系统遭到破坏,私钥材料仍无法被获取,因为它从未离开过安全的硬件。

此视觉效果代表了文章中描述的将 Secure Enclave 用于硬件绑定 SSH 密钥的概念。
为了实现这一功能,用户可以使用 `sc_auth` 命令行工具来创建一个“CryptoTokenKit”(CTK)身份。通过指定 `p-256-ne` 密钥类型,系统将生成一个“不可提取”的密钥。为了将其与标准 SSH 协议桥接,macOS 提供了一个名为 `ssh-keychain.dylib` 的转换库。通过使用 `ssh-add -K -S` 命令将此库注册为安全密钥提供程序,SSH agent 即可学会与 Secure Enclave 进行通信。当用户尝试连接到服务器(例如 GitHub)时,agent 会请求 enclave 提供签名,这将触发 Mac 上的 Touch ID 提示。
虽然这提供了高水平的安全性,但也引入了一个显著的权衡:密钥是与硬件绑定的。由于私钥材料无法导出,用户如果丢失 Mac 或发生硬件故障,将失去对这些特定身份的访问权限。这需要一个稳健的备份策略,例如保留备用的物理安全密钥或为另一个密钥保留纸质备份。此外,虽然此方法消除了意外删除文件的风险,但它创建了一条“单行道”,即身份被锁定在特定的硬件上,这可能会使需要频繁更换设备或多设备同步的工作流变得复杂。
技术细节包括,即使在使用生物识别时,`ssh-add` 可能仍会提示输入 PIN 码,因为它默认采用 FIDO 风格的验证器逻辑。此外,虽然 `p-256-ne` 曲线目前是此工作流的标准,但用户必须确保使用 `-t bio` 保护标志来强制执行生物识别要求,否则 enclave 可能会允许在无需指纹检查的情况下仅通过软件访问。这些配置确保了操作系统网络栈能够真正利用 enclave 那种“科幻式”的安全性。
最终,这种方法将安全模型从“你拥有的东西”(磁盘上的文件)转变为了“你本身的东西”(生物识别签名)与硬件锁定密钥的结合。它有效地消除了通过文件系统访问窃取密钥的风险,但要求用户接受硬件链接的永久性。对于需要更多灵活性的人来说,使用受 Touch ID 保护的本地密码库来解密标准 SSH 密钥等替代方法,仍然是那些需要可移植密钥备份的用户可选的方案。
该机制依赖于 `ssh-keychain.dylib` 库导出的 `_sk_load_resident_keys` 和 `_sk_sign` 符号。这些符号允许 SSH agent 发现驻留在 enclave 中的公钥,并请求 enclave 执行挑战的加密签名。这一流程镜像了 FIDO2 安全密钥的工作方式,但将外部 USB 设备替换成了 Mac 处理器的内部硅片。
用户注意到的一个限制是,并非所有应用程序或协议都能以相同的方式与 Secure Enclave 交互。虽然它在标准 SSH 和 Git-over-SSH 中运行顺畅,但它可能不兼容每一个自定义的身份验证流程。用户还应意识到,由于身份是不可提取的,他们不能简单地将密钥复制到新电脑上;每当他们更换硬件时,必须生成新的身份并将其注册到服务提供商处。