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

2.6.2 比特币中的公钥加密

将公钥加密技术用于比特币区块链,主要目的是创建关于用户身份的安全数字参考。有关“谁是谁”以及“谁拥有什么”的安全数字参考是P2P交易的基础。公钥加密允许使用一组加密密钥证明一个人的身份:私钥和公钥。两个键的组合创建了数字签名。这个数字签名证明了一个人的代币所有权,并允许通过一个称为“钱包”的商品来控制代币。数字签名证明了一个代币的所有权,并允许一个人控制一个人的资金。正如我们手工签署银行交易或支票,或者我们使用身份验证进行网上银行业务一样,我们使用公钥加密技术来签署比特币交易或其他区块链交易。

在公钥加密中,双方分发其公钥并允许任何人使用其公钥加密消息。公钥是从私钥数学生成的。虽然从私钥计算公钥非常容易,反过来却只能用粗暴的力量来实现。猜测钥匙是可能的,但是代价非常大。因此,如果知道公钥,则不是问题,但私钥必须始终保密。这意味着,即使每个人都知道一个人的公钥,也没有人可以从中获取一个私钥。现在,消息可以安全地传送给私钥所有者,只有该私钥的所有者能够使用与公钥关联的私钥解密消息。这种方法也可以反过来。使用私钥签名的任何消息都可以使用相应的公钥进行验证。该方法也称为“数字签名”。

公钥的模拟示例是挂锁的示例。让我们假设,小明和小李想要私下交流,因此他们都购买挂锁。如果小李想要向小明发送消息,但是害怕有人可能拦截并阅读它,他会要求小明将挂锁(解锁)发送给他。小李现在可以将他的信放在一个小盒子里并用小明发给他的挂锁锁上。这封信可以在世界各地发送,而不会被未经授权的人拦截。只有拥有挂锁钥匙的小明才能打开这封信。当然,有人可以尝试打破盒子(蛮力),而不是使用钥匙。这是可能的,但困难取决于盒子的弹性和锁的强度。

公钥加密中的关键问题是,增加从公钥导出私钥的难度,同时不会导致从私钥导出公钥的难度同时增加。通过猜测结果来破解加密有多难、猜测私钥需要多长时间,以及它有多贵?私钥由数字表示,这意味着数字越大,不知道该数字的人就越难猜测。随着计算机变得更快、更高效,我们必须提出更复杂的算法,无论是使用更大的数字还是发明更具弹性的算法。

如果猜测一个随机数需要几十年的时间,那么该数字就被认为是安全的。每种加密算法都容易受到所谓的暴力攻击,这种攻击是指通过尝试所有可能的组合来猜测我们的私钥,直到找到解决方案为止。为了确保难以猜测数字,弹性私钥具有最低要求:它必须是(1)随机生成的数字。它需要是一个(2)非常大的数字。它必须使用(3)安全算法来生成密钥。随机性非常重要,因为我们不希望任何其他人或机器使用相同的密钥,并且人类不善于提出随机性。