Please describe your proposed solution.
Big idea
I want to make self-custody of private keys for cryptocurrencies and digital identities easier by making physical security of seed phrase backups easier. Users encrypt their backups using hardware-backed keys on three or more low-cost hardware security modules (for now: Yubikeys), then use multiple encryption (think Russian nested dolls…) to ensure only certain combinations can recover the original seed phrase. Proposed combinations:
- Any one Yubikey + passphrase
- All Yubikeys + no passphrase (passphrase recovery)
- (Future) Any one Yubikey + no passphrase (forgotten) + 2 of 3 centralized recovery services verifying your identity*
- (Future) No Yubikeys (all lost) + Passphrase + 2 of 3 centralized recovery services (in separate legal jurisdictions) verifying your identity*
- (Future) No Yubikeys (all lost) + No Passphrase (forgotten) + 3 of 5 centralized recovery services (in separate legal jurisdictions) verifying your identity*
By encrypting the seed phrase with keys held on Yubikeys, it reduces the amount of physical security required to secure seed phrases. For example, you could have a family member hold a copy for you without worrying that they could recover your seed phrase.
* The combinations are highly adaptable. The centralized recovery options are not required, but I think there's a path to making that work with a reasonably low risk to self-sovereignty (for many people's needs, at least.) and also in a way that protects users from themselves (even if they lose one or more Yubikeys.)
The MVP is a mobile app, but long-term (not part of this initial proposal) I want to run this on secure hardware, possibly on a new generation of hardware wallets (made by us, or others, as an open standard.)
What I've built so far
This idea hinges on giving users low-cost hardware security modules. To make the MVP easier, I'm starting by using the Yubikey 5 series' support for the OpenPGP card standard. This means I don't need to build new hardware.
I've built the backend code to communicate with Yubikeys over NFC and talk to the OpenPGP card application. I can configure the Yubikey, generate keys (X25519 keys generated in hardware, unable to be exported), and use the public key to encrypt data only the Yubikey can decrypt. I can also decrypt the data with the Yubikey. To encrypt, I'm using libsodium, X25519, and XChaCha20-Poly1305-IETF.
This was the largest technical hurdle to clear. It works end-to-end: I can communicate with Yubikeys, I can communicate with the Yubikey OpenPGP application, I can encrypt data, then decrypt it with keys held in Yubikey hardware. Next, I can add support for multiple Yubikeys, then build out the rest of the app according to the prototype: <https://wipcrypto.com/catalyst/prototype-mobile>.
Where you can find and play with it to verify
For the latest dev build and instructions on how to test, please see <https://wipcrypto.com/catalyst/links>.
What I intend to do as a result of this proposal
I'll be building an MVP capable of backing up seed phrases, encrypted with keys held on 3 (or more) Yubikeys. The initial designs can be seen in the Figma prototype here: <https://wipcrypto.com/catalyst/prototype-mobile>.
In-depth
Sometimes I think about a world where crypto wins. Where all value is tokenized on blockchains. What if my mom (not tech savvy) needed to secure her entire retirement savings? Would she be able to securely handle her seed phrase, when no one could help her if she lost it? What if someone broke in to her house and took her seed phrase? What if her house burned down? What if war erupted and she had to flee her home at a moment's notice, never to return (e.g. Ukraine, Gaza, etc.)? At such a difficult time, would she also lose access to communication apps and social media accounts attached to her digital identities/DIDs? The result would likely be permanent loss, with no recourse.
At global scale, all of these events happen every day. Without solving for them, self-sovereign key management (and decentralized identity) is incomplete and–in my opinion–unlikely to succeed.
While some of these are preventable with steel/titanium backup plates, this is highly technical and still requires the user to properly conceal their backups.
I strongly believe the lack of simpler and safer key management schemes will prevent mass adoption of crypto and decentralized identity. Solved well, it will enable them.
This project aims to:
- Make it safe to replicate seed phrases online by encrypting them with 256-bit keys containing their full entropy; as opposed to the reduced entropy of password-based key derivation.
- Solve the loss and disclosure of those keys by storing them on secure hardware and giving the user multiple copies that they can distribute among multiple physical locations.
- Solve extreme edge cases (displacement due to war, etc.) by creating a system that's configurable enough to support (some day, not part of this proposal) centralized recovery, social recovery, and inheritance planning, while keeping a high degree of self-sovereignty.
There is much renewed interest in this space recently, with varying degrees of self-sovereignty built into their designs. This proposal intends to build a solution that is maximally self-sovereign and useful in a multi-chain world, with no need to trust anyone, even family/friends/neighbors/banks/etc. who might physically store one of your Yubikeys for you.
By funding this proposal, the Catalyst project can help get this fledgling idea to market, potentially enabling self-sovereign key management for millions of users in the future.