MetaMask / MetaMask/metamask-extension

Add plausible deniability to vaults

Open
#5,872 0 comments 0 reactions 0 assignees View on GitHub
external-contributor INVALID-ISSUE-TEMPLATE T08-featureRequest type-security
Dominant language
TypeScript
Stars
13.2k
Forks
5.6k
Avg merge
2d 5h
Merged PRs (30d)
451

Description

**What problem are you trying to solve?**

Someone walks up to you and forces you to log in to MM. "I forgot the password" doesn't quite make it.

**Describe the solution you'd like**

Have an option in the vault to set up a secondary vault, tied to the primary one. This requires you to define a password to the secondary vault, one which is different from the primary vault's password. Upon logging in with the secondary password, the secondary vault will open, which will be indistinguishable in function from the primary one and enjoys the same permanence and customizability as the primary one, but will have different addresses and potentially different external accounts and token additions.

This is just an idea and raises many hard questions to which I don't know the answers. Here's an unstructured stream of the problems.

* To implement something like this, we may need fancier crypto.
* We need to redefine the structure of how vaults are stored.
* We may need/want to convert vaults with the old structure to the new one if something like this becomes implemented. How do we do that safely?
* We need to make sure that vaults with and vaults without a secondary vault are indistinguishable from the outside.
* We need to make sure that primary and secondary vaults are indistinguishable from the inside.
* Should the secondary be derived deterministically from the primary, deterministically from the new password, or just purely randomly?
* How do you check that the two passwords are not the same?
* Once you're logged into the primary, should you be able to detect that there's a secondary? If yes, should you be able to modify it from there?
* What should happen if you already have a secondary, but you define a new secondary?
* What should happen if we define a secondary while logged into the secondary?
* If we allow a recursive chain of subvaults or multiple secondary vaults (may be desirable), how do we ensure indistinguishability from the outside?
* Many other questions I haven't thought of.

Contributor guide

Open the contributing guide

Research direction

No files, tests, or entry points are named. Begin by mapping the existing vault storage and cryptographic design, then resolve the listed questions about derivation, migration, password handling, and indistinguishability; done requires a defined design and implementation plan for secondary vault behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
security
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
15/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.