-
Notifications
You must be signed in to change notification settings - Fork 985
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[#8968] custom seed phrase popover #9005
Conversation
Pull Request Checklist
|
Jenkins BuildsClick to see older builds (22)
|
98% of end-end tests have passed
Failed tests (1)Click to expand
Passed tests (45)Click to expand |
@dmitryn please add accessibility-ids to "Continue" and "Cancel" buttons |
e9aa7b6
to
83e7628
Compare
@churik added |
@errorists please take a quick look, meanwhile I'll fix tests |
@dmitryn now due to this popup it is possible to create account with wrong amount of words. Steps:
Expected result: |
@dmitryn Please, take my commit when squashing |
@dmitryn use |
@yenda thanks for the tip, i'll use it |
8ceebe9
to
6f0c819
Compare
✔️ status-react/prs/linux/PR-9005#6 🔹 ~14 min 🔹 6f0c819 🔹 📦 linux package |
6f0c819
to
f8804dc
Compare
@churik bug fixed by disabling ability to proceed from keyboard unless you tap Next button. |
@errorists please review iPhone 6 Plus One Plus 7 Pro |
Looks good @yenda thanks! |
ok looks good to merge for me
|
@churik actually I just tested that so I'll merge |
Signed-off-by: yenda <eric@status.im>
f8804dc
to
18ce3b0
Compare
Why allow invalid BIP39? What's the specific use case of this? Is anyone aware of someone that would need that? Do you trust users they will use properly this feature? Auditors and other wallet providers will complain about this, because app gives option to user create an unsafe wallet. This PR is solving this analogous issue: MyEtherWallet/etherwallet#485 But not this one MyEtherWallet/etherwallet#551 (comment) @tayvano said:
e.g. App gets popular... web2 users: "So I can enter any seed phrase "paswordy thing"? this ones the app give me are too difficult, I will use here a custom seed phrase with something easier to remember..."; Later get's account mined by a low-entropy account bruteforcer. From what we learned of Parity seed phrase case is that we should never trust the user with optional security. Instead app should enforce security. And anyway, if someone gets hurt by this, even if is the user mistake, the ultimate fault is of the app that allowed it, and therefore the social bashing would be over the app, not the random affected user. cc @corpetty |
However the parity seed phrase problem had a worse checking. Status is looking for 12 words, which could be a 12 letter password separated by spaces in worst case, so perhaps the issue I mentioned above is less problematic, but we might see people loosing funds by entering famous phrases, e.g. songs lyrics, instead of real BIP39. This weak accounts are usually precalculated and keep being watched, so they are very quickly drained once one put values. Researchers were able to identity millions stolen this way, in both Bitcoin and Ethereum, and probably in any cryptocurrency where wallets allow users to make brain wallets. https://www.securityweek.com/most-bitcoin-brain-wallets-drained-attackers https://pdfs.semanticscholar.org/7e89/dabb8717006590b674bfb0ba45ce2bd0c131.pdf |
Thanks for jumping in here @3esmit. I've been a little out of the loop. Here a prior discussion on topic where you can find some of the reasoning: #8687 (comment) (this comment onwards) As you point out, the 12 word restriction makes it less problematic, however, it's actually 12, 15, 18, 21, 24 words. So the chance of randomly hitting one of those word counts is higher. Relevant last words summarizing that we do allow words that are not in our dictionary (also if they contain an typo as we won't know) In the decision to allow words not in our dictionary is the assumption that people now or in the future potentially have used a different dictionary than the one(s) used by Status. The underlying rationale here (which is obviously open to debate) is to mitigate risk rather than block the user. I have 3 questions to move forward:
1/ Personally I prefer exploring all mitigation options before deciding to block as this is an excellent opportunity to educate. We don't know what we don't know and people will never learn if we don't tell them or allow for low risk mistakes (maybe we give this type of custom account limited options, perhaps even chat & browsing options only). IMO the problem isn't necessarily that you can recover random seed phrases, the problem is what you can do next. 2/ I think you fairly point out that we don't inform users of the risk they're taking, mainly that they will never ever be able to recover this account. What are other risks? 3/ Also, I would agree that it's a little too easy to continue given the risks. We definitely don't want to encourage unsafe behavior! Maybe the explicit 'type CONTINUE' to recover this custom seed phrase is a more suitable pattern. Something only the brave will endure to continue. |
Since we are talking about multiaccount seed phrase validation (not wallet account), based on @3esmit solid arguments:
The only valid use case was testing by using an invalid seedphrase. Status is using the standard dictionary anyway, there is no other valid dictionary. The seedphrase point is to have maximal entropy while remaining human and typo friendly, not be pleasing and easy to remember (that would mean it is also easy to crack). Also as mentioned we should not only consider the words and their count but also the checksum, because repeating 12 times the same word is not a valid seedphrase either. |
Does other wallets support invalid BIP39, or how is called here, custom seed phrase? See this comment in the original issue: #8968 (comment) https://our.status.im/our-principles/ VIII. Inclusivity |
@hesterbruikman would you mind to create an issue? |
Thanks for the discussion @3esmit @yenda! Reflecting I don't see a convincing current use case to support 'invalid BIP39', but want to check some other wallets to be sure @churik before I create an issue to fix. I like the rephrasing of why should we block to why should we support invalid BIP39. From the 'blocking' persective I still stand by mitigation over blocking; but realistically, we don't have the time to do this well beyond a warning:) Other thoughts in response:
Agree that warnings are mostly ineffective, depending on their design. That said it's a mitigation, we can consider others like lowering the severity by limiting options.
Love this idea!
Loss off recovery phrase would only occur if people use the Recovery flow to create a new multiaccount. People are weird, but given the primary actions are on creating a new multiaccount I consider this a highly unlikely edge case. |
Don't allow custom seed phrases. Period. End of conversation. There is no such thing. That's called a brain wallets and we don't allow people to use those for obvious humans-cant-entropy-and-will-have-their-funds-stolen-and-they-will-blame-you-and-i-will-blame-you reasons. The BIP32/39/44 spec has a checksum (last word) as well a limitations by wordlist. Honestly, just use the library and call it a day. You're dangerously close to rolling your own crypto here and reducing interoperability is the one place this ecosystem has it. Pretty much literally everything else you do will have a million viable paths you can go down and decisions you will have to make. Standard bip support is not one of them. Okay so now that we've accepted that.....yes bip spec has issues. Yes plausible deniability is only a feature for fucking crazy crypto fucks, not users who are error prone. Yes advanced users, like you mr. developer, want X feature. No, it does not mean you should try to "improve" or mitigate bc you can't bc it would turn into xkcd standards comic. There are 1000 initiatives already to improve it and address some common issues. Work with them if you really want to.die on this hill. |
fixes #8968
Summary
Show "custom seed phrase" popover when recover with seed phrase containing words not from the dictionary.
Figma https://www.figma.com/file/dEIljL7UPbXgsZUA0Q4qlE5E/Onboarding?node-id=4311%3A0&viewport=1143%2C-2667%2C0.7808234691619873
status: ready