Yubico/libfido2

Key enrollment failed: invalid format

wujas-dongiel opened this issue · 2 comments

libfido2-1.11.0
Linux Slackware 15.0
OpenSSH 8.8p1-x86_64-2

I have similar problem to issue reported here Key enrollment failed: invalid format

$ ssh-keygen -t ed25519-sk -vvvv
Generating public/private ed25519-sk key pair.
You may need to touch your authenticator to authorize key generation.
debug3: start_helper: started pid=7418
debug3: ssh_msg_send: type 5
debug3: ssh_msg_recv entering
debug1: start_helper: starting /usr/libexec/ssh-sk-helper
debug1: sshsk_enroll: provider "", device "(null)", application "ssh:", userid "(null)", flags 0x01, challenge len 0
debug1: sshsk_enroll: using random challenge
No FIDO SecurityKeyProvider specified
debug1: ssh-sk-helper: Enrollment failed: invalid format
debug1: main: reply len 8
debug3: ssh_msg_send: type 5
debug1: client_converse: helper returned error -4
debug3: reap_helper: pid=7418
Key enrollment failed: invalid format

fido2-token -L
$ fido2-token -L
/dev/hidraw4: vendor=0x1050, product=0x0407 (Yubico YubiKey OTP+FIDO+CCID)
fido2-token -I
$ fido2-token -I <device>
proto: 0x02
major: 0x05
minor: 0x04
build: 0x03
caps: 0x05 (wink, cbor, msg)
version strings: U2F_V2, FIDO_2_0, FIDO_2_1_PRE
extension strings: credProtect, hmac-secret
transport strings: nfc, usb
algorithms: es256 (public-key), eddsa (public-key)
aaguid: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
options: rk, up, noplat, clientPin, credentialMgmtPreview
maxmsgsiz: 1200
maxcredcntlst: 8
maxcredlen: 128
maxlargeblob: 0
fwversion: 0x50403
pin protocols: 2, 1
pin retries: 8
uv retries: undefined
FIDO_DEBUG=1
$ export FIDO_DEBUG=1
$ fido2-token -L
get_key_val: key_len=4
run_manifest: found 1 hid device
run_manifest: found 0 nfc devices
/dev/hidraw4: vendor=0x1050, product=0x0407 (Yubico YubiKey OTP+FIDO+CCID)
ykman info
$ ykman info
Device type: YubiKey 5C NFC
Serial number: xxxxxxxxxxxx
Firmware version: 5.4.3
Form factor: Keychain (USB-C)
Enabled USB interfaces: OTP, FIDO, CCID
NFC transport is enabled.

Applications USB NFC
FIDO2 Enabled Enabled
OTP Enabled Enabled
FIDO U2F Enabled Enabled
OATH Enabled Enabled
YubiHSM Auth Enabled Enabled
OpenPGP Enabled Enabled
PIV Enabled Enabled

I've built the libsk-libfido2.so from here external-sk-libfido2 but get the following

$ssh-keygen -t ed25519-sk -w ./libsk-libfido2.so -vvvvv
Generating public/private ed25519-sk key pair.
You may need to touch your authenticator to authorize key generation.
debug3: start_helper: started pid=8144
debug3: ssh_msg_send: type 5
debug3: ssh_msg_recv entering
debug1: start_helper: starting /usr/libexec/ssh-sk-helper
debug1: sshsk_enroll: provider "./libsk-libfido2.so", device "(null)", application "ssh:", userid "(null)", flags 0x01, challenge len 0
debug1: sshsk_enroll: using random challenge
debug1: sshsk_open: provider ./libsk-libfido2.so implements version 0x00040000
Provider "./libsk-libfido2.so" implements unsupported version 0x00040000 (supported: 0x00070000)
debug1: ssh-sk-helper: Enrollment failed: invalid format
debug1: main: reply len 8
debug3: ssh_msg_send: type 5
debug1: client_converse: helper returned error -4
debug3: reap_helper: pid=8144
Key enrollment failed: invalid format

I've tried it with libfido-1.4.0 and libfido2-1.11.0 with the same result
When I've cheated a bit and changed the api version line to match the supported version (0x00070000) and recompiled then at least I was asked for PIN and expected to touch Yubikey. But that failed otherwise.

Hi,

Thank you for the report. As you have observed, the problem is due to mismatching API versions:

Provider "./libsk-libfido2.so" implements unsupported version 0x00040000 (supported: 0x00070000)

If possible, consider rebuilding OpenSSH with --with-security-key-builtin, which will make OpenSSH use its internal middleware. The alternative would be to update https://github.com/pts/external-sk-libfido2 to provide the API version expected by your existing OpenSSH build.

-p.

Hi,

Thanks for Your reply. I've compiled with the --with-security-key-builtin and now it works.