主页 > imtoken冷钱包下载 > hashcash算法:从你最熟悉的“验证码”解释区块链的含义

hashcash算法:从你最熟悉的“验证码”解释区块链的含义

imtoken冷钱包下载 2023-04-30 05:47:10

写在前面 比特币不是一项新技术。

但比特币绝对是一种创新产品。 在中本聪提出比特币的想法之前,很多相关的密码学技术已经积累了不少。 中本聪的伟大之处在于,他结合了这些不同的技术,创造了一种新的产品,以满足 P2P 电子现金系统的需要。 从这个意义上说,中本聪是一位天才设计师。 他是区块链行业第一位也是最著名的产品经理。

比特币大量借鉴了现有技术。 其中,以POW(Proof of Work)为代表的共识机制是基于hashcash算法。 Hashcash 是一个非常有趣的设计。 从hashcash本身的设计结构中,我们也可以窥见比特币的很多思想和概念。 在本文中,橙皮书将首先简单介绍一下hashcash的原理,然后从技术角度讨论hashcash代表了比特币对传统互联网的意义。

先从验证码说起

在解释什么是hashcash之前,先说一个大众耳熟能详的东西,一个每天上网都会遇到的验证码,有时候还挺烦人的。

当我们进行一些安全性比较高的操作时,比如账号登录、手机支付、购票等,系统会通过手机短信等验证方式确认当前运营商的真实身份。

而在其他不太安全的操作中,比如在贴吧发帖或者查询某条数据,有时会出现验证码。 这个验证码通常是一张模糊的图片,可以让你识别图片中的字母或者汉字。 还有一些技术上比较复杂的,可以通过水平滑动鼠标或者点击鼠标来验证。

这个验证码的主要目的是判断你是人还是机器。

虽然发帖、查询等操作对安全性要求不高,但系统不希望这些操作被恶意人员利用,通过大量机器代理账号进行批量操作、发起DDoS攻击、爬虫等。

通过验证码,你每次操作的成本增加1%。 虽然对于单个用户来说有点不方便,但总体上还是可以忍受的,但是对于一台机器来说,如果要进行批量操作,每次都需要一些时间来识别验证码,这样每次操作都是叠加的,而且短时间内不可能批量完成。

但是看完这里,你可能会有和我一样的想法:

有人会用机器批量做坏事,但那是他们的问题,我一个守规矩的用户为什么要为此额外付费?

凭什么机器要人承担验证码的运行成本? 这种运营成本虽然对用户体验影响不大,但本质上是系统设计问题。

换个角度想,如果直接让机器像人一样行动,它会在每次操作前进行验证码识别,判断是合法机器还是非法机器。 这样,由机器引起的问题就不是机器自己能解决的了。 然而? 人们可以完全省去验证码的麻烦。

hashcash的设计原理,简单的说就是这样的

要判断操作机器是合法还是非法,最直接的方法就是让机器自己证明自己的身份。

机器如何证明自己?

很简单,通过付出一定的代价来表明自己的“可信度”。

我们可以认为,如果一台机器愿意付出多少层次的成本,那么它“真正”想要进行多少层次的操作。 恶意攻击者会放弃使用机器执行批量操作的意图,因为机器执行此操作的成本和收益都不划算。

这个想法应该可行。 但这还不够可行。 这个用于验证机器实体的系统应该尽可能高效。

因此,如果我们让每台机器在运行之前都需要计算一个非常复杂的数学问题,并以计算能力作为机器支付的成本,计算出答案的人可以证明自己,那么系统提交的答案to check the machine is Not the right answer,这个验证过程应该尽可能高效。

有没有“计算起来很麻烦,验证起来却很简单”的数学问题?

保理算作一个。 如果你想对一个大数进行因式分解,你可能会花费相当多的时间来寻找它的因数集。 但如果您想知道这组因数是否是正确答案,只需将这组数字相乘即可。

散列

哈希(hash)函数的作用类似于因式分解。

哈希是一种映射函数。 简单的说,就是将输入转换成一串特定的ID输出。 这个过程是不可逆的。

例如,如果您使用比特币的 SHA-256 哈希函数比特币的本质代表的数据相同,输入单词“dog”将输出:

cd6357efdd966de8c0cb2f876cc89ec74ce35f0968e11743987084bd42fb8944

但是如果你稍微把这个词改成“doge”,散列的结果就变成了:

c4e793c81ee40370d827d0cbe748d246cffca2cbe959383edf0976d041ece9e5

即使输入数据只改变了一个字节,它的哈希值也会有很大的不同。

对于一条数据,它的哈希值是唯一的。 最重要的是,您无法从输出的数字串中推断和破解原始输入值。

这样,如果给一台机器一串哈希值,让机器找到满足某些特征的哈希值的原始输入值。 只有一个值和一个值可以重复尝试。 如果机器一直疲于奔命,最后靠运气尝试正确答案,那么当机器提交答案的时候,我想知道你的答案是否正确。 只需对答案进行散列,看看输出值是否与要求的值相同。 . 换句话说,检查过程非常简单。

Hashcash就是利用了hahs函数的这些特点,让机器不断尝试不同的数字,找到题目需要的值。 在实际应用中,我们并不需要机器去寻找一个特定的哈希值,因为这是不可能的(从概率上来说),我们只需要机器去寻找满足一定条件的哈希值,比如 ,这个条件可以be:哈希值的前二十位全为零。

