虚拟币钱包开发

新闻资讯

产品分类

热门产品

掌握钱包私钥掌握一切吗?
掌握钱包私钥掌握一切吗?
一般而言,如果一笔区块链交易的交易费设置的很低,它是不会被网络纳入的,但在某些情况下,零

杭州软件开发公司
杭州软件开发公司
杭州区块链软件开发公司哪里比较靠谱,区块链软件开发钱包,区块链商城系统开发,区块

GO开发者:如何成为区块链开发者?
GO开发者:如何成为区块链开发者?
可以这样说,2018年是区块链应用元年,区块链相关概念被炒得沸沸扬扬,作为一项新生技术,虽

稳定币之争
稳定币之争
毫无疑问,在加密货币市场有一个占主导地位的稳定币。 从理论上来说,Tether的代币USDT价

河南省首家区块链技术研究院成立
河南省首家区块链技术研究院成立
10 月 30 日消息据凤凰网商业消息,10 月 10 日,河南省未来区块链技术研究院在中国郑州正

软件开发-钱包开发
软件开发-钱包开发
沧州区块链软件开发钱包,区块链商城系统开发,区块链应用技术开发,区块链钱包开发,区块

宜昌软件开发钱包
宜昌软件开发钱包
宜昌区块链软件开发钱包,区块链商城系统开发,区块链应用技术开发,区块链钱包开发,区

临沂区块链钱包开发
临沂区块链钱包开发
临沂区块链软件开发钱包,区块链商城系统开发,区块链应用技术开发,区块链钱包开发,区

您的当前位置:首页 > 虚拟币开发

hashcash算法


