开发者生态
morning
使用 macOS Secure Enclave 保护 SSH 密钥
摘要
I’ve been paranoid about my SSH keys for a while now. They just sit there in ~/.ssh/ , protected by nothing but file permissions. Any malicious script that gets access to my filesystem could just copy...
the
that
SSH
keys
but
Secure
Enclave
and
with
macOS
2026-11-11
1 阅读
约8分钟阅读
js2
字号:
一段时间以来,我一直对我的 SSH 密钥感到偏执。它们只是位于 ~/.ssh/ 中,除了文件权限之外没有任何保护。任何可以访问我的文件系统的恶意脚本都可以复制它们并进入我的所有服务器。此外,网上有很多关于虚假面试作业的故事,这些面试作业要求克隆存储库并在本地计算机上运行它。这是我完全转向使用 devcontainers 的原因之一,但即使这对我来说还不够(而且对于你或其他任何人来说,这应该还不够)。所以我最终决定为此做点什么。 TL;DR 我决定不采用原生 macOS Secure Enclave 方法(仅使用开箱即用的工具),因为它最终变得丑陋,我无法忍受。然而,它是一个功能齐全、可行的解决方案,否则我肯定会使用它。经过一番研究,我发现了几种保护 SSH 密钥的方法: 原生 macOS Secure Enclave — 无第三方应用程序,内置于操作系统中 Secretive — 在 Secure Enclave 中存储密钥的第三方应用程序 YubiKey — 支持 FIDO2 的硬件安全密钥 1Password / Bitwarden — 将密钥存储在加密保管库中,使用他们的 SSH 代理 我已经使用 1Password,但将来可能会改用其他方法。 Bitwarden 最近添加了 SSH 密钥支持(即使是在免费层!),但它仍然是一个软件解决方案 - 密钥在静态时加密,但在使用时在内存中解密。我真正想要的是硬件支持的安全性。即使我的 Mac 完全受损,私钥实际上也应该无法提取。这给我留下了 YubiKey 或 Secure Enclave。我有一个 YubiKey 5C,但我想首先尝试本机方法 - 无需携带额外的硬件,无需维护第三方应用程序。什么是安全飞地 SSH?自 macOS Sequoia(和 Tahoe)以来,macOS 支持由 Secure Enclave 支持的 SSH 密钥,Secure Enclave 是 Mac 芯片上与主处理器隔离的安全子系统。私钥在其中创建并且永远不会离开。当您在某处进行 SSH 时,您的 Mac 会要求 Secure Enclave 签署身份验证质询。如果启用 Touch ID,则必须批准每个签名操作。实际的私钥永远不存在于内存或磁盘中。工作流程与常规 SSH 密钥惊人地相似: Aspect 常规 SSH 密钥 Secure Enclave 密钥 私钥所在的位置 ~/.ssh/id_ed25519(文件) Secure Enclave 磁盘上有什么 实际私钥 只是一个参考(没有这台 Mac 无用) 在远程服务器上设置 将公钥复制到authorized_keys 相同连接 正常工作 触摸 ID 提示,然后工作 设置步骤 1:创建 Secure Enclave 密钥 macOS 提供 sc_auth 命令(智能卡)身份验证)来管理 CryptoTokenKit 身份。尽管有这个名字,它也适用于 Secure Enclave。 sc_auth create-ctk-identity -l "ssh-MacBook" -k p-256-ne -t bio 详细说明: -l "ssh-MacBook" — 供您参考的标签(仅在本地可见) -k p-256-ne — NIST P-256 曲线,不可导出(密钥永远无法离开 Secure Enclave) -t bio — 每次使用都需要生物识别 (Touch ID) 系统将提示您使用 Touch ID 创建关键。问题 1:Touch ID 错误 当我第一次运行此命令时,我收到一个可怕的错误: Error: Error Domain=NSOSStatusErrorDomain Code=-25293 "Failed to generated keypair" (errKCAuthFailed / errSecAuthFailed: / Authorization/Authentication failed.) UserInfo={..., NSUnderlyingError=... "Failed to get bio catacomb UUID for user 502." ...} 结果我的 Touch ID 注册不知何故被重置了。在“系统设置”→“触摸 ID 和密码”中重新注册指纹后,该命令运行良好。您可以验证密钥是否已创建: sc_auth list-ctk-identities 输出: Key Type Public Key Hash Prot Label Common Name Valid To Valid p-256-ne A71277F0BC5825A7B3576D014F31282A866EF3BC bio ssh-MacBook ssh-MacBook 2027-01-26, 10:18 YES 步骤 2:导出密钥句柄 现在我们需要创建一个 SSH 可以使用的“密钥句柄”文件。这不是私钥——它只是一个参考,告诉 SSH“去要求 Secure Enclave 对此进行签名。” ssh-keygen -w /usr/lib/ssh-keychain.dylib -K -N "" 当提示输入 PIN 时,只需按 Enter 键(不用于生物识别密钥)。触摸 ID 将会弹出。这将在当前目录中创建 id_ecdsa_sk_rk 和 id_ecdsa_sk_rk.pub。将它们移动到您的 SSH 目录: mv id_ecdsa_sk_rk* ~/.ssh/ 步骤 3:配置 SSH 以使用 Secure Enclave 提供程序 将其添加到您的 ~/.zshrc (或 ~/.bashrc ):export SSH_SK_PROVIDER = /usr/lib/ssh-keychain.dylib 重新加载您的 shell:问题 2:过时的命令无处不在 如果您在线搜索“macOS Secure Enclave SSH”,你会发现很多指南告诉你运行 ssh-add -K 。不。它已被弃用:警告:-K 和 -A 标志已被弃用,并分别被 --apple-use-keychain 和 --apple-load-keychain 标志取代。甚至新标志也不适用于 Secure Enclave 密钥——它们适用于传统的 macOS 钥匙串,而不是 CryptoTokenKit。 SSH_SK_PROVIDER 环境
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