Is your feature request related to a problem? Please describe.
Currently, the only stupidly easily accessible backup option is just making a plain copy of the entire wallet.dat database. Comparing to mnemonic words, a piggy wallet.dat file is very much less portable: mnemonic words could be easily written down on paper/carved onto steel plate/assembled by alphanumeric tiles...etc. Furthermore, it could even be memorized into the user's own brain with little effort.
Even WIF privkeys are still much more portable than the piggy wallet.dat file - I think the phenomenon that, up till now, a number of users still have "fetish for one single precious WIF privkey" (and address/key reusing), should really have something to do with this - because WIF is still considered to be the "battlefield-tested, most straightforward/KISS-compliant, most widely compatible, most reliable, and most secure" option of backup by those users, I guess.
To be clear, I don't think such opinion is completely irrational - so far, there is no unanimously accepted/adopted mnemonic words specification. As a widely adopted proposal, BIP39, seemed to be strongly opposed by some devs in the past, so far it was even marked as "Unanimously Discourage for implementation". Therefore, it's reasonable for a user to feel anxious that his/her carefully preserved mnemonic words may suffer from the annoying "bit-rot" issue in the future.
Besides, the classical "screw-up-by-change-address" tragedy might still occassionally repeat in the future. This really seemed to have something to do with this issue - not only with the "fetish for one single precious WIF privkey" mentioned above, but also with the current primitive management of wallet.dat contents. (sorry, but I don't know better words) Bitcoin Core's GUI also lacks persistent backup warning, as far as I know, so that the user might carelessly ignore the fact that the HD seed may be already replaced with a newly generated, not-yet-backuped one.
Currently Bitcoin Core supports importing of various types of things, including privkeys, pubkeys, addresses. Multi-wallet(.dat) is also supported in newer versions. However, a wallet.dat could still gradually turn to a mess, as more and more messy things got imported.
Additionally, hardened address derivation makes the watch-only side of cold storage unable to derive addresses for receiving/change/watching.
Describe the solution you'd like
I really appreciate the BIP32/39/44/49/84 scheme adopted by Trezor. Although I don't think such scheme is ideal either, I think it should be the priority to deliver an usable solution to the users, rather than to wait for a nealy-ideal proposal to appear, let alone its implementation & delivery.
So far, IMHO, adopting BIP32/39/44/49/84 scheme seems to be the best choice for Bitcoin Core.
To address the "messy contents of wallet.dat" problem, I think something like #3314 is missing. The wallet should have flags/timestamps to distinguish among various types of its contents, including, but not limited to:
Observe-only/owned: the later may contain watch-only addresses for cold storage. Only the later would be counted as available balance, or be used to provide receiving addresses.
Compromised (or not): generally, paper wallets from other people should be considered compromised, since the former owner may still keep a copy of the privkey, therefore, imported (extended) privkeys/mnemonics should be marked as compromised by default, then this flag could be removed by cautious consent by the user, or sweeped into owned address(es) completely.
Backup required/Last backup at [time]: since it's a self-custody situation, it seems that no "silver bullet" is possible - it's always possible for the crucial data to be destroyed/leaked unexpectedly. Also, if two backup mechanisms (
wallet.dator text-based WIF/xprv/mnemonic) co-exist, it might confuse the user, too. In my opinion, the task of backup/recovery should mainly rely on text-based ways, rather than simply making a plain copy ofwallet.dat, since text is human-readable. There is also an issue like #1666.[READ-ONLY] This wallet.dat database was last saved at [time]: it might be better that an external
wallet.dat(typically a backup) could be loaded in read-only mode by default. In this mode, the "backup required" flag(s) mentioned above might be greyed, so that the confusion between two backup mechanisms could be relieved. If the user wants to sync the wallet, I think Bitcoin Core should create a writable copy for it, in the data directory.Derived/independently generated/imported, at [time]: the wallet should remember the origins of its contents.
Last exported at [time] for [purpose]: the reason why hardened address derivation is used by Bitcoin Core is that revealing extended pubkey together with a non extended child privkey would result in revealing the whole chain of keys. Besides the risk mentioned above, it's obvious that "one compromised, all compromised", while (extended) privkeys/mnemonics are imported into multiple wallets. Therefore, I think Bitcoin Core should educate/warn its users not to carelessly export private keys.
Default address derivation seed: currently,
sethdseed(by default) simply replaces the HD seed with a newly generated, not-yet-backuped one, as far as I know. With this flag, the old HD seed could still be retained, thus the origins of privkeys derived by it could still be clear. This should also be useful to the watch-only side of cold storage.
Once there's a classification mechanism, the wallet would then gain the ability to filter its contents, by these flags/properties.
Why BIP39/44/49/84?
First of all, as far as I know, Mastering Bitcoin has been introducing BIP32/39/44 scheme to its readers for many years.
There are also so many users who trust Bitcoin Core so deeply that they don't even bother to try any other wallet. Shouldn't these users be taken care of?
Bitcoin Core is also recognized as "the reference implementation", that's saying, what Bitcoin Core supported is highly hopeful to be supported by other projects as well, which really seems to be hopeful to relieve the current fragmented situation.
BTW, I actually googled "bikeshedding" for what it means - I learned that it means "technical disputes over minor, marginal issues conducted while more serious ones are being overlooked." Frankly speaking, I think the current fragmented situation of mnemonic seed specification really fits with this definition - sorry for my rudeness, but I would rather to be a rude egoistic d*ck, than just keep silent to watch more and more new recruits joining the army of "single WIF privkey fetishism".
It's said that BIP39 has very weak checksum, thus it might deviate into an insecure human-picked brainwallet scheme - then why couldn't Bitcoin Core itself always securely&randomly generate mnemonic seeds for its user? It could also warn the user about "don't pick your mnemonic words with your brain" while importing a BIP39 mnemonic.
It's said that BIP39 doesn't really have plausible deniability, and, it has a weak KDF - then at least Bitcoin Core could simply refuse to create passphrase while generating a new seed, and, it could also warn the user about the "inherent linkage" and "prone-to-crack" issues while importing a passphrase-enabled BIP39 mnemonic. (I'm still confused/unconvinced on this topic, to my understanding, it's impossible for BIP39 to generate addresses with any publicly observable linkage - was @gmaxwell talking about situations like DreadPirateRoberts being arrested? If so, I don't think this is very convincing either, because as long as ther user's computer got impounded, and the encrypted wallet got unlocked, the difference mentioned by Greg seems to be really litte, otherwise, almost anything found on a computer could be "plausibly deniable".)
It's said that BIP39 lacks a version number - to be honest, I don't think this should be considered as a "flaw", since a seed should be treated essentially as an universal "root" backup of everything, for example, a user can upgrade to SegWit anytime (s)he wants, without making a new backup.
Describe alternatives you've considered
What if a better proposal come into being? In my opinion, a standardized proposal is always the best proposal, far better than a mess of "improved proposals" which are incompatible with each other.
I don't think there's completely no hope that a better solution could be come up with, like, an invertible encoding that is able to express the BIP32 seed directly, so that any fancy mnemonic could be converted into it - however, in my view, BIP39 has already penetrated deeply into the public mind, that it's very unlikely to replace it.
Additionally, BIP39 has already made use of so many common words, that any potential successor of BIP39 is very likely to face the ambiguity problem.
In one word: I think it's far more important to make the users feel confident and safe, that their carefully preserved mnemonic words would still be usable in the future (without being "bit-rotten").