Bip draft: Bitcoin Encrypted Backup
This is a bip for encrypted backup, an encryption scheme for bitcoin wallet related metadata.
Mailing list post: https://groups.google.com/g/bitcoindev/c/5NgJbpVDgEc
thanks for the review! will address comments tmr!
Open questions
- Deterministic nonce: Currently the nonce is generated randomly. Is it safe to produce a deterministic nonce, e.g.
hash("NONCE" || plaintext || key_1 || … || key_n), or are there known security concerns with this approach?
In general nonce reuse is unsafe because if you make multiple backups over time, e.g. as you add more transaction labels, you would be reusing the nonce with different message. By including the plaintext in the nonce, you do address that concern.
However it still seems unwise to mess with cryptographic standards. It doesn't seem worth the risk for saving 32 bytes on something that's going to be at least a few hundred bytes for a typical multisig.
Concept ACK, seems adjacent to how some lightning tools enable users to recover SCB's with just their seed to identify and decrypt the backup. Makes sense for descriptors to have something similar.
Concept ACK
(not yet finish addressing comments)
Hi @pythcoiner,
By coincidence, two weeks ago I started working on a proposal for a "Standard Encrypted Wallet Payload" to be placed inside an "Encrypted Envelope". The "Wallet Payload" contains descriptors and metadata but can also act as a full wallet backup including transactions, UTXOs and addresses. The proposal is very much a work in progress.
I only just found this discussion so am reading through it to compare it to my proposal. The descriptor backup in the "Wallet Payload" of my proposal seems to have some overlap with the BIP proposed here. If there is too much overlap I may reconsider progressing with my proposal.
As mentioned, my proposal is very much a work in progress but the wallet payload proposal can be found here:
https://gist.github.com/KeysSoze/7109a7f0455897b1930f851bde6337e3
Maybe jump to the test vector section to see what a basic backup of a descriptor and some meta data would look like prior to encryption.
https://gist.github.com/KeysSoze/7109a7f0455897b1930f851bde6337e3#test-vectors
As my proposal is designed to be modular and extensible the encryption envelopes may be extended to offer Multiparty Encryption and Authentication. See:
https://gist.github.com/KeysSoze/7109a7f0455897b1930f851bde6337e3#user-content-Expanding_the_Security_Model
I have already started documenting an encryption envelope that uses AES-256-GCM and password protection:
https://gist.github.com/KeysSoze/866d009ccd082edf6802df240154b20d
I have not written a reference implementation yet but there are well established python and Rust libraries for CBOR and COSE that should make implementing the BIPs relatively simple.
Hi @pythcoiner,
By coincidence, two weeks ago I started working on a proposal for a "Standard Encrypted Wallet Payload" to be placed inside an "Encrypted Envelope". The "Wallet Payload" contains descriptors and metadata but can also act as a full wallet backup including transactions, UTXOs and addresses. The proposal is very much a work in progress.
Hi @KeysSoze, this work seems more related/parallel to the wallet_backup specs I've work on few month ago.
But I've adopted a slightly different approach by simply using JSON.
FYI we already implemented this wallet backup format in Liana wallet and I plan to work on a BIP proposal relatively soon.