必须有一种方法来表示拥有区块链资产所有权的身份。 如果没有所有者的身份,您将无法拥有所有权。 公钥加密使得可以在区块链上表示身份。 除了在上一篇文章中,我们讨论的哈希函数之外,公钥密码学是区块链技术的第二个基石。 虽然散列函数用于验证数据的真实性和完整性,但公钥加密用于验证区块链的所有权。让我们退后一步,从头开始。 公钥加密的基础是私钥,公钥,地址和数字签名。 私钥创建数字签名。 区块链包含一条记录(交易),说明当您收到加密货币时,有一些资金与您的公钥相关联。 您必须提供数字签名以授权您的支出。 如果您拥有与公钥对应的私钥,就能提供此数字签名。
椭圆曲线密码学
在讨论密钥和地址如何协同工作之前,我们想谈谈椭圆曲线加密(ECC)。 不同数学概念能用于构建不同的公钥加密系统。 比特币和大多数其他加密货币使用椭圆曲线密码学(ECC)。比特币,以太坊和许多其他货币使用一条名为secp256k1的曲线,它看起来就像上面那样。 此曲线的等式为y ^ 2 = x ^ 3 + 7.椭圆曲线的有用之处在于您可以使用它们进行数学运算,并且使用曲线进行的数学计算包含特殊属性。上图显示了在曲线上一起添加两个点的示例。 当我们想要将点P和Q加在一起时,我们首先用直线连接它们。 该直线将在某个第三点与曲线相交。 现在我们必须将第三个点投影到x轴的另一侧(将y坐标乘以-1),我们得到点P和Q:R的总和。关键点是曲线上两点之和是曲线上的第三个点。
当我们想要在曲线上乘以一个点时,我们必须将它添加到自身。 要将P点乘以2,我们将其添加到自身一次。 在这种情况下,我们不能真正连接两个点,但我们去切线(带箭头的那个)。 如果你看一个接近P(最浅灰色)的随机点,连接这两个点将产生最亮的灰线。 将此点越来越靠近P(从亮到暗)使连接线更接近切线,直到它变成点并且线重叠。
添加到自身很容易。 我们再次将直线与曲线相交,并将其投影到x轴的另一侧。如果我们想将P乘以3,我们现在将P和点(P + P)加在一起。 要将P乘以4,我们可以将点(P + P)添加到自身,依此类推。关键的一点是,增加一个点是一项容易的任务。划分很困难(不可读)。没有算法可以计算P被添加到自身的次数,或者乘以它为了达到某个点所乘的数量。这应该足以理解基于椭圆曲线的公钥加密的基本概念。
私钥
为了向人们介绍公钥加密的概念,公钥的类比就像你的地址,私钥就是打开邮箱的钥匙一样。我们在入门篇已讲过它。现在让我们再从头开始创建一个地址。
设置钱包时,第一步是生成私钥。您的私钥是一个非常大的随机数,256位长。这个数字太大了,您可以为整个宇宙中的每一粒沙子分配一个唯一的私钥。除了很大,您的私钥应尽可能随机。创建随机数比听起来更难,但这一步对于您的资金安全至关重要。
公钥
您从为私钥生成的大型随机数中派生公钥。正如我们所说,在椭圆曲线上一起添加点很简单。比特币在每条密钥对的曲线上使用一个基点。
坐标是
x = 55066263022277343669578718895168534326250603453777594175500187360389116729240
和
y = 32670510020758816978083085130507043184471273380659243275938904335757337482424
现在,此基点已添加到自身中,与私钥所指示的次数相同。 如果您的私钥是数字“3”,那么您将执行我们刚刚向您展示的计算。 如果您将私钥添加到自身,就像您的私钥所说的那样(私钥* P),您将获得公钥。回顾一下:您的私钥是一个大型随机数。当您将基点P与私钥相乘时,您的公钥是椭圆曲线上的一个点。
任何公钥加密方案所必需的属性,使得从公钥导出私钥在计算上是不可行的。通过将基点P与大的随机数(您的私钥)相乘,可以很容易地计算公钥,即曲线上的一个点。但是如果对手知道基点P和你的公钥,他就不能将它们分开并,也不能声称将P加到自身的次数以获取你的公钥。
此时,您的公钥非常大,为512位,并且很容易将其压缩到一半大小。使用的椭圆曲线对x轴对称。每个x值只有两个可能的y值,它们的符号只有不同(正或负)。如果省略y坐标并添加y的正值或负值的点的信息,则公钥变为大小缩小一半,但携带信息是相同的。
地址
最后,为了获取您的地址,您的公钥现在已经过哈希处理。首先,使用SHA256哈希函数,然后使用RIPEMD160第二次。向状态添加一个字节后,如果该地址将转到主网络或测试网并计算校验和,则在获取地址之前还有最后一步。
当我们看一下计算机如何在硬件级别工作时,它是只有0,1两个数。无论您正在查看什么类型的数据(图像,声音文件,甚至您的比特币地址),数据始终以二进制格式存储。有一些方法可以将一串位转换为人类可以处理的数据。人类最好使用一串数字或字母数字字符。
Base58Check是一种将位转换为字母数字字符的方法,但它排除了四个字符0,O,I和l。 Base58Check会从您的地址中删除这些字符,以减少手动复制地址和校对时的错误。
您可以从一个私钥生成任意数量的地址,而今天大多数钱包都会为您执行此操作。这是一项增强隐私的功能,因为它使第三方更难将所有付款链接在一起。我们将在下一章区块链隐私中讨论这个概念及其如何与变更后的地址一起使用。
电子签名
为了完成本文,我们希望回到数字签名。您可能听说您的密钥(公共和私有)可以加密和解密消息。真实情况并不是这样。因为交易中包含的信息不以任何方式加密。区块链上的任何人都可以使用它,这使得系统非常透明。
您的私钥实际用于签名交易。只有您提供证明你有私钥,您才能使用您在交易中收到的资金。我们将介绍此数字签名的工作原理以及如何证明您有私钥,而不会泄露其它相关信息。为此,我们在曲线上结合了哈函数和点乘法的概念。虽然它不完全是复杂的科学,但它也算是一个相当复杂的问题。
总结
设置钱包时,软件将首先生成一个大的随机数,即您的私钥。椭圆曲线上的基点P乘以您的私钥以获取您的公钥,即曲线上的一个点。然后对您的公钥进行哈希处理,并删除字符I,l,0和O以提高可读性。您需要提供数字签名,才能使用这些资金。
这使得区块链可以在安全方面实现更高水平的安全保障。首先,公钥密码可以用来创建一个安全的连接,以支持数据传输。安全连接使区块链网络中每个节点间的参与者之间建立了安全的通信渠道,以确保共识机制的正确执行并保证网络中不存在传输窃取、非法修改等行为。