We built the pilot to show a standard lightning invoice with a QR code and NFC. Any wallet capable of paying that invoice could pay.
Whatever wallet you use did need to have liquidity on the network that can reach our routing node, c=, but we worked hard to make sure we had plenty of liquidity to all major wallets. I definitely recommended cashapp without shame at the conference, but I did a lot of testing with other wallets too. I never had much trouble, even with non-custodial lightning wallets.
This is the exact reason I self host vault warden. I get all the convenience of syncing passkeys, but know that I am the only one with access to the back-end.
I am also slightly paranoid as a security engineer, and admit that whole heartedly.
I share your paranoia and felt that passkeys were a step back as anything getting access to your browser extension memory can realistically dump both your "password" and MFA ("passkey") in one move.
I wonder if there would be a way for vaultwarden to wrap passkeys such that a hardware FIDO2 key is needed to decrypt them "per-use", and prevent software on the host from stealing a pile of passkeys that give direct access to accounts without further MFA.
Right now it feels like passkeys in the password manager is akin to storing MFA seeds and recovery keys in the same password manager...
I'm also waiting for a password manager that tightly integrates with a hardware device to protect passwords individually and in-memory.
I wrote a quick PoC using certificates to encrypt a password, with the cert private key 'stored' in the TPM, with a PIN. This is pretty easy on Windows, which exposes the TPM as a special crypto provider.
If you wanted to go a step further, you could use a smartcard with hardware PIN reader as a PKCS11 crypto device, and use that to decrypt the long lived keys in the store, then pass it back to the host encrypted by a platform-protected key to be decrypted and used.
If you could get the right implementation specifics together, you could likely then have the smart card simultaneously re-encrypt the credential with a key bound to PCR state of the TPM via a policy. You'd then decrypt that ciphertext on TPM without a PIN, but conditional on PCR state of a couple of PCRs that represent your system like the secure boot toggle state and allowed CAs.
That lets you be a bit more "cross device" than a fully TPM solution does, though your certificate technique works fine as long as you keep an offline backup for enrollment if anything changes on your system.
That's a fair point, although as the PIN is validated locally, you could argue from the server perspective you gain a second (knowledge) factor, but from a local perspective it's entirely correlated with the existing stored factor (a weakness in the local device implementation can skip that PIN check and yield the result).
Perhaps this is excessive, but it's a model where I like to see layers of security that depend on different, uncorrelated failures being required to bypass them.
Today if you want to get into an account using "FIDO2 as MFA" you need both the account credentials or ability to reach the Fido prompt (say password reset), and the hardware token device (with optional pin). The device alone being compromised shouldn't get you into the account.
For anything that is important enough, I put passkeys on 2 separate FIDO2 key devices directly. Services that come to mind are things with recovery backdoors; like email or device backups. Unfortunately many banks and financial institutions don't support passkeys, but I'd consider using that solution there too.
This is a very cool project, happy to see the costs of this stuff coming down a little bit.
When I was an intern 15 years ago I worked on a software library for this https://www.embeddedts.com/products/TS-IRIDIUM Board that does a similar thing (though you would need to stack on a cellular board if you wanted cell modems).
We used them to help Arizona Department of Transportation collect traffic data in remote locations.
We had big plans at that company to make a much smaller, much cheaper 9602 transceiver replacement, but the company got bought out before that could launch.
Python was first released in the early 90s. If you compare Python packaging to other languages of its time, its not so crazy. For comparison, C++ was released in '85.
If you use Poetry and a pyproject.toml, you can even make your package installable with something like pipx straight from Github. Its a trick I use often for little command line utilities.
Whatever wallet you use did need to have liquidity on the network that can reach our routing node, c=, but we worked hard to make sure we had plenty of liquidity to all major wallets. I definitely recommended cashapp without shame at the conference, but I did a lot of testing with other wallets too. I never had much trouble, even with non-custodial lightning wallets.