SecuritySSHFIDO2U2FmacOSGit

笔记本电脑早已内置安全令牌——如何配置 macOS Secure Enclave 替代 YubiKey

Andrew Helwer··原文链接
收录于 2026/5/17 22:34:06

安全令牌的承诺

YubiKey 等安全令牌的核心承诺:私钥永不出设备。只能发送数据到设备上由私钥签名,且操作需物理交互(如触摸按钮或指纹验证)。这比 ~/.ssh 目录中的私钥文件安全得多——远程攻击者无法仅通过网络获取安全令牌的签名。

缺点

  • 用户可能被训练成「只要闪就按」,遭遇恶意请求
  • 丢失即永久失去私钥(需购买至少两个令牌做备份)
  • 加密货币的 BIP 39 助记词是备份私钥的最后手段

使用场景

1. SSH 认证 使用 FIDO/U2F 生成安全密钥:

# 安装 libfido2 后运行
ssh-keygen -t ed25519-sk

这会生成一对文件,但「私钥」文件只是指向安全令牌上真实私钥的句柄,可以安全公开。

2. Git 操作

# 配置 Git 使用 SSH 密钥签名
git config --global commit.gpgsign true

注意:rebase 时需要重新签名每个提交,指纹读取失败率过高可能是问题。

3. Linux PAM(密码less 登录 & sudo)

macOS Secure Enclave 配置

使用 Arian van Putten 的方法在 M1 MacBook Air 上配置:

# 创建 CTK 身份
sc_auth create-ctk-identity -l ssh -k p-256-ne -t bio

# 生成密钥对(使用 macOS keychain)
ssh-keygen -w /usr/lib/ssh-keychain.dylib -K -N ""

生成的 id_ecdsa_sk_rk 文件就是可以安全公开的「私钥」。

添加到远程服务器:

ssh-copy-id -i ~/.ssh/id_ecdsa_sk_rk.pub <server>

配置 ~/.ssh/config

Host *
  IdentityFile ~/.ssh/id_ecdsa_sk_rk
  SecurityKeyProvider=/usr/lib/ssh-keychain.dylib

SSH 登录时会自动弹出 macOS 指纹/密码验证。

Git 签名配置

直接使用文件路径不行,需通过 ssh-agent:

# 添加密钥到 ssh-agent
ssh-add -K -S /usr/lib/ssh-keychain.dylib

~/.gitconfig 中:

[user]
    name = Your Name
    signingKey = "key::[email protected] AAAAI..."

Windows Hello 也支持

winget install Microsoft.OpenSSH.preview
ssh-keygen -t ecdsa-sk

SSH 时使用 Windows Hello 进行人脸/指纹/PIN 验证。

结论

现代设备的 Secure Enclave 已足够强大,可以替代物理 YubiKey 进行日常开发工作,同时避免 USB 设备损坏端口的风险。