Social Recovery for MetaMask wallets using "Snaps", sandboxed JS plugins for MetaMask.
Watch the demo on YouTube:
- The Snap code runs in a sandboxed environment inside the MetaMask extension
- The Snap code has access to private keys, but no internet access -- it doesn't request that permission
- The Snap never exposes a sensitive private key to the Dapp (browser environment) unless it's encrypted
- The Snap code is installed from NPM and can be audited at all times
- I have only a rudimentary cryptography training
- I built this alone, working late at night
- Nobody reviewed nor audited this code
- MetaMask Snaps are still a new feature in development
- Connect to MetaMask
- Accept the permission to manage your Ethereum private keys
- Go to your profile and copy your Snappy Recovery public key, save it somewhere. It's public data, harmless to save it in the clear.
- Find 5 friends with whom to split a secret backup key, send them to Snappy Recovery, and ask them for their Snappy Recovery public key (they have to login and go to their profile)
- Enter the 5 public keys in the "Setup Recovery" section, and press "Setup"
- The Snappy Recovery Snap, working fully inside MetaMask's sandboxed environment, will:
- Grab your parent Ethereum node, used to generate all your accounts
- Create a brand new backup AES encryption key
- Use this backup key to symmetrically encrypt your Ethereum node
- Split the backup key using a 3-of-5 Shamir secret sharing scheme
- Encrypt each backup key part using one of your friends' public keys
- Return the encrypted Ethereum key + the 5 encrypted shards to this Dapp. This means that at no point will the Dapp be able to "see" your master Ethereum private key in the clear
- Your encrypted Ethereum key + the 5 encrypted shards will be stored on Gun, a distributed peer-to-peer database
- All you have to do is save your Snappy Recovery public key ("View your public key" at the top) somewhere like your email or cloud storage
- Reinstall MetaMask
- Go to Snappy Recovery and connect metamask, installing the Snap
- Press "I lost my private key!"
- Enter your Snappy Recovery public key that you copied back when you had access to your wallet
- Press "Get recovery URL"
- You'll get a URL, share it with at least three of your five friends
- The recovery page will self-update as your friends follow the procedure on their side -- they just have to click a button
- Once 3 of your friends have fulfilled their responsibility, press "Recover my ETH!"
- After a few seconds, you'll see your old accounts appear, with their balances and transaction count
- To recover an account:
- Press "Show private key" next to the address
- Go to MetaMask's menu and choose "Import Account"
- Paste your private key to import your account
- Send your funds to a non-imported account from your current wallet