It is possible for a custom implementation use hardened keys for all the leaf keys to enhance security in case of a single private key leak. This scheme will be incompatible with the standard compliant wallets.
The BIP32 and BIP44 standards, use hardened keys up until the "account" level:
m/44'/0'/account'
but use non-hardened keys for the receive (a.k.a. external) and change (a.k.a. internal) addresses.
This is done to isolate the accounts and allow some flexibility:
- Use watch-only wallets by sharing the hardened xpub of the account.
- Derive new receive addresses without the need of the account private key (vs hardened derivation where the parent private key is required). This is a hassle because the account xpriv is usually encrypted and you need the user password every time.
- Store a single secret (the hardened xpriv) per account. Every time a transaction needs to be signed the correct child private key is derived on demand.
The security model of the BIP32/BIP44 is to use only one private key per account. The revealing of a non-hardened child private key equals to revealing of the account private key. If sharing of private keys is a requirement, it is preferable to create a new account and share the xpriv vs the non-hardened child private key of an existing account.
1Why isn't the change level of the BIP44 tree a hardened key? It only permits the stealing of the change addresses if an index key is revealed, I guess, but still why not? – morsecoder – 2015-06-07T12:39:24.993
1@StephenM347 For the use-case of using an xpub to generate new receive addresses, I agree it would make sense to harden the change level. However I suspect the use-case of using an xpub to monitor the balance of an account is also very popular, and would require either a non-hardened change level, or the export of two xpubs which isn't very user-friendly nor easy to explain to newbies IMO. – Christopher Gurnee – 2015-06-07T14:02:48.430