比特币地址、钱包

转载链接:https://www.jianshu.com/p/225ff9439132

1私钥保护

私钥必须保密。私钥的机密性需求事实情况是,在实践中相当难以实现,因为该需求与同样重要的安全对象可用性相互矛盾。当你需要为了避免私钥丢失而存储备份时,会发现维护私钥私密性是一件相当困难的事情。通过密码加密内有私钥的钱包可能要安全一点,但那个钱包也需要备份。有时,例如用户因为要升级或重装钱包软件,而需要把**从一个钱包转移到另一个。私钥备份也可能需要存储在纸张上(参见“4.5.4 纸钱包”一节)或者外部存储介质里,比如U盘。但如果一旦备份文件失窃或丢失呢?这些矛盾的安全目标推进了便携、方便、可以被众多不同钱包和比特币客户端理解的加密私钥标准BIP0038的出台。

BIP0038提出了一个通用标准,使用一个口令加密私钥并使用Base58Check对加密的私钥进行编码,这样加密的私钥就可以安全地保存在备份介质里,安全地在钱包间传输,保持**在任何可能被暴露情况下的安全性。这个加密标准使用了AES,这个标准由NIST建立,并广泛应用于商业和军事应用的数据加密。

2公钥与地址

我们知道比特币协议的区块链实际上是对交易的维护而不是对账户的维护,交易数据本身并不需要私钥,因此对公钥的封装也就是地址就显得格外重要,需要兼顾安全,效率和扩展。

从公钥到地址经历了如下过程:

比特币地址、钱包

A = RIPEMD160(SHA256(K))

公式中,K是公钥,A是生成的比特币地址。比特币地址与公钥不同。比特币地址是由公钥经过单向的哈希函数生成的

以公钥 K 为输入,计算其SHA256哈希值,并以此结果计算RIPEMD160 哈希值,得到一个长度为160比特(20字节)的数字后进行Base58Check编码即可得到比特币地址。从编码数据结构的视角看,是下图:

需要注意的是,从地址已经无法反推公钥信息,因此,需要将私钥以及对应的公钥、地址一起存储。

3比特币钱包

比特币钱包要解决的核心问题是私钥管理,早期的方式是随机生成私钥池并一次一密,这当然是安全性很高的方案。但是对存储,导入导出备份带来了极大的挑战,毕竟私钥丢了谁也没有办法。改进的私钥管理办法将私钥链式管理起来了,见下图:

比特币地址、钱包

生成链式结构的过程如下: