想象一下这样的场景:在电商网站上,我们需要为每一个用户提供一个比特币的收款地址。如果使用传统的方法,我们需要通过私钥来产生公钥和地址,这使得我们不得不在服务器上部署私钥。但是世界上没有不透风的墙,任何人都不能保证绝对的安全,这么做简直和公开自己银行账户、密码无异。

  当然,我们可以在安全的离线环境大批量的生成地址,然后导入到服务器的地址池中。这是个改善方案,但是不管你怎么设置地址池的大小,地址总归会有用完的一天,反复多次的生成、导入地址既不方便也不安全。

  我们需要一个能够完全隔离公钥私钥,又能不断生成新的公钥与地址的方案。

  使用分层确定密钥,我们可以通过 Kpar (父扩展公钥),cpar(父码链)加上子密钥索引号生成 Ki (子扩展公钥)和ci(子码链)。自此,我们可以不用在服务器上部署私钥来生成公钥了。这非常便于我们在不安全的环境下使用。

  但是需要特别注意的是,如果知道了父扩展公钥和父扩展密钥衍生的任何非强化扩展私钥,就相当于知道了父扩展私钥,因而会泄露父扩展密钥衍生的所有扩展私钥。所以为了安全起见,从主密钥衍生扩展密钥的第一层开始就应该使用强化扩展密钥。

  那么,什么是强化扩展密钥呢?每个扩展密钥能衍生出 2^31 个普通扩展密钥,2^31个强化扩展密钥。这些衍生出来的扩展密钥都有一个索引。 普通扩展密钥使用索引 0 到 2^31-1;强化扩展密钥使用索引 2^31 到 2^32-1

  请记住,在不安全的环境中一定要使用强化扩展公钥来生成子扩展公钥。