Implementation of FIDO2 hmac-secret extension in KeePassXC #9506
Replies: 13 comments 50 replies
-
Bottom line it must work, from the ui front, exactly how the yubikey implementation works. Otherwise have at it. From a later post:
|
Beta Was this translation helpful? Give feedback.
-
For full transparency, I have been approached by a representative from Trezor, who is sending me a Trezor Model T free of charge for testing purposes. Aside from that, I have a Yubikey "Security Key Series", that does not have Challenge-Response but does have FIDO2 hmac-secret, that I have been testing with, and I am talking with Hypersecu to possibly get a Hyperfido PRO for testing, because their 'hmac-secret' support is unconfirmed and untested as yet. |
Beta Was this translation helpful? Give feedback.
-
Technical Talk. |
Beta Was this translation helpful? Give feedback.
-
We already include libcrypto and libssl libraries to support https in qt |
Beta Was this translation helpful? Give feedback.
-
Is there an easy way to check a given hardware token for I have a SoloKey 1 and a SoloKey 2, is there some way to find out if they support |
Beta Was this translation helpful? Give feedback.
-
Given the hardware test results above, I am fully supportive of this effort. |
Beta Was this translation helpful? Give feedback.
-
Does anyone know how I can get my hands on a TrustKey G310 for testing and development purposes? It is an outlier from others listed above, it is the only FIDO Level 2 certified device, and it is also Citrix certified for whatever that's worth. It has biometrics incorporated (fingerprint), and it is interesting because it uses very different chip platform and architecture (eWBM MS500) than the rest of those listed. |
Beta Was this translation helpful? Give feedback.
-
Next topic: Multiple Security Keys Its not uncommon for WebAuthn-enabled websites to allow the user to enroll multiple hardware security keys, any of which can be used to unlock their account. For example, some people might have two keys, one at work and one at home, and they need to be able to use any one of those keys as 2FA when logging into their account. This is a documented and supported feature of the WebAuthn spec. Some might have heard, Apple recently enabled WebAuthn-based 2FA to iCloud accounts. One quirk of the Apple implementation is they require you to have at least two different hardware security keys registered on your account before the feature is activated. This is because they know people are humans, people can lose hardware security keys just as easily as people can forget passwords. Getting locked out of iCloud because you lost your security key is probably a bad time, so a backup device is useful. The current KeePassXC Yubikey Challenge-Response does not allow for the ability to enroll more than one key. One reason is because the security challenge is rotated every time the db is saved. The challenge can only rotated if the key is currently inserted, so you would need both keys inserted every time the db is saved. Its definitely out of scope for the initial implementation, but I think it would be useful to think about how it could be possible to support more than one possible challenge response. |
Beta Was this translation helpful? Give feedback.
-
@ashleysommer May I know where this project stranded, I'm curious about its progress :) I read that someone had been working on a Fido platform that could be used |
Beta Was this translation helpful? Give feedback.
-
Hi @ashleysommer , I just ran across this bug report and I think that describing this key as supporting hmac-secret:
might be inaccurate? At least, this bug report in python-fido2 has not received a response since I filed it: Yubico/python-fido2#183 |
Beta Was this translation helpful? Give feedback.
-
I've raised https://github.com/libkeepass/pykeepass/pull/373/files#diff-676d339ebd6081511f5da6080cb3121a7e8f4f2f8ad606d4513a52862e185c53 to support multifactor authentication in pykeepass. I find it easy to protype things with Python code. Assuming the spec is okay, I'll implement it here soon. I've implemented a |
Beta Was this translation helpful? Give feedback.
-
I've raised #10311 against this repository. |
Beta Was this translation helpful? Give feedback.
-
I've raised https://gitlab.com/kunzisoft/android-hardware-key-driver/-/merge_requests/12 to let Android devices do hmac-secret stuff with FOSS. After that's merged I'll implement compatible code in KeePassDX. |
Beta Was this translation helpful? Give feedback.
-
Currently, Hardware Security Key support in KeePassXC is implemented on a device-specific basis, and only supports devices that expose a HMAC Challenge-Response feature. As a result, only some higher-end Yubikey models, and OnlyKey devices are supported (and an open Pull Request for NitroKey3 challenge-response support).
FIDO2 is a device-agnostic protocol implemented by a wide-range of hardware security keys from many different vendors. FIDO2 is most commonly used as part of the WebAuthN web authentication protocol, but it does have other use cases. There is an official FIDO2 extension called "hmac-secret", that allows supporting devices to produce a HMAC based on an input (the "salt"), in much the same way the HMAC Challenge-Response feature works, but without the need for application Resident Keys saved the device.
Implementing support for FIDO2 "hmac-secret" will have the immediate effect of adding support for a wide range of hardware security keys, including:
A Github issue for Adding support for FIDO2 "hmac-secret" extension in KeePassXC has been open since September 2019.
In that thread there has been much discussion about the use of FIDO2, many users indicating their support for the feature and further discussion focusing on the road blocks, particularly the use of FIDO2 on Windows 10 and Windows 11.
Since the release of Libfido v1.12 and the latest update of Windows 11, those limitations are resolved and the roadblocks are behind us. I don't see anything else standing in the way of a cross-platform implementation of FIDO2 "hmac-secret" support in KeePassXC.
Three days ago a user placed a financial reward bounty on the thread, to be awarded when the implementation is completed and merged into KeePassXC. This has renewed interest in the topic and spurred further discussion in the github issue thread.
I personally have experience in implementing FIDO2, particularly the "hmac-secret" extension in Python using the python-fido2 module, and have recently implemented a standalone proof of concept in c++ using libfido. I have offered to complete the implementation of the feature in KeePassXC and attempt to claim the bounty, however there are specifics that need to be discussed for how the new implementation will best fit into the KeePassXC codebase and co-exist with the existing Yubikey and OnlyKey device-specific code. That is the purpose of this discussion thread.
Beta Was this translation helpful? Give feedback.
All reactions