FIDO/U2F OpenSSH
FIDO/U2F 在 OpenSSH 8.2 中得到支持。新增了 ed25519-sk
和 ecdsa-sk
两种密钥类型。需要 Client 和 Server 的版本同时为 8.2 以上才能使用1。
什么是可发现密钥
FIDO/U2F OpenSSH密钥由两部分组成,在认证时组合起来响应质询:
-
私钥句柄Key Handle,默认储存在硬盘的文件之中
-
认证器Authencator设备私钥,独有且无法导出
如果认证器需要在不同的设备上使用,非可发现密钥 需要额外拷贝私钥句柄,相对麻烦。
通过 FIDO2 常驻密钥2 的特性,将私钥句柄存放到认证器的内存区域中,需要使用时从设备中下载。
由于将密钥的两部分都放在认证器中,增加了认证器被盗时,密钥被盗用的可能。因此,使用此功能时,认证器必须设置有PIN,并且下载私钥句柄前需要输入。
如何操作
如果希望使用 可发现密钥 的特性,且认证器支持
# 在认证器中生成
# -O resident 表示密钥应存储在认证器本身,更多选项见 ssh-keygen(1) manual
ssh-keygen -t ed25519-sk -O resident
# 一些认证器可能不支持 ED25519,可改用
# ssh-keygen -t ecdsa-sk -O resident
# 临时从认证器中加载 私钥句柄 到 SSH agent
ssh-add -K
# 从认证器中下载私钥句柄到文件
ssh-keygen -K
# 移动到OpenSSH默认加载路径
mv ./id_ecdsa_sk_rk ~/.ssh/id_ecdsa_sk
# 可选,保存一下公钥
mv ./id_ecdsa_sk_rk.pub ~/.ssh/id_ecdsa_sk.pub
否则
ssh-keygen -t ed25519-sk
# ssh-keygen -t ecdsa-sk
其他问题
- Windows OpenSSH Client 需要使用 8.9.0.0以上,可以 前往 PowerShell/Win32-OpenSSH 下载并更新。并且需要在管理员模式下运行下载密钥的命令。
其他方法
-
可以将 gpg-agent 用于 SSH认证,即使用GPG的子密钥认证。
-
通过 gpg-agent -> scdaemon -> pcscd 访问 智能卡,使用 CCID模式 的 PKCS#11接口。
-
-
可以使用PIV(用户证书),通过证书及对应私钥进行验证
-
FIDO Resident Keys;已在新的 WebAuthn 与 FIDO CTAP 中被重命名为 可发现凭据 (Discoverable Credentials) ↩︎