通过将 SSH 密钥材料移入安全的硬件 enclave,用户可以确保即使主机的文件系统遭到破坏,私钥也无法在没有物理硬件存在的情况下被窃取或使用。这种转变解决了“传统”磁盘密钥的漏洞,因为任何获得本地机器 root 权限的攻击者都可以访问这些密钥。

向硬件驻留密钥的转变

传统的 SSH 密钥通常作为文件存储在磁盘上,仅受密码短语保护。虽然密码短语使用 bcrypt 和 AES 对密钥进行加密,但如果攻击者在主机上获得足够的权限,解密后的材料仍然是脆弱的。硬件驻留密钥将这种保护转移到安全 enclave 或像 YubiKey 这样的专用设备上。

主要的安全性优势在于,生成密钥所使用的硬件是使用该密钥的必要条件。由于没有泄露内部密钥材料的机制,窃取磁盘镜像或获得远程 root 权限的攻击者在没有物理持有硬件的情况下无法复制该密钥。

“这里的理论优势是,生成 SSH 密钥所使用的硬件是使用该密钥所必需的。”

— I deleted all my SSH keys

实现方法:YubiKey、TPM 和 Secure Enclave

YubiKey 方法利用 ed25519-sk(Security Key)格式。当密钥以驻留选项注册时,YubiKey 会在内部存储材料。主机磁盘上的文件变成了一个指向硬件设备的单纯“句柄”。用户可以配置这些密钥,要求每次身份验证尝试时进行物理触摸,提供高水平的存在检测。

演示 YubiKey ed25519-sk 注册方法的代码列表
将驻留密钥注册到 YubiKey 设备的示例配置。web.archive.org

此截图展示了将密钥注册到 YubiKey 内部内存的特定命令行方法。

对于希望利用现有硬件的用户,可以通过 ssh-tpm-agent 使用 TPM(Trusted Platform Module)。与 YubiKey 不同,TPM 不原生支持注册 SSH 密钥;相反,私钥材料以加密形式存储在磁盘上,并使用 TPM 进行解密。这使密钥与特定机器的硬件绑定。

使用 ssh-tpm-agent 进行无人值守 TPM 使用的代码列表
使用 TPM 解密磁盘上加密密钥文件的配置示例。web.archive.org

此视觉效果展示了使用 ssh-tpm-agent 实现的 TPM 支持密钥。

在 macOS 上,Smart Card Auth 系统可以在 Apple Secure Enclave 内创建不可导出的身份。在创建过程中使用 -ne(不可导出)标志,可强制密钥留在 enclave 内。这些身份可以作为句柄导出到磁盘,OpenSSH 随后可以通过 ssh-keychain.dylib 提供程序来使用它们。

在 Apple Secure Enclave 中创建不可导出身份的代码列表
使用 -ne 标志确保密钥留在 Apple Secure Enclave 内的示例。web.archive.org

此截图显示了在 macOS 上创建不可导出身份的过程。

操作权衡与限制

转向硬件驻留密钥会引入特定的操作限制。例如,Apple Secure Enclave 密钥在“合盖模式”(笔记本盖子关闭)下可能会失败,因为 TouchID 不可用,这要求用户要么使用带有 TouchID 的蓝牙键盘,要么使用 YubiKey 进行存在检测。此外,硬件故障或丢失可能导致密钥永久无法使用,因此跨多个设备的冗余备份至关重要。

对于无人值守的身份验证存在重大限制。虽然 YubiKeys 支持“无需触摸”标志,但必须在服务器端通过在 authorized_keys 文件中添加密钥来明确允许。此要求可能不被所有第三方服务支持,例如 GitHub 或 BitBucket,它们可能会限制这些密钥用于自动化工作流。

Hacker News 读者的反应

  • 技术补充: 一位评论者指出,TPM 方法仍将私钥材料以加密形式存储在磁盘上,并指出任何拥有 TPM 访问权限的人都可能在没有所有者密码的情况下重新创建密钥。 评论 ↗
  • 技术补充: 几位评论者对硬件可靠性表示担忧,其中一位用户分享了 YubiKey 熔化的个人经历,另一位用户质疑如果设备丢失或损坏如何处理永久锁定。 评论 ↗
  • 技术补充: 一位评论者建议使用 YubiKey 作为证书颁发机构(CA)来签署短期、范围受限的 SSH 证书,作为一种折中的替代方案。 评论 ↗
  • 技术补充: 一位评论者指出关于多跳身份验证的实际限制,质疑硬件密钥目前是否支持通过跳板机进行第二跳身份验证。 评论 ↗

以上为 Hacker News 讨论中观点的摘要,并非经过核实的事实。 阅读完整讨论 ↗