时间:2018-10-12 13:42:33  来源:原创  作者:admin  点击次数:


  比特币并不是一种新技术。

  但比特币绝对是一款创新的产品。在中本聪提出比特币的构想之前,有很多相关的密码学技术已经完成了不少的积累。中本聪的厉害之处在于,他把这几种不同的技术结合起来,针对 P2P 电子现金系统的需求创造出了一款新的产品。从这个意义上来说,中本聪是一个天才的设计师。他是区块链行业里第一个、也是最出名的产品经理。

  比特币借鉴了很多现有技术。其中,POW (工作量证明)代表的共识机制,借鉴的是 hashcash 算法。hashcash 是一种很有趣的设计,从 hashcash 本身的设计结构来看,我们还可以瞥见比特币很多的思想和理念。在这篇文章里,橙皮书会先稍微介绍下 hashcash 的原理,然后从技术的角度来讨论下 hashcash 代表了比特币之于传统互联网的意义。

  从验证码开始谈起

  在解释 hashcash 是什么东西之前,我们先来聊点群众们比较熟悉的东西,一个你每天上网都会碰到的、有时还挺招人烦的——验证码。

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

  而在另一些安全性不那么高的操作时,比如在贴吧里发个帖子、查询某个数据,有时候也会出现一个验证码。这个验证码通常是一个模糊的图片,让你识别图片里的字母或者汉字,也有技术复杂一点的,可以通过鼠标横滑、鼠标单击的方式来验证。

  这种验证码最主要的目的,是判定你是人还是机器。

  虽然发帖、查询这些操作本身不具备高安全性要求,但是系统不希望这些操作被不怀好意的人利用,通过大量机器代理账号进行批量操作,发动DDoS攻击,或者爬虫等等。

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

  但读到这里,你可能会跟我有同一种想法:

  有人会利用机器批量干坏事,但那是他们的问题,为什么我作为一个遵守规则的用户要为此支付额外的成本?

  为什么人们需要因为机器的原因承担验证码的操作成本呢?即使这个操作成本对用户体验的影响很小,但本质上,这还是一个系统设计的问题。

  再换个方式想,如果直接让机器像人一样,在每次操作前都进行验证码识别,判断它自己是合法的机器还是非法的机器,这样一来,机器产生的问题不就由机器自己解决了吗?人们完全可以省去验证码的烦恼。

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

  为了判断进行操作的机器究竟是合法的还是非法的,最直接的做法,就是让机器自己证明自己的身份。

  机器要怎么证明自己呢?

  很简单,通过付出一定的成本,来表示自己的“可信度”。

  我们可以认为,如果一个机器愿意付出多少级别的成本,那么它就是“真心”想进行多少级别的操作。不怀好意的攻击者则会因为机器进行这项操作的成本与收益不合算,从而放弃利用机器进行批量操作的意图。

  这个想法应该是可行的。但可行还不够,这套验明机器真身的系统,它的运作效率还应该尽可能更高一些。

  所以,如果我们让每台机器在进行操作前都需要计算一个非常复杂的数学问题,通过算力作为机器付出的成本,算出答案的就可以证明自己,那么,系统检验这台机器提交的答案是不是正确答案,这个验证的过程应该尽可能高效。

  有什么数学问题是“计算的时候非常麻烦、但是验证的时候非常简单”的?

  因数分解算一个。如果你要因数分解一个很大的数字,你可能要花上不少时间去找到它的一组因数。但如果你想知道这组因数是不是正确的答案,把这组数字相乘一下就行了。

  hash(哈希)

  hash (哈希)函数的作用,跟因数分解是差不多的。

  hash 是一种映射函数,简单来说,它把输入转换成一串特定 ID 输出,这个过程是不可逆的。

  比如,如果你用的是比特币的 SHA-256 哈希函数,输入“dog”这个单词,就会输出:

  cd6357efdd966de8c0cb2f876cc89ec74ce35f0968e11743987084bd42fb8944

  但如果你把这个单词稍微改成“doge”, 那么哈希的结果就会变成:

  c4e793c81ee40370d827d0cbe748d246cffca2cbe959383edf0976d041ece9e5

  输入数据即使只改变一个字节,它的hash值也会大不相同。

  对于一个数据来说,它的hash值是唯一的,最重要的是,你没有办法从输出的这串数字里面推导破解出原始的输入值。

  这样一来,如果给定一台机器一串哈希值,让这台机器去找出符合某些特点的哈希值的原始输入值,你手工计算的话估计找一辈子也找不出来,机器也只能一个值一个值反复去试。如果机器不断穷举,最终碰运气试到了正确答案,那么,机器提交答案时,我想知道你这个答案是不是正确的,只要把这个答案 hash 一下,看输出值是不是和要求的一样就行了。也就是说,检验的过程是很简单的。

  hashcash 就利用了 hahs 函数的这些特点,让机器不断地尝试不同的数字,找出题目要求的那个值。在实际应用中,我们不需要机器找出某一个特定的哈希值,因为这是不可能的事情(从概率上来说),我们只要求机器找出符合某些条件的哈希值就行,比如,这个条件可以是:哈希值的前二十位都是零。

  在比特币里,这个条件则是不断动态变化的,随着时间和矿工的增多,算力要求也越来越多,通过调整题目的难度,我们可以控制机器找到答案的速度,最终保持平均每 10 分钟产出一个区块的速度。

  hashcash

  hashcash 的基本原理,抽象出来就是上面所说的那套做法。

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

  我们希望,如果需要的话,每个人只要知道 emial 地址,就可以直接方便地给我们发邮件。但同时,我们又不希望,一旦自己的 email 地址暴露出去,会被坏人拿去群发垃圾邮件和广告邮件。

  如果能让机器在发邮件之前,都需要付出一定的算力来找到正确的哈希数字,那么,每个人依然可以自由的通过 email 发邮件,但那些想用机器批量发垃圾广告的人,就得付出不少代价了。

  你可能会问,如果一旦找到正确的哈希数字,机器不就可以一直使用这个数字来群发邮件了?

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

  时间戳就像邮戳一样,它代表了这个答案是在什么时候被计算出来的,如果超过一定的时限,这个答案将过期作废。

  hashcash 让机器在发邮件的时候,需要在发送邮件的数据头部里加入一个字符串“X-Hashcash” ,这个字符串长这个样子:


本文来自区块链开发官网 转载请注明

上一篇 下一篇


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
网站首页| 关于沙僧科技| 区块链开发| 产品案例| 新闻中心| 售后服务| 联系我们