Introduction
keyvault
is a blockchain-based password manager. This is a UCG proposal (converted from dApp staking proposal)for 2M ASTR tokens.
keyvault
aims to let users actually own their passwords by removing the middleman (e.g. Google or 1Password) who can gate your access to whatever database your passwords live on.
Further, keyvault
intends to add a social recovery mechanism for users to recover their lost encryption key
for keyvault
(think master password). Although I say “encryption key,” this feature can be utilized by users to safeguard their wallet’s private key
or seed phrase
.
Mission
We want to make sure everyone has access to their own passwords without requiring a middleman to be honest in keeping their passwords safe and accessible.
You might think you do, but, when you use a password manager such as Chrome’s built-in password manager or something like 1Password, you are subjecting yourself to their mercy. If they decide that you’ve somehow, potentially done something they don’t like, your access can be put in jeopardy. Even if they properly encrypted your passwords and can’t read it, they can still delete your passwords or prevent you access. Or, maybe they’ll just decide one day that, for your continued access, you now must pay 10x as much. We depend on them to be honest and play nice.
To get rid of the middleman, keyvault wants to take advantage of the Astar blockchain as a storage for encrypted passwords, so that users don’t have to worry about their passwords being corrupted or their access blocked.
keyvault is currently minimally viable.
Some screenshots:
Screenshot of me copying my gmail password using keyvault
Creating random passwords with specified requirements
Team:
- Vincent Chan: cloud and blockchain developer, graduate of Polkadot Blockchain Academy (Berkeley, 2023).
I hope to use part of the grant to hire other developers to help speed up development.
keyvault architecture
There are 3 main components:
- smart contract
- browser extension (can only read from smart contract. responsible for encryption and decryption.)
- webapp (submits encrypted entries to the smart contract)
Please note that read and write capabilities are purposely separated between the browser extension and the webapp.
This is done because transactions only need to be made when adding/updating/deleting a password and is not needed otherwise.
data structure
The smart contract is there to store encrypted data for the user in an append-only format. The append-only format is required to prevent any leakage of information about what websites a user visits or what usernames a user uses. The format looks like the following in solidity.
struct EncryptedEntry {
string iv;
string ciphertext;
}
mapping(address => EncryptedEntry[]) private entries;
Social recovery mechanism
The idea is to make use of Shamir Secret Sharing
(SSS). See Youtube video for a 10 minute overview with visuals. Briefly, however, SSS is an algorithm for splitting a secret
into, say, 5 shares
such that any 2 of which can be used to reconstruct the secret.
So, if your encryption key is split into 5 shares and you distribute these 5 shares to your friends and family, then you can reach out to them to retrieve any 2 of those shares to recovery your encryption key.
What’s difficult is that your friends and family may well lose the share
you entrusted onto them for safeguarding. And, if enough of them loses track of their share
, you won’t be able to recover your encryption key. keyvault
therefore intends to add a management layer on top of the base password management layer to make it easy for your friends and family to keep track of those shares.
Security considerations
- [Encryption occurs off-chain] All passwords are encrypted off-chain. This way, since the user becomes the only person able to decrypt the passwords. Without the encryption key, the passwords cannot be decrypted by anyone.
- [Everything password-related on-chain is encrypted] This way, potential attackers can’t even find out what website or username an encrypted password is for. Since the websites we visit and the usernames we use may help would-be attackers figure out our real-world identity, we it’s important that no such information be available.
Past Performance & Milestones
- Won 3rd place in Encode’s Polkadot ink! hackathon
- Finished working MVP
Roadmap
The following timeline is something I feel is ambitious for me but doable.
1st month
- add security measures to communication between chrome extension (can only read) and webapp (can submit txs to smart contract)
- background: the chrome extension and webapp will at times need to communicate with each other and, while I don’t see how it’d benefit attackers, this task is to help prevent forged messages from being possible.
- set up RPC servers, so as to avoid congesting public RPC servers
- add autofill capability for destop browser
- update chrome extension so that user can choose their own RPC server (in case they want additional assurance of privacy)
- create extension for firefox and safari
- publish chrome extension on chrome marketplace
2nd month
- add social recovery capability (should largely be management layer on top of the password manager layer)
- add more user-friendly option of sharing encryption key between devices
- [stretch goal] add TOTP 2FA (think Authy or Google Authenticator)
- [stretch goal] add desktop app for 2FA
3rd month
- create mobile app for
keyvault
- [stretch goal] create mobile app for 2FA
Competitors
Competitors come in 2 main forms:
- those built into browsers – these are tied to your browser accounts. Your usage of them is limited to within the browser.
- non-blockchain-based password managers – these include 1Password and LastPass as well as open-source alternatives such as KeePassXC. The main issue with these have to do with availability and censorship resistibility. The commercial ones gate your access to your passwords behind API servers and databases they control. The open source ones tend to be free but you’d have to store your password database behind your dropbox account or something similar, which then means dropbox (or whatever you choose) becomes the weak point as far as availability and censorship resistance is concerned.
Links
- Keyvault’s dApp Staking proposal (prior being converted to this UCG proposal) - Keyvault - dApp Staking Proposal
- Website - https://blockchainkeyvault.com
- This is only meant to be informational. The webapp component that can submit transactions can be found at https://app.blockchainkeyvault.com and is designed to only be functional when the tab is opened from the chrome extension.
- GitHub - lousydropout/password-manager
- this contains both the smart contract and the frontend
- GitHub - lousydropout/password-manager-extension
- this contains the Chrome extension code