OpenSSH >=8.2 允许使用 FIDO2 身份验证,并且 ssh-keygen 命令允许在 FIDO2 令牌上创建驻留密钥(例如 Yubikey)。还可以选择在密钥生成期间使用写入证明选项输出证明数据。例如
ssh-keygen -t ed25519-sk -O resident -O write-attestation=id_ed25519-Yubikey.attest -O application=ssh:id_ed25519-Yubikey -f id_ed25519-Yubikey
两个问题:
OpenSSH 创建的证明文件的格式是什么?
证明数据可以用于验证相应的 ssh 公钥是在 FIDO2 令牌上生成的,因此仅作为 Yubikey/FIDO2 令牌上的常驻密钥驻留吗?
格式记录在此处:
Attestation information is useful for out-of-band key and certificate
registration workflows, e.g. proving to a CA that a key is backed
by trusted hardware before it will issue a certificate. To support this
case, OpenSSH optionally allows retaining the attestation information
at the time of key generation. It will take the following format:
string "ssh-sk-attest-v01"
string attestation certificate
string enrollment signature
string authenticator data (CBOR encoded)
uint32 reserved flags
string reserved string
我不相信现在的 openssh 服务器可以直接使用它。但是,您可以将其与 ssh 证书颁发机构结合使用,仅向已证明它们是在特定 fido2 设备上生成的密钥颁发证书。
您可以使用类似这样的快速&脏脚本:https://gist.github.com/joostd/ed790ade9ddd4b711af6c1b80eaed7ca
$ openssl rand 32 > challenge.bin
$ ssh-keygen -t ${KEYTYPE} -f ./id -N "" -O challenge=challenge.bin -O write-attestation=attestation.bin
...
$ curl -sL https://mds3.fidoalliance.org/ > mds.jwt
$ ./ssh-sk-attest.py --mds mds.jwt
✅ valid attestation for hardware authenticator (ee882879-721c-4913-9775-3dfcce97072a): YubiKey 5 Series