区块链应用开发指南:业务场景剖析与实战
上QQ阅读APP看书,第一时间看更新

2.6.3 比特币中的钱包和数字签名

比特币网络中的这种数字签名和类似的区块链是通过钱包进行的。区块链钱包是一种存储我们的私钥、公钥和区块链地址的软件,并与区块链通信。这款钱包可以在电脑、手机或者专用硬件设备上运行。钱包这样的商品允许管理通证,我们可以通过数字签名发送通证,以及检查发送给我们的通证收据。例如,每次发送或接收比特币时,我们都需要使用存储在钱包中的私钥对交易进行签名。随后,我们的个人账户余额将在分类账的所有副本上进行调整,它分布在P2P网络的计算机上,也就是区块链。区块链地址与传统金融交易环境中的银行账号具有类似功能。

与手写签名类似,数字签名用于验证我们的身份。通过将数字签名附加到交易中,没有人可以质疑该交易的钱包地址,并且该钱包不能被另一个钱包冒充。私钥用于签名交易,然后使用公钥来验证计算机的签名。

当第一次启动时,比特币钱包会生成一个由私钥和公钥组成的密钥对。在第一步中,私钥是随机生成的256位整数。然后,比特币使用椭圆密钥加密从私钥中以数学方式导出公钥。这个数学函数以一种方式工作,这意味着很容易从私钥生成公钥,但使用反向数学从公钥中导出私钥将几乎是不可能的。

使用不同类型的加密函数来导出地址会增加额外的安全性:如果第一层安全性——椭圆密钥加密被破坏,那么拥有公钥的人将能够破解私钥。这很重要,因为当量子计算机成为现实时,椭圆密钥加密特别容易被破坏,而在第二层用于导出地址的散列不易受量子计算机粗暴的影响。这意味着如果有人拥有区块链地址,并且破解了椭圆密钥加密,那个人仍然必须通过第二层安全保护,从公钥中获取地址。这类似于为什么要锁两次自行车,两个不同的锁具有不同的安全机制(钥匙或数字锁),在街道上锁自行车时可以增加一层安全性。

与流行的看法相反,区块链钱包不存储任何通证。它存储与我们的区块链地址关联的公钥-私钥对,但它还记录了涉及钱包公钥的所有交易。钱包还存储特殊交易所需的特殊信息,如多重签名交易以及一些其他信息,但它从不包含任何通证。因此,“钱包”这个词有点误导。“钥匙串”这个词更合适,因为它充当安全密钥存储,并作为区块链的通信工具。区块链钱包的私钥和我们携带的公寓钥匙有很多的相似之处。如果我们丢失了公寓的钥匙,公寓仍然是我们的公寓,但只要我们没有领取钥匙,我们就无法进入公寓;或者找来某些家庭成员、某个锁匠帮助我们闯入自己的房子,打破公寓的锁而进入——即转化为算力攻击来猜测出钱包的私钥。

我们的私钥必须始终保密,不应与其他人共享,除非我们想让他们故意访问我们的通证。如果我们丢失了钱包,没有备份到我们的地址和私钥,或者如果我们丢失了私钥,我们将无法获得资金。通证仍然在区块链上,但我们将无法访问它们。如果我们丢失了托管我们钱包的设备,或者它丢失了,但我们拥有种子短语或私钥的备份,那么我们的资金将不会丢失。因此,许多人更愿意在在线交流中托管他们的代币。与今天的银行类似,这些在线交易所充当基金的托管人。从私钥导出公钥和从公钥导出地址这两步过程是只需要备份私钥的原因。