There's a long discussion about using BIP32 (the Bitcoin HD wallet KDF) and BIP44 (the KDF path standard) for Ethereum.html
It was raised that perhaps a different scheme could be useful.node
A mnemonic (i.e. a list of memorable words) is generated (see BIP39)linux
This mnemonic is converted to a seed using PBKDF2 (see BIP39)git
The seed is used to generate root private key using SHA512-HMAC (see BIP32)github
From this root key, sub keys are derived (see BIP32), where the node layout is set by BIP44ide
What makes BIP32 useful:ui
Where BIP32 may be lacking:this
Requirements:idea
be compatible with the Bitcoin scheme as much as possiblespa
use native Ethereum methods where possible
support per-contract (token) layouts
should it support the ability for outsiders to derive public keys?
should have a deterministic way to solve the node skipping issue (where a path would result in an invalid private key)
should it have a way for node discovery? (see BIP44)
<network hash>/general/<n>
<network hash>/contract/<contract addr>/<n>
<network hash>/token/<contract addr>/<n>
Where <n>
is a counter starting from 0.
It should share the same seed as output by BIP39. This means the same seed can be shared by BIP32 and this scheme.
A given private key can be calculated via: privKey = sha3(rlp([seed, [path array]]))
This doesn't satisfy points 4), 5) and 6) of the requirements.
A possible solution for 5) is to have a nonce to increment as the last parameter of the RLP if an invalid node is derived.
A possible solution for 4) is to move the nonce outside the RLP and use it via the public key derivation used in BIP32.
Store the derived paths in a text format (maybe JSON?) and encrypt it with a specific node
Store the encrypted list in IPFS/Swarm
Have a "namereg" to map the IPFS/Swarm address to an address of another specific node