「区块链基础概念100」:哈希值 | 007
「区块链基础概念100」由火星财经「学习区块链」频道出品,在区块链基础概念之上延展深度阅读,并紧密连接产业,关注产业发展热点和趋势。
1. 基础概念
哈希值/ 散列值/ Hash Values / Hash Codes / Hash Sums / Hashes
哈希值通常用一个短的随机字母和数字组成的字符串来代表,是一组任意长度的输入信息通过哈希算法得到的“数据指纹”。因为计算机在底层机器码是采用二进制的模式,因此通过哈希算法得到的任意长度的二进制值映射为较短的固定长度的二进制值,即哈希值。此外,哈希值是一段数据唯一且极其紧凑的数值表示形式,如果通过哈希一段明文得到哈希值,哪怕只更改该段明文中的任意一个字母,随后得到的哈希值都将不同。
2. 深度解读
哈希算法——连接区块的绳索
摘要:在第二期的时候就曾说过,区块链具有信息不可篡改的特点,因此我们经常会听到区块链在溯源防伪上的运用,刘强东说过一句话,意思是以后的供应链发展会让人们知道所吃的鸡蛋来自哪个农场,甚至是哪只鸡下的蛋,那么接下来我们就来了解一下,为何它能有如此强大的能力。
区块链的组成
在正式进入哈希算法概念前,先提及一下区块链的组成机构,顾名思义,就是由一个个区块所构成的链式结构,而区块呢,就很像数据库的记录,每次写入数据,就是创建一个区块,每个区块里包含两个部分:
1、区块头(Head):记录当前区块的特征值,包含了生成时间、实际数据即(区块体)的哈希、上一个区块的哈希等等
2、区块体(Body):实际数据
那么哈希到底是什么呢?
哈希算法
哈希算法又叫散列算法,是将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。它的原理其实很简单,就是把一段交易信息转换成一个固定长度的字符串。
如图通过哈希计算器输入得到结果,可以发现这串字符串具有一些特点:
1、就算输入值只改变一点,输出的哈希值也会天差地别;
2、只有完全一样的输入值才能得到完全一样的输出值;
3、输入值与输出值之间没有规律,所以不能通过输出值算出输入值,要想找到指定的输出值,只能采用枚举法,不断更换输入值,寻找满足条件的输出值,因此是不可逆的。
并且哈希值的计算速度极快,哈希一部20G高清电影和一个5K文本文件复杂度相同,计算量都极小,可以在0.1秒内得出结果,大大减少了算力成本。
以比特币为例,哈希算法保证了比特币挖矿不能逆向推导出结果。所以,矿工持续不断地进行运算,本质上是在暴力破解正确的输入值,谁最先找到谁就能获得比特币奖励。
哈希算法之于区块链
在区块链中,通常使用SHA-256(安全散列算法)进行区块加密,这种算法的输入长度为256位,输出的是一串长度为32字节的随机散列数据。
区块链通过哈希算法对一个交易区块中的交易信息进行加密,并把信息压缩成由一串数字和字母组成的散列字符串。区块链的哈希值能够唯一而准确地标识一个区块,区块链中任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块中的信息没有被篡改。
而哈希值所具有的特性也和我们上期提到的非对称加密有着天然的契合度,因此在哈希算法也是非对称密码当中一个重要的算法。
哈希值的安全性
从理论上说,哈希值是可以被获得的,但是对应的用户密码很难获得。
假设一个网站被攻破,黑客获得了哈希值,但仅仅只有哈希值还不能登录网站,他还必须算出相应的账号密码。
计算密码的工作量是非常庞大且繁琐的,严格来讲,密码是有可能被破译的,但破译成本太大,被成功破译的几率很小,所以基本是不用担心密码泄露的。
当然,黑客们还可以采用一种物理方法,那就是猜密码。他可以随机一个一个的试密码,如果猜的密码算出的哈希值正好与真正的密码哈希值相同,那么就说明这个密码猜对了。
密码的长度越长,密码越复杂,就越难以猜正确。如果有一种方法能够提高猜中密码的可能,那么可以算是哈希算法被破解了。
比如说,例如原本猜中的概率是1/10000000000000,现在增加到了1/1000。如果每猜一个密码需要1秒,按照之前的概率猜,直到地球毁灭都可能没猜中,但后者只需要1小时就足够了。在这样的情况下,哈希算法就算是被破解啦,不过那该是猴年马月的事情了。
而且除了哈希算法,区块还包含的其他特征又提供双重保险保证了区块链的不可篡改。
在本期课堂中我们首次提到了区块的组成内容,其中区块所包含的特征及信息无不都是巧妙的设计,接下来的科普课堂将继续为大家了解区块中除哈希值外的其他内容,以便更好地理解区块链所具有的的特性。
导读:假设一个网站被攻破,黑客获得了哈希值,但仅仅只有哈希值还不能登录网站,他还必须算出相应的账号密码。
哈希算法的前世,今生和未来
当新人在学区块链技术的时候,都会听到哈希和哈希算法,这似乎是无处不在的安全性保证。例如比特币或者以太坊这种运行去中心化网络和共识的机器,都会有上万个节点通过P2P连接,并且需要“无需可信”和可验证的效率。这些系统需要将信息写入紧凑的格式,从而通过参与者进行保证安全和快速验证。
比特币和以太坊主要的primitive是区块的notion,这是包含转账信息,时间戳和其他重要数据的数据结构。他们安全性的重要部件,就是能够压缩网络全部的状态信息,变成很短,并且标准的信息,在需要的时候可以进行有效验证,这就被称之为哈希。
到处都会使用加密哈希,从密码存储到文件验证系统。使用确定性算法的基本原理,就是使用一个输入,并且每次都产生一个固定长度的字符串。也就是说,使用同样的输入总是会导致同样的输出。
确定性不仅对哈希很重要,而且可以改变输入的单个字符会产生完全不同的哈希。
哈希算法的问题是碰撞(collisions)的必然性。哈希是固定的字符串,意味着对于每个输入,不同的输入都会产生同样的输出。碰撞(collisions)是不好的。这意味着如果有攻击者能够根据需求创建这种collisions,那么他就可以让欺诈文件或者数据看起来像正确的,合适的哈希,并且冒充合法。优质哈希功能的目标是让攻击者很难找到,获得输入数据的方法。
计算哈希不应该太简单,因为这会让对于攻击者来说,计算collisions也变得很容易。哈希算法需要对“预攻击”有抵抗性。也就是说,给定哈希,应该很难计算追溯确定性的步骤来重新产生由哈希创建的数值。
Given s= hash(x), finding x should be near impossible.
概括来看,“好的”哈希算法会有以下3种特性:
-在输入中改变一个字符,应该会创建雪崩效应,从而导致完全不同的哈希
-很低的概率会产生collisions
-提高效率,但是不会牺牲collision的对抗性
破散哈希
其中一个初始哈希算法标准是MD5哈希,这是被广泛用来进行文件整合验证,而且存储哈希密码在网页应用数据库。这个功能非常简单,因为输出是固定的,128个字符串对于每个输入,并且使用几轮微不足道的单向运算来计算其确定性输出。它的输出长度短,操作简单,使得MD5彻底易碎,被称为生日攻击。
“生日攻击”是什么?
我们曾经听过,如果你把23个人放在一个房间,就会有50%的概率,其中的2人会有同样的生日?将这个数字提升到70人在一个房间,就会有99.9%的概率。这就是我们所说的鸽巢原理,也就说如果把100个各自放到99个箱子,你就必须在1个盒子里面放2个鸽子。换句话说,固定的输出意味着collisions 可能会找到固定的排序。
其实,MD5对于collision的抵抗是很脆弱的,家庭使用的2.4GHz处理器就可以在几秒钟算出哈希collision。而且,对于现在网页的早期使用,还可以在网络上创建很多MD5的预图形,如果搜索哈希,就可以在谷歌上很容易找到。
哈希算法的多样化和革新
开始:SHA1 &SHA2
NAS被称为哈希算法标准的先驱,最初的想法是安全哈希算法或者SHA1,创建了160固定长度的输出。不幸地是,SHA1通过增加了输出长度,单向操作的数量,还有单向操作的复杂性,从而形成了MD5算法,但是这不会提供任何基础的提升,来对抗更有力量的机器来尝试不同的攻击。
我们怎么才能做得更好呢?
进入SHA3时代
在2006年,国家标准和技术研究院提出了一个比赛,来找到SHA2的替代,这在本质上九不同,从而形成了标准。因此,SHA3作为现在所知的KECCAK哈希算法一部分,就这样诞生了。
尽管表面看起来是相同的,SHA3通过一个被称为海绵结构的机制,让内部变得非常不同,这使用了随机的排列来输入和输出数据,同时也为未来的输入提供了随机的来源,这会进入到哈希算法中。
SHA3维持了内部的状态并且有和输出相关的更多信息,这可以防止之前算法的限制。在2015年,通过NIST成为了标准。
哈希算法和工作量证明
当考虑到整合哈希算法到区块链协议中的时候,比特币使用了比较旧的SHA256算法,但是以太坊使用了修改后的SHA3算法,作为工作量证明的算法。选择工作量证明区块链的哈希功能是很重要的部分,但是计算的效率称为哈希。
比特币SHA256算法通过特定的硬件ASIC,进行有效计算。在矿池中,很多都是在ASIC上写入的算法,但是这也会使得整个协议往中心化计算发展。也就是说,工作量证明激励了有效计算机器来聚集成矿池,同时也增加了哈希力。或者一种机器可以计算每个时间间隔的哈希数量。
以太坊,使用的是被称为KECCAK256的改进SHA3。而且,以太坊的工作量证明算法,Dagger-Hashimoto意味着意味着内存难以计算硬件。
为什么比特币使用双重SHA256算法?
比特币通过SHA256算法,会有很有趣的方式来获得哈希数据,因为它会在协议中运行算法的2次迭代。需要注意地是,这并不是生日攻击的对策,因为很明显如果hash(x) = hash(y),那么hash(hash(x)) = hash(hash(y))。但是,双重SHA256算法是被使用来减轻长度扩展攻击。
本质上来说,这类攻击包括,恶意欺诈的人知道哈希输入的长度,可以用来欺骗哈希来开始内部状态的某个部分,通过附加一个私密字符串到哈希值。SHA256,是SHA2算法大家庭中的一个,逃离这个陷阱,比特币通过计算哈希两次来减轻它。
以太坊2.0和BLAKE算法
SHA3并不是来自2006年NIST哈希比赛的唯一突破。尽管SHA3获得胜利,称为BLAKE的算法获得第二。对于以太坊2.0分片技术的部署,更有效的哈希几乎是个特性要求,研究团队非常重视。BLAKE2b哈希算法,这是BLAKE的更新版本,在和KECCAK256算法相比的时候,它由于效率很高正在被广泛使用,同时也保证了很高的安全性。
BLAKE2b的计算速率实际上是比KECCAK在现代CPU上要快3倍。
哈希算法的未来
不论我们怎么做,我们只能(1)提高内部哈希操作的复杂性,或者(2)提高哈希输出的长度,希望攻击者的计算机不会足够快到能够有效地计算collision。
我们依赖于网络安全单向操作前图像的模糊性。也就是说,哈希算法的安全目标是让所有人尽可能困难地找到能够获得同样哈希输出的数值,尽管对于可能的collision,其数值是有限的。
未来有量子计算机了?哈希算法还安全吗?
根据现在的理解,答案是肯定的。哈希算法将经受量子计算机的考验。量子计算能够打破的东西,是严密的,用巧妙的技巧和理论建立的底层数学架构,例如RSA加密。另个方面来看,哈希算法在内部的框架中,有更少的形式结构。
量子计算机确实加快了计算的速度,例如哈希算法,但是最后,它们也会被利用来进行如同现在计算机的攻击。
不论我们为协议选择了什么算法,很清楚地是我们都处于有效计算的未来,而且我们必须要使用最好的方式来获得正确的工具,以及那些希望能经受时间考验的人。
导读:概括来看,“好的”哈希算法会有以下3种特性:
-在输入中改变一个字符,应该会创建雪崩效应,从而导致完全不同的哈希
-很低的概率会产生collisions
-提高效率,但是不会牺牲collision的对抗性
你在高中没有学过的函数,哈希函数
来源:哈希未来 作者:蒙绎泽、陈致佳
哈希函数是指一类数学运算过程,它接受任意大小的输入值,经过一番运算后可以很快给出一个确定的固定长度的输出值,这个输出值可以作为这个输入值的数字指纹。
正如对于双胞胎而言,他们各自的指纹也是独一无二的,哈希函数的设计使得它也具有同样的特性:即使是非常微小的输入值差别,哈希函数的运算结果也会有非常巨大的差异。除此以外,哈希函数没有任何启发式算法,输入和输出的关系看起来是完全随机的,例如给一个确定的输出结果,要求对应的输入值应该是多少,或者是要求输出结果小于某个值,问一个符合条件的输入值应该是多少,这些问题的求解没有什么技巧和方法可循,只能通过不断地进行尝试,尝试的次数越多,越有可能找到答案。
我们可以利用哈希函数的这些特性实现很多功能。例如数据保护:将数据的内容和数据的哈希值一起发送,接收者对接收到的数据进行哈希运算,对比即可知道数据是否被篡改。再比如,网站在进行用户登录时,可以在数据库里存储用户密码的哈希值,与用户输入的密码的哈希值进行比对来验证身份,好处是如果数据库泄露,黑客也不能通过这些哈希值来反推出用户的密码,相对来说比较安全。
值得注意的是,哈希函数的输入集合是无限的,而由于输出长度固定,输出的所有可能集合是有限的,根据鸽笼原理:n+1个元素放到n个集合中去,其中必定有一个集合里至少有两个元素。所以两个不同的输入值有相同的哈希值理论上是一定存在的,但是好在这样的事情发生的概率非常小,而且哈希函数也在不断改进,SHA1函数就曾经被密码分析人员发现了有效的攻击方法,目前比特币在内的系统采用了更先进的SHA2系列算法,比特币多年的良好运行表明至少到目前为止SHA256算法经受了检验。此外,连续多次使用哈希函数也是一种更加安全的选择。
哈希函数在比特币中有多处运用,可以说扮演了非常关键的角色。
1. 对交易信息进行压缩和验证
由于区块链要处理的交易信息内容庞大,将每个块内的所有数据直接以序列的方式存储将会非常低效且耗时,但是利用哈希函数可以对信息进行压缩和验证。使用Merkle树可以很快验证某笔交易是否属于某个区块,它的简化示意图如下,对于打包到一个区块的所有交易,首先将它们划分为几个部分,如下图中的交易信息1、交易信息2……并计算出对应的哈希值1、哈希值2… …之后两两结合进行哈希运算,最终得到这个Merkle树的根哈希值。如果某一笔交易信息记录的数据有变化,那么最终算出来的Merkle根哈希值也会不一样
图1 比特币中的Merkle树
那么为什么要使用这样的算法,而不是直接将所有的交易信息串成一个大块并且算出它的哈希值呢?原因在于这样的二叉树结构可以允许仅仅进行少量数据的验证,同时如果交易的数据信息有误也可以快速定位至出错的位置。
2. 用于工作量证明,形成共识
为什么都说区块链是不可篡改的呢?首先考虑一个如下的简单的哈希链:每次打包时包含上一个区块的哈希值和这个区块的相关信息,如果某一个块的信息被篡改了,往后所有块的哈希值都会有变化,其他人也会注意到这个变化。但是这样设计的问题在于任何人都可以修改某一个区块上的信息,重新计算剩余链条的所有信息,并且声称这才是正确的链。
比特币设计的精妙之处在于,它使得要实现这样的过程需要付出昂贵的成本。它采用工作量证明的共识机制,大家争相证明自己完成了一定的工作量,最先完成的获得记账权。而工作量指的就是要求找到一个随机数,使得它加上一个给定的字符串后计算得到的哈希值小于某个值。在比特币中,这个给定的字符串包含了版本号、上一个区块的哈希值、以Merkle根哈希值存放的交易信息,时间戳、难度值的信息。
矿工找到符合要求的随机数,既“合法”宣告了自己的记账权,也通过哈希函数完成了对交易信息的编码,并以一种不可篡改的方式存储。如果有人试图想更改交易信息,他必须运气特别好,能够快速且成功地找到往后链条的每个区块的正确的随机数,使得他篡改信息后的链条成为当前最长的链条,这样的情况理论上的确可能发生,但是在算力有限的情况下,概率比较小。
3 用于生成比特币钱包地址
在比特币的交易中,大家都能看到的信息如下图,左上角是交易号码,绿色箭头连接的两个字母和数字组成的字符串是比特币地址,表明比特币在两个地址之间有了转移。而这个地址的生成是由钱包的公钥经过哈希函数转换而成的。其中公钥是由随机数字构成的私钥通过非对称加密形成的。交易时公钥和比特币地址都需要公开发布,来使区块链系统验证付款交易的有效性。
图2 比特币转账示意图
在这里哈希函数扮演的角色相当巧妙:量子计算机可以很容易从公钥反推出私钥,但是量子计算机在面对哈希算法时则难以找出拥有同一个哈希值的两个不同输入值,可以说中本聪的这个设计使得通过一些操作可以让比特币有可能抵御量子计算机的威胁:比如每个比特币地址都只用一次,每次付款转账到别人的地址和自己的找零地址中。
由上可见,中本聪通过巧妙的设计很好地利用了哈希函数的特性,并最终形成了一个良好运转的系统,这当中牵扯到了多种交叉学科,也启示我们在技术创新时需要抽象出一件事物的本质,注意与其他领域相互融合。随着技术的进步,新的哈希函数也在不断地被设计出来,并接受着大家的检验,哈希函数的发展可以说是“道高一尺,魔高一丈,愈进愈阻,永无止息”。
导读:哈希函数是指一类数学运算过程,它接受任意大小的输入值,经过一番运算后可以很快给出一个确定的固定长度的输出值,这个输出值可以作为这个输入值的数字指纹。
3. 产业动态
总哈希值下降,比特币挖矿难度又将进入大调整
今年的11月1日,比特币的哈希值一度达到历史最高水平,超过每秒60exahash(EH/s),然后自由落体到最近的低点35EH/s,这一下降几乎导致哈希值减半。
总哈希值表示网络上每个矿工的综合计算能力。随着越来越多的矿工与矿场的退出,这一数字正在慢慢减少。
最初,哈希值下降几乎是由即将推出的比特币硬分叉造成的。许多矿商们猜测,比特币的分叉将会带来更大的利润,因为他们将积累两枚硬币,而不是一枚硬币。另外,持有分叉权益的玩家也会影响哈希值的变化,这是一个好的信号。
不幸的是,随着比特币价格的不断下跌,矿工们在11月15日的比特币硬分叉之后最终决定不再对比特币报以期望。由于无利可图的矿场关闭,矿工们不得不被迫出售他们的设备,Hashrate也跟着一起下降。
随着新比特币所能得到的权益减少,每枚比特币背后的价值都会下降,因此BTC的价格也会越来越低。
每隔一段时间,比特币开采难度就会经历一次自动调整。由于块设计为每10分钟一次,这将使网络每两周就会对开采难度进行一次调整。
调整的目的是考虑到网络哈希值的变化。如果有大量的新矿工涌入,就会很快找到奖励。相反,自上次调整以来,随着哈希值的下降,平均每10.9分钟就有比特币被开采。
这次即将到来的调整很可能发生在世界协调时12月19日清晨,预计将减少10%的难度。在过去的一个月里,采矿难度已经下降了20%。
导读:总哈希值表示网络上每个矿工的综合计算能力。随着越来越多的矿工与矿场的退出,这一数字正在慢慢减少。
从数字货币挖矿的演变看矿业的前景
前言:每天走在行情一线,不随波逐流,不跟风市场,不盲目操作,走在盈利的前沿,投资市场就好比人生,你在参与,却不能去决定。这个市场不会时时刻刻让你得偿所愿,但会给你很多可以去规划和争取的空间。投资市场的魅力就在于它充满了不确定性,却有规则可循。犹如人生,太多做人的道理大家都明白,可是终究还是战胜不了自己个性的弱点。所以说,要想在这个市场上把握到属于自己的那一份收益,你就需要遵守这个市场的规则,否则你将会被淘汰出局。
数字货币挖矿,解决哈希值算法的过程——负责加密区块链块的复杂数学方程。
该过程对工作量证明区块链网络的安全性、不变性和分散性至关重要。挖矿和交易费用激励个人为了经济利益而采矿。然而,最近的趋势表明,矿业公司的利润已下降到越来越难以持续的地步。
是数字货币挖矿已经消亡,还是这些趋势预示着更多的事情正在幕后发生?
1、数字货币挖矿年表
在比特币开采的早期,人们使用中央处理器(CPU)来开采比特币。只要手头有几台电脑,早期的矿工每天就能赚到少量的钱,但是大多数人这样做是出于热情和好奇心,而不是作为一家盈利企业。
2010年,一个名叫Laszlo Hanecz的用户的采矿成功传遍了数字货币社区。在5月17日的一天内,Hanecz就可以使用图形处理单元(GPU)而不是CPU来开采1400个新的比特币。虽然2010年比特币的价值仍然很低,但Hanecz的技术吸引了很多关注,到年底GPU挖掘的流行已经很普遍。
注意到赚钱潜力,矿商开始通过堆积gpu创建自己的数字货币挖矿机器。然后,家用设备开始被现场编程门阵列(FPGA)所取代,FPGA经过改进,可用于低能源需求的采矿。不久之后,专用集成电路(ASIC)出现了,为企业开采打开了大门。
为了竞争,单个矿商联合他们的计算能力来创建矿池。随着比特币的价值飙升,即使是单个矿商联合起来也难以与大型数字货币矿业公司竞争。
有充分证据表明,矿业在2018年初的崩盘中戛然而止。尽管矿业池仍具有颠覆性的潜力,但2019年,该行业将被那些拥有保持竞争力的独特基础设施的公司所主导。除非临时矿工能获得免费或廉价的能源供应,否则在一个竞争激烈、低迷的市场上,采矿的电力成本往往超过他们能挣到的钱。
比特币开采早期的时间表
2、一个不确定的未来
预测比特币和其他数字货币挖掘的未来可行性并非易事。哈希值,块奖励,挖矿难度,能源价格,和代币价值波动等众多的因素都会影响矿商的利润率。
比特币开采盈利能力下降的主要原因是比特币价格暴跌,开采难度加大。对于后者来说,重要的是要记住,当越来越多的人在解决比特币的哈希值算法时,这些算法会变得越来越难完成,因此,挖掘比特币所需的技术需要变得越来越复杂,也就是昂贵的电力消耗。一些人将责任归咎于政府。评估这些主张的价值是困难的,但很明显,在当前的环境下,创建一个可持续的数字货币开采业务计划是有问题的。
3、GPU不太可能成为救世主
采矿业当然不限于比特币。作为对价格波动的反应,矿业爱好者可以转向不同的代币。有些代币甚至与比特币呈负相关——它们随着比特币的贬值而升值。这种策略特别有利于使用基于gpu的钻机的小型个体矿工,这种钻机比ASIC更灵活,ASIC的硬件是为特定的数字货币哈希算法设计的。
这种解决方案不太可能是采矿业的可取之处。GPU挖掘具有能耗高、散热问题严重、速度相对较慢等特点。采矿图形卡销量的下降为这一理论提供了进一步的证据;英伟达高管对矿业相关销售是否会再次成为其业务组合的重要组成部分表示怀疑。
对GPU矿商来说,更糟糕的是,知名ASIC矿商Bitmain和迦南降低了芯片价格(可能是为了扩大市场份额,牺牲利润)。
4、矿业的前景
尽管Bitmain和迦南正在提供更廉价的产品,但ASIC矿业的前景也不完全乐观。台积电(TSMC)是中国矿商专用集成电路(ASIC)设备的大型生产商,它们表示,降低对矿业相关采购的兴趣,是降低2019年营收预期的理由。
尽管前景黯淡,但对个别矿商而言,并非一切都已失去,对矿池而言更是如此。如果比特币的价格上涨,运营可能会变得更加有利可图。
市场的自我修正性质应该在某种程度上缓解数字货币爱好者的主要担忧——一旦采矿成本超过收入,网络将变得不安全,区块链的未来可能陷入危险。区块链是一个自我维持的系统——随着矿工数量的减少,数字货币的开采难度将相应降低,留下来的矿工的盈利能力将提高。还应该指出的是,这种恐惧只适用于传统的基于工作量证明的网络,而且还存在其他未经证实的共识模型。
技术进步的希望始终是可能的。从显卡到冷却系统,再到能源生产和供应,提高盈利能力所需的突破随时可能出现。
通过保持灵活性,保持耐心和在代币之间的转换,矿工们能够继续开采,不管是为了激情还是为了利润。一些像Monero这样的抗ASIC密码技术提供了一些替代选项,这些选项可能会拯救基于区块链构建的、以人为动力的精神。到底如何,只有时间才能揭示答案。
以上文章部分内容摘自网络资源。更多数字货币交易技巧分享欢迎关注公众号“区块链据库”。
最后笔者温馨提醒大家:投资有风险,投资千万条,安全第一条,投资不规范,亲人两行泪。投资者据此操作,风险自担,转载请注明出处。
导读:数字货币挖矿,解决哈希值算法的过程——负责加密区块链块的复杂数学方程。
哈希算法现状——原因、方法及未来
哈希算法对于保证区块链网络安全很重要。为了减少哈希冲突可能性,要么提高哈希内部操作的复杂性,要么提高哈希输出的长度,寄希望于攻击者计算速度不够快。本文分析了哈希算法的历史,原理和未来,对于我们理解区块链的安全问题很有帮助。本文作者是Raul Jordan,文章来源于medium.com,由蓝狐笔记社群“李熙和”翻译。
新手在了解区块链的时候经常会接触到哈希(hash)和哈希算法(hashing algorithm)这样的概念,它们在安全方面可以说是无处不在。通过P2P运行像比特币,以太坊之类有众多节点的去中心化网络需要去信任机制和验证的高效性。
这就是说,这些系统需要想办法将信息以一种高效而简洁的方式编码,并允许其参与者能够安全而快速的进行验证。
比特币和以太坊所涉及的主要概念是“区块”,这是一种包含交易记录,时间戳以及其他元数据的数据结构。这种数据结构安全性的关键在于:它能够将大量关于全球网络状态的信息压缩成一小段信息标准,并使这一小段信息能被高效的验证,这一小段信息被称为哈希。
加密学上的哈希被用于各行各业,从密码储存到文件验证系统。基本思想是使用一种确定性的算法(deterministicalgorithm),这种算法能够接受一个输入并每次都产生一个长度固定的字符串。也就是说,一个相同的输入得到的永远都是相同的输出。
除了这种确定性,哈希算法还有一个特性:输入中的任何一点点的改变都会导致输出变得完全不同。
哈希算法有一个问题,就是冲突必然性(inevitability of collisions)。它的意思是:由于哈希函数输出的字符串长度一定,不同的输入有可能会产生相同的哈希值。冲突是不好的,如果一个攻击者能够故意产生冲突,他便能够把恶意的文件或者数据伪装成正确的哈希值并将其传递下去。一个好的哈希函数的目标,是让冲突的发生变得几乎不可能。
计算一个哈希值不应该太过高效,因为这会让冲突的实现变得太过容易。哈希算法应该能够抵御“原像攻击(pre-image attack)”。也就是说,根据已知的哈希值找到输入值应该是极其困难的(输入值被称作原像,比如s = hash(x),根据s找到x应该是几乎不可能的)。
总结起来,一个好的哈希算法应该具备以下特征:
· 改变输入的任意一点都会产生一个完全不同的输出
· 发生冲突的可能性非常低
· 在不牺牲抵御冲突的情况下有一定的效率
攻击哈希
最初的哈希算法标准之一是MD5哈希,它被广泛的应用于文件完整性验证(校验和),同时在网络应用的数据库中用于储存哈希密码。那时它的功能还十分简单,因为不论输入如何,输出是一个固定的128位的字符串,并且它使用并不有效的多轮单向操作(one-wayoperations across several rounds)来计算确定性输出。
由于输出字符串长度较短以及操作较为简单,MD5很容易被破解并易受生日攻击(Birthday Attack)的侵扰。
什么是“生日攻击”?
你可能听说过:如果一个房间里有23个人,那么两两生日重叠的可能性就有50%,而在一个房间内如果提高到70人,那么这个概率就变成了99.9%。这就是鸽子洞原则(pigeonhole principle),如果有100只鸽子只有99个洞,那么必然有一个洞中有两只鸽子。
放在哈希算法的案例中就变成了,一个固定长度的字符串意味着一个固定的排列组合数量,因此当输入值达到一定的数量时,冲突必然会发生。
MD5抵御冲突的能力如此之弱,以至于一个2.4GHz的奔腾处理器都能在数秒之内制造一次哈希冲突。事实上,由于MD5在较早年代的广泛应用,已经有大量的原像在线上泄漏,你甚至可以用简单的谷歌搜索来找到它们。
多样性和哈希算法的进化
开端:SHA1 & SHA2
美国国家安全局(NSA)一直都是哈希算法标准方面的先驱,他们最早提出安全哈希算法,也就是SHA1,这个算法输出的是160位固定长度的字符串。
然而,SHA1仅仅在MD5的基础上提高了输出的长度,单向操作的数量以及单向操作的复杂性,但未做任何根本改进来使其能够抵御更强大的机器,这些机器尝试不同的攻击向量。
那么我们该如何提高呢?
SHA3
在2006年,美国国家标准与技术研究所(NIST)发起了一场寻找一个与SHA2从根本上不同的替代品,让它成为新的算法标准。因此,SHA3的诞生是哈希算法伟大机制的一部分,它被称为KECCAK。
虽然名字看上去差不多,SHA3内部与之前的算法完全不同,因为它拥有海绵结构(Sponge Construct)机制。这种结构使用随机的排列组合来吸收和输出数据,同时还能为未来输入值提供随机源。
SHA3维持一个内部状态,使得输出信息比字符串长度长(依然能够做到对于信息的压缩),这使它克服了先前算法的局限性。它也在2015年成为了NIST的标准算法。
哈希和PoW
当哈希算法被集成到区块链协议中的时候,更老一些的比特币选择了SHA256算法,而以太坊选择了改良版的SHA3(KECCAK256)作为PoW的算法。一个在区块链PoW协议中选择哈希函数的重要标准是计算哈希值的效率。
对比特币SHA256算法的执行效率可以通过制造诸如ASICs矿机之类的专门硬件来进一步提高。这表现在矿池中ASICs的使用,并使协议趋向于计算中心化。
也就是说,PoW鼓励高效的计算群体聚合成更大的群体(矿池)从而提高我们所说的哈希算力(也就是一个机器在固定的时间间隔能够计算的哈希数量)。
以太坊,选择了改良后的SHA3,也被称作KECCAK256。此外,以太坊的PoW算法(Dagger-Hashimoto)设计成硬件内存难以计算,这从一定程度上避免了ASICs矿机的使用。
为什么比特币要使用双重SHA256?
比特币使用SHA256来转换数据的方式很有趣,它将算法在协议中连续执行了两次。注意,这并不是为了抵御生日攻击,显然如果hash(x) = hash(y) 那么也有hash(hash(x)) = hash(hash(y)),而是为了缓解长度扩展(length-extension)攻击。
从本质上说,这种攻击需要恶意攻击者知道哈希输入值的长度,在这个已知的长度上再加上一个秘密的字符串,就可以发动哈希函数内部的一部分,从而扰乱哈希函数。由于SHA256是SHA2算法家族的成员,它有这一类的短板,而比特币通过将哈希函数连续运行两次来缓解这个缺陷。
以太坊2.0和BLAKE
SHA3并不是NIST在2006年发起的那场竞赛中唯一的突破。虽然SHA3最终获胜,一个叫做BLAKE的算法紧随其后位居第二。对于以太坊2.0分片的执行,更高效的哈希算法可以说是必不可少的。
BLAKE2b哈希算法是一个在竞赛之后被高度升级优化过的版本,由于在保持高度安全性的同时拥有极高的效率(跟KECCAK256相比),这个算法也经历了较为彻底的测试。
在一个现代CPU上计算BLAKE2b实际上比KECCAK要快3倍。
哈希算法的未来
看起来无论我们做什么,要么是在(1)提高哈希函数内部操作的复杂性,要么是在(2)提高哈希输出的长度,寄希望于攻击者的计算机由于速度不够快而无法有效产生计算冲突。
我们网络的安全性目前依赖着单向操作原像的模糊性。也就是说一个哈希算法的安全目标是让任何人找到具有两个相同输出的值变得越难越好,从而使得哈希冲突的可能性尽可能的小,虽然依旧存在无限数量的可能的冲突。
那么量子计算呢?在量子计算面前哈希算法足够安全吗?
根据目前的理解,简单的回答是:安全。哈希算法将能够经受量子计算的挑战。量子计算能够破解那些诸如RSA加密问题,这些问题具有严格的底层数学结构,它们由巧妙的技巧和理论构建。而哈希算法内部构造中并没有那么正式的结构。
量子计算机确实可以加快计算非结构化问题(如哈希)的速度,但是到最后,量子计算机发起攻击的方式依然是暴力破解,和传统的计算机并没有什么不同。
不论我们选择什么算法,显然我们都在驶向一个计算更高效的未来,我们必须尽全力挑选最好的工具并经得起时间的考验。
------
风险警示:蓝狐笔记所有文章都不构成投资推荐,投资有风险,投资应该考虑个人风险承受能力,建议对项目进行深入考察,慎重做好自己的投资决策。
导读:量子计算机确实可以加快计算非结构化问题(如哈希)的速度,但是到最后,量子计算机发起攻击的方式依然是暴力破解,和传统的计算机并没有什么不同。不论我们选择什么算法,显然我们都在驶向一个计算更高效的未来,我们必须尽全力挑选最好的工具并经得起时间的考验。
来源:学习区块链
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。