在比特币中,这种情况是不断变化的。 随着时间和矿工的增加,对算力的要求也越来越高。 通过调整题目的难易程度,我们可以控制机器找到答案的速度,最终保持平均10分钟出块的速度。

哈希现金

hashcash 的基本原理是从上面提到的一组实践中抽象出来的。

在比特币之前,hashcash 最广泛的应用是反垃圾邮件。

我们希望每个人都能够在需要时直接方便地向我们发送电子邮件,只要他们知道电子邮件地址即可。 但同时,我们也不希望自己的邮箱地址一旦暴露,就会被坏人利用来群发垃圾邮件和广告邮件。

如果机器在发送邮件之前需要花费一定的计算能力来找到正确的哈希值,那么大家还是可以通过email自由发送邮件,但是想要使用机器批量发送垃圾邮件的就得有是要付出的代价。

你可能会问,如果找到正确的散列号,机器就可以一直用这个散列号群发邮件吗?

为了防止这个问题,hashcash 要求哈希后的数字必须包含时间戳。

时间戳就像邮戳一样,代表答案是什么时候计算出来的,如果超过一定的时间限制,答案就会过期失效。

Hashcash 允许机器在发送邮件时在发送邮件的数据头中添加一个字符串“X-Hashcash”。 这个字符串看起来像这样:

1:位:日期:资源:分机:盐:后缀

“X-Hashcash”其实就是提交答案的一个戳记,包括7个字段:

版本号(版本 0 更简单,但有一些限制)。

声明的位值。 如果戳记实际上没有用声明的前导零位散列比特币的本质代表的数据相同,那么它是非法的。

生成戳记的日期(和时间)。 当前时间之后的邮票以及很久以前的邮票都可以被视为非法。 为其生成戳记的资源。 它可以是电子邮件地址,但也可以是 URI 或其他命名资源。 特定应用程序可能需要的扩展。 任何额外的数据都可以放在这里,但是,在目前的使用中,这个字段通常留空。 一个随机因素(salt),用于将此戳记与同一资源在同一日期生成的所有其他戳记区分开来。 例如,两个不同的人可以合法地在同一天向同一地址发送电子邮件给我。 他们不应该发送失败,因为我使用的是双花数据库。 但是,如果他们每个人都使用一个随机因素,那么完整的邮票就会不同。 后缀是算​​法真正起作用的部分。 假设给出了前 6 个字段,minter 必须尝试许多连续的后缀值,以便生成一个带有所需数量的前导零的散列戳。 我们在邮件上加盖章证明机器的合法性,这样当有人要给你发邮件的时候,他只需要像以前一样写邮件,机器就会在后台自动生成盖章并附上到电子邮件。 对方收到后,只要检查一下这个邮票是否合法就可以决定是否接受这封邮件。 hashcash的含义 hashcash可以让我们知道邮件是真实用户发送的还是群发邮件的广告营销机器。 该方法不仅可以扩展用于反垃圾邮件,还可以用于服务器的响应机制。

我们知道,之所以通过浏览器输入一串地址就能返回一个固定的网页,是由于http通信协议的设计。 HTTP规定当浏览器发起请求时,服务器响应请求并返回浏览器指定的内容。 这个协议本质上很简单,没有做太多额外的状态判断,只遵循简单的“一问一答”。

因为http协议的设计太过简单,服务器就像一个email地址。 一旦我们知道可以返回某个资源或者可以通过输入一个URL在服务器上进行某个操作,我们就可以用机器给服务器连续“写信”。 服务器对每个请求进行响应,最终会消耗大量的服务器资源,从而影响用户的正常访问。 这是 DDoS 攻击。

在现实生活中,我们花费了大量精力来修补 DDoS 攻击等安全问题。 我们发明了各种服务器防御机制来判断请求的合法性。 但是,这些方法通过封装其他级别的数据和功能来保护服务器。 比如反爬虫可能会判断短时间内连续访问的IP是否相同,每次请求的时间是否小于人的物理操作时间。 速度,以确定是否有人在机器的帮助下进行批量操作。

这些方法相当于在http层协议上重新创建了一个“安全检查通道”,而http协议本身并不具备“安全检查”能力。 如果我们能够使用hashcash让http请求本身携带本机的自认证信息,那么我们在协议本身的设计上就可以避免像DDoS这样的漏洞和攻击。

而这也是区块链技术与传统互联网技术最重要的区别之一。 通过区块链、哈希现金和比特币共识机制,我们允许机器在底层传输协议上处于活动状态时附加一些附加信息。 这些额外的信息将被用来证明机器本身的合法性,从而在协议层创造一个机器可以相互信任的网络环境。

一旦机器对机器得到信任,我们将创建一个新的互联网。

在这个新的互联网中,机器可以判断其他机器发出的请求是否合法,从而让服务器知道如何更合理地分配资源。

在这个新的互联网中,我们可以编写新的应用,也就是智能合约,然后把智能合约交给机器自动执行。 这套智能合约可以稳定运行,不用担心网络中的机器不执行智能合约,篡改智能合约,或者出现机器叛徒。 这是以太坊诞生的基础。 总结:区块链的本质 总而言之,从hashcash的设计原理出发,让我们对区块链有了另一种认识:

比特币和区块链本质上是为了解决机器之间的信任问题。 通过确保机器可信,网络的可信度得到保证; 通过保证网络的可信度,加入网络的人可以在相互信任的环境中遵守规则,并借助代币和激励机制设计,最终让人们的个人利益与群体的共同利益相契合,最终使网络上的群体朝着同一个方向发展。

参考