Author

Topic: [SOLVED] What is the difference between an HD wallet and a Descriptor Wallet (Read 134 times)

staff
Activity: 3458
Merit: 6793
Just writing some code
While they also generate different child public and private keys using the output descriptor, you cannot export a single child private key.
while descriptor wallets prioritize security by not allowing the export of individual keys.
No, that's completely unrelated to descriptors, I don't know why the both of you latched onto that at all,

If Bitcoin Core had switched directly to BIP 44 style derivation paths without doing descriptors, I would have also advocated for disallowing the export of individual private keys. The security issue there is with how BIP 32 unhardened derivation works which existed long before descriptors were a thing.



A HD wallet is a wallet where the keys are derived in a reproducible way from a single source of randomness known as the seed. The most widely used method for deriving such keys is BIP 32. Since the seed is fairly small, it's easy to back that up and be sure that, in theory, you are able to re-compute all of your private keys in the future.

However, HD wallets make no mention of the type of addresses to create, nor do they specifically state which private keys you are actually using. These change on a wallet by wallet basis. While most wallets follow various standards for choosing which keys to derive and what address types to make from them, just having the seed and knowing that your wallet is a HD wallet is not enough to recover your funds.

Descriptor wallets expand on HD wallets by storing Descriptor strings which specify the keys and the address types to create. Descriptors utilize BIP 32 so that BIP 32 keys and derivation paths can be contained within them to specify the specific keys to use without actually enumerating all of the keys. Descriptors further introduced the script expression notation in order to specify the type of script, and ultimately the type of address, that a descriptor can create. Thus a descriptor is a more complete backup and leaves nothing up to guess work as it specifies both the exact keys to use, and the addresses to create from them.

Descriptors is intended to be a more general notation, so it is also possible to create descriptors which contain just private keys with no BIP 32 derivation at all. They can also be used to represent raw output scripts for cases where the script is nonstandard, and they can be used to create complex arbitrary scripts through the use of the MIniscript language.

Since Descriptor wallets can include BIP 32 derivation, descriptor wallets are basically a kind of HD wallet. But really, they are a superset of HD wallets since they do a lot more than just managing private keys.



A way to think about how these are different is the philosophy that they essentially represent. A HD wallet represents a keys first philosophy where the key is the king. Everything comes from the key - the key exists first, then the script is created from that key.

Conversely, Descriptor wallets represent a scripts first philosophy where keys are inserted afterwards. Descriptors describe a script template in which keys are later computed and inserted into the positions in the script as described by the descriptor. For descriptors, how the key is generated is not that important; they could be randomly generated and put in the descriptor string, or they can be generated from a BIP 32 key and derivation path. All that is required is that the key expressions produce individual keys that can be placed into scripts.
member
Activity: 182
Merit: 14
My suspicion is they are two different ways of expressing the same concept but I struggle to find confirmation to it.

I found this definition on the web from https://river.com/learn/terms/h/hd-wallet/
Which IMO is a comprehensive explanation.
I also found this definition of the Descriptor Wallet from : https://achow101.com/2020/10/0.21-wallets#:~:text=Descriptor%20Wallets%20store%20Output%20Script,private%20keys%20to%20generate%20addresses.
Which is a bit too advanced for my modest brain size  Smiley

Can anylone pls post a simple description of the difference between those two concepts ?
Thanks
In short, HD wallets let you easily manage multiple wallets with one main key, while descriptor wallets prioritize security by not allowing the export of individual keys.
sr. member
Activity: 336
Merit: 365
The Alliance Of Bitcointalk Translators - ENG>PID
My suspicion is they are two different ways of expressing the same concept but I struggle to find confirmation to it.
These two types of wallets, mate, are not the same. They both offer new ways to manage Bitcoin compared to the original or legacy wallet, which was the first type of Bitcoin wallet. The HD (Hierarchical Deterministic) wallet, in particular, is now the standard format for creating wallets. A descriptor wallet, on the other hand, refers to a method of generating various wallets using scripts outlined in BIPs 380-386.

Here's one difference I can think of:
In an HD wallet, different child public and private keys are generated from the same parent keys. This allows your wallet to create multiple wallets controlled by a single key or seed. You can easily access a specific child wallet by using its corresponding private key.

However, this isn't the case for descriptor wallets. While they also generate different child public and private keys using the output descriptor, you cannot export a single child private key.
Here's why
With descriptor wallets, you cannot export the private key for one address. This is because a child private key combined with the parent public key can be used to compute the parent private key (and hence all other child private keys). This is a risk inherent in BIP 32's unhardened derivation. As such, descriptor wallets disallow the export of child private keys in order to mitigate the risk of accidentally exposing the parent private key


jr. member
Activity: 49
Merit: 20
My suspicion is they are two different ways of expressing the same concept but I struggle to find confirmation to it.

I found this definition on the web from https://river.com/learn/terms/h/hd-wallet/
Which IMO is a comprehensive explanation.
I also found this definition of the Descriptor Wallet from : https://achow101.com/2020/10/0.21-wallets#:~:text=Descriptor%20Wallets%20store%20Output%20Script,private%20keys%20to%20generate%20addresses.
Which is a bit too advanced for my modest brain size  Smiley

Can anylone pls post a simple description of the difference between those two concepts ?
Thanks
Jump to: