密码学如何保护区块链?
本文摘自本书 Layman的比特币指南 洛根·布鲁茨(Logan Brutsche) 并经作者许可在此处重新发布.
密码学是将数学函数应用于数据片段以确保其安全性的科学.
很多流行的小说暗示只要您有足够好的黑客,任何系统都可以被黑客入侵。这种“好莱坞黑客”不是现实世界的工作方式,黑客必须在系统中发现一个漏洞以加以利用,例如未锁定的服务器机房,易于猜测的密码,未受保护的网络端口或“后门”。作为内部工作安装,以便以后获得未经授权的访问.
的确,我们永远不能保证给定的系统没有漏洞-毕竟,系统是由不完美的人制造的-“任何东西都可以被黑客入侵”的观点是错误的。自90年代初以来,我们已经获得了很容易受到黑客攻击的加密技术。这种技术的应用有时可能会留出利用的空间.
密码术本身不能被黑客产生伪造的加密签名(很快定义),就像数学不能被黑客伪造成2 + 2 = 5一样,尽管密码和数学都可能被错误地使用. 如果使用加密技术的系统失败,那是因为设计者错误地应用了加密技术. 这不是因为密码学不起作用,也不是因为有人“破解”了密码学-并不是因为银行处理您的帐户不算是数学上的错误,也不是妈妈下载不熟悉的附件并感染了计算机病毒时发送的电子邮件的错误。 。这是一个重要的区别,因为比特币非常直接地是既定加密技术的应用.
密码术不是一项未经测试的新技术. 自Internet诞生以来,比特币使用的所有加密技术一直在使用,并且对于每天使用的许多常见Internet协议都是必不可少的. 密码学被计算机科学家认为是可靠且必不可少的,就像火箭科学被NASA认为是可靠且必不可少的一样.
密钥对:密码学的基石
密钥对是区块链中使用的加密技术的基石. 密钥对包含两个部分:私钥和公钥。这些密钥实际上只不过是具有特定数学关系的非常大的数字,用于代替密码和用户名.
您将处理诸如您的名字或用户名之类的公钥:在大多数情况下,您将与任何询问的人共享该公钥,拥有该公钥的人可以使用它来引用或联系您。它与您的声誉(或者在比特币的情况下,是您的交易历史)相关联,因此您可能有多个用于不同目的的公用密钥(因此有多个密钥对)。公用密钥可以用来引用或查看帐户,但不能单独授权对该帐户执行任何操作.
私钥应被视为密码:不应与任何人共享,并且用于对某些操作进行身份验证,例如发送BTC.
但是,私钥和密码之间有一个重要的区别。要使用密码,您必须将密码发送给个人或服务器,以便可以根据他们的记录进行检查。您必须相信密码发送后将负责任地处理。相反,私钥可用于对自己进行身份验证,而无需将其发送到任何地方。它曾经存储或直接使用的唯一位置是在您的本地设备上.
这很重要,因为如果您可以在不向任何地方发送秘密的情况下进行身份验证,则可以完全控制其安全性-您不会受到其他系统安全性漏洞的影响。这是使比特币不可入侵的重要组成部分。比特币本身上没有存储密码或私钥供攻击者使用,但用户仍可以对交易进行身份验证.
但是,如果您从不将私钥发送到任何地方,那么如何使用私钥对交易进行身份验证?答案与私钥和公钥之间的数学关系有关:加密签名.
密码签名
有多种用于生成和验证密码签名的技术,允许它们起作用的数学定理远远超出了本文的范围。对于不熟悉密码学的人,这里描述的过程最初可能根本听起来是不可能的。我清楚地记得四年前开始研究比特币时的印象.
现在,我将再次简单地指出,这些技术已在许多常见的Internet协议中使用,并且是信息科学的既定组成部分.
想象一下两个人,爱丽丝(Alice)和鲍勃(Bob),他们已经亲自进行过公开密钥交易。爱丽丝想向鲍勃发送一条消息,但鲍勃是个非常可疑的人,除非他能以数学方式毫无疑问地证明它,否则他将不相信该消息实际上是来自爱丽丝。为了便于证明,他们同意使用加密签名.
为了生成签名,爱丽丝使用她计算机的签名生成算法,该算法将她的私钥和完整的消息作为输入,并生成一个加密签名。然后,她向鲍勃发送了此消息/签名组合,但至关重要的是, 不发送她的私钥.
当Bob收到消息和签名时,他将使用补充的签名验证算法。该算法将消息和签名作为输入,并确定 上市 爱丽丝用来生成签名的密钥对的密钥。当Bob看到自己的算法输出了Alice的公钥时,他从数学上证明了签名必须是用Alice的密钥对生成的,即使他不知道也无法计算Alice的密钥对的私密部分.
简洁地说, 通过这种加密签名过程,Bob可以验证消息不是由某些第三方创建或修改的,并且必须是由Alice的私钥生成的,而不必(或无法知道)她的私钥。他只需要消息/签名组合和她的公钥.
凭直觉,这似乎是不可能的,而且您可能会觉得好像误解了某些东西。如果Alice的私钥和公钥是如此紧密地联系在一起,并且Alice使用她的私钥来生成Bob收到的签名,那么他如何才能获得她的公钥却找不到她的私钥呢?要解决这个问题,就需要比大多数人更深刻的数学理解,而这远远超出了本书的范围.
尽管如此,仍然每天依赖和使用这种技术,并且被认为是密码学界的坚如磐石。当您访问一个网站并且其地址以https开头时,“ s”表示该网站已使用密码签名进行了验证。您的计算机使用签名验证算法,就像上面示例中的Bob一样,来验证网站是否确实来自正确的密钥对。依靠此加密签名来确保您与网站之间的任何进一步交互都是经过加密和真实的。如果此测试失败,现代浏览器将警告您并将该网站标记为危险.
足够大量的数字
之前,我曾简要提到过,私钥和公钥的功能类似于用户名和密码,但实际上无非就是具有特殊数学关系的极大数字。有鉴于此,我经常被问到以下问题:
“有人难道不能让计算机猜测或计数一堆数字并将其用作私钥吗?他们最终会不会遇到某个目标密钥对的私钥,从而获得对该身份的控制权?”确实,就比特币而言,这将使攻击者能够窃取某个密钥对持有的资金.
这是一个很好的问题,但没有发生。如前所述,有好几个比特币地址已经价值数百万美元的BTC数年未动,即使窃取它所需要的只是正确的私钥,也就是正确的数目!如果您能猜出这些地址的私钥,那么钱就是您的钱可以发送到任何地方。与密码不同,您可以在自己的计算机上本地检查私钥,并且没有服务器限制您尝试私钥的次数或速度。.
那么,为什么还没有人偷走这些资金呢?答案在于用作私钥的数字几乎是荒谬的。他们是 足够大.
让我们从一个简单的思想实验开始。想象一下,您的私钥足够大,如果全球所有计算机都可以一起工作,则暴力破解将花费整个整整24小时的时间。如果仅将一个数字添加到您的私钥中,则计算机将经历十倍以上的排列,因此将需要十天而不是一天。六位数将使它发展到27,000年.
在每种情况下,生成私钥(这仅需要创建随机数的能力)仍然微不足道。使用私钥生成签名,以及对照公钥检查这些签名,在计算上也仍然很简单。但是,猜测私钥所需的工作每增加一位数字就成倍增长。要使私钥“免于”暴力猜测,我们只需要添加足够的数字即可,只需使它们足够大即可。.
因此,足够大就足够了? 比特币中使用的私钥是256位整数,其长度为76位数字. 这个数字大小的力量令人难以置信。下图主要来自布鲁斯·施耐尔(Bruce Schneier)的书 应用密码学, 这是足够数量的引人注目的演示.
首先,认识到热力学第二定律的特定结果是,改变信息的单个二进制位(将1更改为0或反之亦然)所需的能量最小。这意味着无论使用哪种硬件,任何计算过程都需要一些最小的能量来执行.
现在,假设您能够利用太阳的全部能量输出来为专门设计的计算机供电,该计算机的工作是计算或猜测私钥,以期找到密钥对的私钥(该密钥可能控制BTC).
使用一点数学和热力学,您会发现,考虑到太阳的全年总能量输出,一台非常高效的计算机可以计算出2178个值。如果将这个值除以可能的私钥数量2256,我们会发现该假设计算机只能猜测或计算可能的私钥总数的0.0000000000000000000003%(考虑到太阳的年度总能量输出).
此外,这只是计算,并不包括实际检查每个私钥是否与正确的公钥相对应的更为复杂的任务。因此,在一年之内这台计算机确实通过正确的私钥发生了0.0000000000000000000003%的机会,甚至都没有意识到.
这些数字与设备的技术无关。根据1930年代以来建立的热力学定律,它们是最大可能值。而且,它们强烈暗示,除非计算机是由物质以外的东西建造并占据空间以外的东西,否则对256位密钥(比特币使用)的暴力攻击是不可行的。.
这就是足够数量的力量. 黑客的好坏并不重要。除非他可以利用一年中三百个六十亿分之一太阳的功率,或者可以利用三百年一百亿分之一太阳的功率,否则他的计算机甚至无法 数数 通过所有私钥-更不用说测试或以其他方式使用它们了.
要更深入地了解比特币和加密技术,请阅读洛根·布鲁茨(Logan Brutsche)的书, Layman的比特币指南.