但是,压缩毕竟是比特币出来很久才提出的方案,压缩产生的公钥通过HASH得到的地址肯定和之前的不一样,那之前未压缩下比特币公钥下的比特币地址,就不能通过这种方式找到,为了解决这个问题,引入了“压缩格式的私钥”,实际上并不是压缩私钥,而是在私钥的前面加上前缀来标识来识别该私钥对应的公钥为压缩格式的,未加前缀的就默认非压缩格式,这样,比特币的拥有者(非其他人)就能找到自己在那个公钥下的比特币,而其他人的对该账户的转账却不受影响。
比特币钱包在最开始比特币的设计中,将比特币的钱包作为一个私钥集合,一次性地生成100个随机密钥,然后一笔交易用一个密钥,这样随着交易的增多,即不利于钱包的转移(将私钥转移)又难维护(私钥安全性),这是最开始的非确定性(非确定性指的是随机生成私钥)钱包。
现在是确定性钱包逐渐取代非确定性的钱包,这里的确定性指,通过一个确定的种子来生成一系列,无穷的私钥,确定性钱包如下图所示
左图中,密码学上安全的伪随机数发生器需要提供一个熵(这个熵是一串随机数字,这串随机数字越没规律越好,我的理解是可以用普通的随机函数来生成),助记码是为了记住根种子而使用的,只是将跟种子的数字映射为助记码,帮助人记忆而已,通过SHA-512这个HASH函数,512的二进制串,左边256bits对应的密钥生成的公钥,和256bits的编码,在右图的下一次生成私钥时,又作了输入,加索引号的额意义是,索引号有232 =40亿种选择,每一层都能有40亿种选择,我认为能将密钥生成看作无穷,生成私钥的具体缩略图如下。
书中提到了上面那种方式是不安全的,因为公钥是公开的,只要你的父链编码被人知道了,别人很容易地就能知道,那条父链编码下的所有子链,书中给出的改进方案是用私钥替代公钥生成私钥链,这种方式又叫做硬化子密钥,如下图
最后,文章提出一种使用确定性钱包的标准(但目前并非所有钱包app都使用该标准),标准没怎么看懂,但是并不影响之后的阅读,决定在深入之后再做详细分析