Yubico/libfido2

Yubikey bio assertion - failed to fallback from fingerprint to PIN

niryanowsky opened this issue · 4 comments

Hello,

Working in Windows 11 with Yubikey bio.
After generate a new credential in Yubikey bio with hmac Extension and uv = true,
I'm not able to fallback from fingerprint to PIN in the assertion, even thought fido_dev_get_retry_count == 8.

The Assertion case:

Assertion uv = true, up = omit

fido_dev_get_assert(device, _assertion, nullptr)
-> put wrong FP.
-> get FIDO_ERR_UV_INVALID, fido_dev_get_uv_retry_count == 2
fido_dev_get_assert(device, _assertion, nullptr)
-> put wrong FP.
-> get FIDO_ERR_UV_INVALID, fido_dev_get_uv_retry_count == 1
fido_dev_get_assert(device, _assertion, nullptr)
-> put wrong FP.
-> get FIDO_ERR_UV_INVALID, fido_dev_get_uv_retry_count == 0
fido_dev_get_assert(device, _assertion, CORRECT_PIN);
-> get FIDO_ERR_INTERNAL (fido_dev_get_retry_count == 8)

LevelLog = DEBUG. the log is only the last call to fido_dev_get_assert(with the correct PIN)

libfido: fido_dev_authkey_tx: dev=00000223666A0B90

libfido: fido_tx: dev=00000223666A0B90, cmd=0x10

libfido: fido_tx: buf=0000022365FDE2E0, len=6

libfido: 0000: 06 a2 01 02 02 02

libfido: fido_dev_authkey_rx: dev=00000223666A0B90, authkey=000002236671DC80, ms=-1

libfido: fido_rx: dev=00000223666A0B90, cmd=0x10, ms=-1

libfido: rx_preamble: buf=0000005605DFDC70, len=64

libfido: 0000: 5f 83 df d9 bf 00 01 06 00 00 00 00 00 00 00 00

libfido: 0016: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

libfido: 0032: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

libfido: 0048: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

libfido: rx_preamble: cid (0xd9df835f, 0xd9df835f), cmd (0xbf, 0x10)

libfido: rx: rx_preamble

libfido: fido_dev_authkey_rx: fido_rx

libfido: fido_do_ecdh: fido_dev_authkey

libfido: fido_dev_get_assert: fido_do_ecdh

Note: if I put the correct FP it is work perfectly.

Any Idea why this happening ?

Thanks

I am not sure I understand the question. You talk about fido_dev_make_cred(), but the debug output concerns fido_dev_get_assert(). Is the problem happening with fido_dev_make_cred(), fido_dev_get_assert(), or both?

@martelletto
Sorry, my bad. update the post.
It's happen to me only in assertion, when using fido_dev_get_assert().
When make credential the fall back works fine.

Thank you for the clarification. Could you tell me a bit more about what the application is doing? For instance, are you opening the device once and making multiple calls to fido_dev_get_assert(), or do you open and close the device each time? Would it be feasible to reproduce the problem with dummy credentials and share the complete output of FIDO_DEBUG=1?

The fallback is able when I change always_uv from 1 to 0 after builtInUvRetry is 0.
And it is make sense with the Client to Authenticator Protocol.
Thanks any way.