I have completely revised the wording of this proposal I hope to be clearer in explaining the motivation and methodology.
https://gist.github.com/ethankosakovsky/268c52f018b94bea29a6e809381c05d6 Ethan ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐ On Friday, March 20, 2020 4:44 PM, Ethan Kosakovsky via bitcoin-dev <bitcoin-dev@lists.linuxfoundation.org> wrote: > I would like to present a proposal for discussion and peer review. It aims to > solve the problem of "too many seeds and too many backups" due to the many > reasons stipulated in the proposal text. > > https://gist.githubusercontent.com/ethankosakovsky/f7d148f588d14e0bb4f70bb6afc509d0/raw/6da51e837b0e1f1b2b21f3d4cbc2c5a87969ffd5/bip-entropy-from-bip32.mediawiki > > <pre> > BIP: > Title: Deterministic Entropy From BIP32 Keychains > Author: Ethan Kosakovsky ethankosakov...@protonmail.com > Comments-Summary: No comments yet. > Comments-URI: > Status: Proposed > Type: Standards Track > Created: 2020-03-20 > License: BSD-2-Clause > OPL > </pre> > > ==Abstract== > > This proposal provides a way to derive entropy from a HD keychain path in > order to deterministically derive the initial entropy used to create keychain > mnemonics and seeds. > > ==Motivation== > > BIP32 uses some initial entropy as a seed to deterministically derive a BIP32 > root for hierarchical deterministic keychains. BIP39 introduced a method of > encoding initial entropy into a mnemonic phrase which is used as input to a > one way hash function in order to deterministically derive a BIP32 seed. The > motivation behind mnemonic phrases was to make it easier for humans to backup > and store offline. There are also other variations of this theme. > > The initial motivation of BIP32 was to make handling of large numbers of > private keys easier to manage and backup, since you only need one BIP32 seed > to cover all possible keys in the keychain. In practice however, due to > various wallet implementations and security models, the average user may be > faced with the need to handle an ever growing number of seeds/mnemonics. This > is due to incompatible wallet standards, hardware wallets (HWW), seed formats > and standards, as well as, the need to used a mix of hot and cold wallets > depending on the application and environment. > > Examples would span wallets on mobile phones, online servers running > protocols like Join Market or Lightning, and the difference between Electrum > and BIP39 mnemonic seed formats. The reference implementation of Bitcoin Core > uses BIP32, while other cryptocurrencies like Monero use different mnemonic > encoding schemes. > > We must also consider the different variety of physical backups including > paper, metal and other physical storage devices, as well as the potentially > splitting backups across different geographical locations. This complexity > may result in less care being taken with subsequently generated seeds for new > wallets need to be stored and it ultimately results in less security. In > reality, the idea of having "one seed for all" has proven to be more > difficult in practice than originally thought. > > Since all these derivation schemes are deterministic based on some initial > entropy, this proposal aims to solve the above problems by detailing a way to > deterministically derive the initial entropy used for new root keychains > using a single BIP32 style "master root key". This will allow one root key or > mnemonic to derive any variety of different root keychains in whatever format > is required (like BIP32 and BIP39 etc). > > ==Specification== > > Input starts with a BIP32 seed. Derivation scheme uses the format > `m/83696968'/type'/index'` where `type` is the final seed type, and `index` > in the key index of the hardened child private key. > > type > > bits > > output > > 0 > > 128 > > 12 word BIP39 mnemonic > > 1 > > 256 > > 24 word BIP39 mnemonic > > 2 > > 128 > > 12 word Electrum mnemonic > > 3 > > 256 > > 24 word Electrum mnemonic > > 4 > > 256 > > WIF for Bitcoin Core > > 5 > > 256 > > 25 word Monero mnemonic > > Entropy is calculated from the HMAC-SHA512(key=k, > msg='bip-entropy-from-bip32') of the derived 32 byte private key (k). Entropy > is taken from the result according to the number of bits required. This > entropy can then be used as input to derive a mnemonic, wallet etc according > to the`type` specified. > > ==Compatibility== > > In order to maintain the widest compatibility, the input to this function is > a BIP32 seed, which may or may not have been derived from a BIP39 like > mnemonic scheme. This maintains the original motivation that one backup can > store any and all child derivation schemes depending on the user's preference > or hardware signing devices. For example, devices that store the HD seed as a > BIP39 mnemonic, Electrum seed, or BIP32 root key would all be able to > implement this standard. > > ==Discussion== > > This proposal could be split into multiple discrete BIPs in the same way that > BIP32 described the derivation mechanics, BIP39 the input encoding with > mnemonics, and the derivation paths like BIP44, BIP49 and BIP84. This has > been avoided to reduce complexity. The resulting private key processed with > HMAC-SHA512 and truncated as necessary. HMAC-SHA512 was chosen because it may > have better compatibility in embedded devices as it's already required in > devices supporting BIP32. > > ==Test Vectors== > > ===Test case 1=== > > MASTER BIP39 SEED INPUT: angle fabric town envelope music diet bind employ > giant era attitude exit final oval one finger decorate pair useless super > method float toddler dance > MASTER BIP32 ROOT KEY: > xprv9s21ZrQH143K2xNoceSiUtx8Wb8Fcrk9FUfzD3MLT4eFx5NbBuof9Mwrf7CCbfGJNehNRHvrXnWvy9FtWVaeNggsSKT57GNk7jpk1PRzZDp > PATH: m/83696968'/0'/0' > BITS REQUIRED: 128 > > DERIVED CHILD WIF=L3cefeCHyo8jczVjckMxaiPBaPUunc3D8CsjRxYbYp3FhasGpsV3 > DERIVED CHILD > k=bed343b04ba0216d9eeebff0366b61c4179d90d44b61c716ef6d568836ba4d23 > CHILD ENTROPY=6458698fae3578b48a64124ea3514e12 > CONVERT ENTROPY TO WIF=KwDiBf89QgGbjEhKnhXJuH7T2Vv72UKQA8KRkmNwVFS2znAS5xb9 > CHILD BIP39 MNEMONIC=gold select glue fragile fiscal fog civil liquid > exchange box fatal caught > CHILD BIP39 > SEED=2a2720e5590d4ec3140e51ba1b0b0a5183222c1668977c8a57572b0ea55d238cd8e899b3b1870e48894ca837e41e5d0db07554715efb21556fdde27f9f7ba153 > CHILD BIP32 ROOT > KEY=xprv9s21ZrQH143K2ZH5qacptquLGvcYpHSNeyFVCU8Ur4u9kocajbBgcaCbHkGbwDsBR661H29F54j5mz14kwXbY9PZKdNRdjgRcGfshBK9XXb > > ===Test case 2=== > > MASTER BIP39 SEED INPUT: angle fabric town envelope music diet bind employ > giant era attitude exit final oval one finger decorate pair useless super > method float toddler dance > MASTER BIP32 ROOT KEY: > xprv9s21ZrQH143K2xNoceSiUtx8Wb8Fcrk9FUfzD3MLT4eFx5NbBuof9Mwrf7CCbfGJNehNRHvrXnWvy9FtWVaeNggsSKT57GNk7jpk1PRzZDp > PATH: m/83696968'/1'/0' > BITS REQUIRED: 256 > > DERIVED CHILD WIF=L1zCbtnDWUN4vJA3De4sxmJnoRim57CQUuBb4KBoRNs2EMEq2Brg > DERIVED CHILD > k=8e3ca6054a6303f4a6a1bcbda6134c9802f4f0a0d76b0ee6b69b06b1e80b2192 > CHILD ENTROPY=ec4e2f7e2c3fca9a34fa29747bf8ba0ab7f05136f37e134e2457e9e53639670b > CONVERT ENTROPY TO WIF=L594JSCygt2wBaB9mCpXjiLkkxkEojpBdNXG8UrrdLd2LvPBRMUs > CHILD BIP39 MNEMONIC=unable imitate test flash witness escape stadium early > inner thank company betray lecture chuckle swift hurt battle illness bicycle > stable fat bronze order high > CHILD BIP39 > SEED=73509b0e847ee66bddeb098a55063d73e8c6dd5f1c1db6969c668bb54c19bde6eae8acc29a81118d1d9719fa1bc620fee7edd7c15a17bcaf70b0fdfc0c0c3803 > CHILD BIP32 ROOT > KEY=xprv9s21ZrQH143K4PfLyyjYLVmKbnUTNFK6Y7jPKWfRZB3iSw1Gy9qowEzkYHfetVabfmjHEEPrcTJbh7chae33Sm9uAjuXzhSL6Li8dcwM9Bm > > ===Test case 3=== > > MASTER BIP39 SEED INPUT: angle fabric town envelope music diet bind employ > giant era attitude exit final oval one finger decorate pair useless super > method float toddler dance > MASTER BIP32 ROOT KEY: > xprv9s21ZrQH143K2xNoceSiUtx8Wb8Fcrk9FUfzD3MLT4eFx5NbBuof9Mwrf7CCbfGJNehNRHvrXnWvy9FtWVaeNggsSKT57GNk7jpk1PRzZDp > PATH: m/83696968'/4'/0' > BITS REQUIRED: 256 > > DERIVED CHILD WIF=KwdD5PYnCU3xQDfFJ6XBf6UDaLrTUxrKmBpdjRuuavWyqAQtpaA2 > DERIVED CHILD > k=0c169ce2c17bea08512a7519769e365242a1562bd63c4c903daef516000efbf2 > CHILD ENTROPY=25573247f8a76799f7abc086b9286b5a7ccb03cb8d3550f48ac1e71d90832974 > CONVERT ENTROPY TO WIF=KxUJ8VzMk7uWDEcwYjLRzRMGE6sSpwCfQxkE9GEwAvXhFSDNba9G > CHILD BIP39 MNEMONIC=census ridge music vanish island smooth team job mammal > sing bracket reject smile limit comfort pluck extend picture race soda suit > dose place obtain > CHILD BIP39 > SEED=4e5c82be6455ecf0884d9475435e29a9afb9acf70b07296d7e5039c866e4d54647706918b9d14909dfbd7071a4b7aee8a4ad0ac2bf48f0a09a8899dd28564418 > CHILD BIP32 ROOT > KEY=xprv9s21ZrQH143K2kekJsK9V6t4ZKwHkY1Q3umxuaAhdZKGxCMpHiddLdYUQBoynszpwnk5upoC788LiT5MZ5q1vUABXG7AMyZK5UjD9iyL7Am > > ==References== > > BIP32, BIP39 > > ==Copyright== > > This BIP is dual-licensed under the Open Publication License and BSD 2-clause > license. > > bitcoin-dev mailing list > bitcoin-dev@lists.linuxfoundation.org > https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev _______________________________________________ bitcoin-dev mailing list bitcoin-dev@lists.linuxfoundation.org https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev