请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

量子计算机的威胁?区块链告诉你:不存在的

· 编辑:左先森 来源:白话区块链 2018-9-27 18:11 阅读 2606

区块链自诞生以来,其不可篡改性、去中心化的特点,让大家对它的前景充满了想象力。但是,也有一部分人提出了自己的质疑:区块链中使用的密码学相关技术是否安全?量子计算机普及之后,又会对它有怎样的影响?

今天这篇文章就来为大家揭开区块链技术的核心:哈希函数,以及它究竟有多安全。


 01 
什么是哈希函数

在“狂轰乱炸”了一年以后,相信大家都知道了什么是比特币,什么是区块链,也对区块链中的核心之一“哈希函数”有所听闻。

哈希函数是区块链的核心技术之一,正因为哈希函数的不可逆性,保证了区块链的安全。

哈希函数和很多其他的学术概念一样,说简单一两句话也能懂,说难了跟“无字天书”没啥区别。今天不跟大家走“知乎风”了,咱们接地气地来看一看,哈希函数究竟是什么。

一句话来总结,哈希函数的特点就是:失之毫厘,差之千里!

凡是函数,基本都可以写成以下这种形式:

f(x) = y

其中,x是输入,y是输出。哈希函数也不例外。

哈希函数的输入可以是任意信息或文件,但输出是固定的256位比特串。请一定牢记这一句定义,记住了这话,就抓住了哈希函数的精髓。

下面,举一个哈希函数的例子,语句I am HammerWang的哈希值:

hash("I am HammerWang") = 11000111000001010000001011111101110111011110001100011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

然后,我们只把其中的H换成小写的h

hash("I am hammerWang") = 100100110101110110110011101010100110100010001000010110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

通过对比,大家可以看到,即使输入改变了一个字母的大小写,输出结果也相差很大。

那么,如果我们知道了哈希函数的输出/结果,要倒推输出,可以怎么做呢?

答案就是,除了猜,没有更好的办法!

注:“猜”的意思是,随机猜测输入,然后检测输出结果是否与已知的结果相符。所以,很容易就可以推算出,如果要猜出哈希函数的正确结果,我们大概平均要猜测2^256次(2的256次方)。

这里补充一下哈希函数在区块链中主要在哪些关键处被使用:

  • 签名 :保证个人账户安全;

  • 区块头哈希值: 保证了整个区块链系统的不可篡改性;

从以上两点,我们可以看出,无论从整个系统还是用户自身的角度出发,哈希函数都是至关重要的一个函数。一旦这个函数被攻克,那么整个区块链的安全岌岌可危。

很多人或许会很关心区块链的安全性究竟如何,但又很难想象2^256(2的256次方)到底是怎样一个量级?下面,我们就介绍本文最令人激动的部分:2^256到底有多大?


 02 
2^256有多大?

曾经看到这样一个故事:

有两个原始部落的酋长,他们就想说我们怎么找到一个很大的数字。于是,他们每个人说一个数字,看谁说的数字大。第一个酋长想了一会儿,说了一个数字”3”,第二个酋长想了半天,说你赢了!

如果让那个酋长想象1万亿有多大,他可能得会选择死亡。不过,这依然可能比我们想象2^256有多大,要容易得多。

为了更方便大家想象,我们先把2^256拆解成 (2^32)^8, 也就是:

2^32 * 2^32 * 2^32 * 2^32 * 2^32 * 2^32 * 2^32 * 2^32 

这样做的好处就是,2^32大概是一个我们可以想象的数字:

2^32≈40亿

这样我们就进一步可以把问题想象成:40亿连乘8次。

这是一个多大的数字呢?下面,我们将依次讲解每一个40亿:

1. 第一个40亿

大家都知道,现在深度学习之所以采用GPU,是因为GPU可以飞快地进行大量的并行计算。

所以,如果我们采用GPU来破解哈希值的输入,一个性能很好的GPU每秒大概可以算出接近10亿个哈希值。假设我们的电脑每秒都需要计算40亿次的话,大概需要“塞进去”4个(理想情况下)这样的GPU,这样的话:每台电脑的计算速度大概就是40亿次/秒。

2. 第二个40亿

现在,我们已经有了一台每秒可以计算40亿次的电脑。那么接下来,想象一下有40亿台装有这样GPU的电脑。

到这里大家可能要“懵逼”了,40亿台电脑又是什么鬼?完全想象不出啊。

虽然Google没有透露自己的集群数量,不过估计说,大概几百万台。现实生活中,绝大部分Google的电脑,性能都没有我们上面提到的“40亿次/秒”的电脑强。不过,我们姑且就算谷歌有这么强的实力吧,那么截至第二个40亿,差不多就相当于我们有:1000个这样“打了鸡血”的谷歌,我们暂时就把这个算力称为“千谷歌”吧。

3. 第三个40亿

2018年,全世界人口大约74亿,所以第三个40亿很简单,截至第三个40亿,我们就假设:全世界有一半多的人,每人人手一个“千谷歌”。

4. 第四个40亿

想必到这儿,有些人已经猜到了“第四个40亿”是什么——让我们想象有40亿个这样的地球。

作为参考,银河系大约有1000~4000亿颗恒星,所以截至第四个40亿,就相当于:银河系1%-4%的恒星会有一个地球,每一个地球上都有一半多的人人手一个“千谷歌”。

5. 第五个40亿

接着,想象有40亿个这样的银河系。这大概是“2^160次/秒”的算力了。让我们再给它一个称呼吧:亿万星系超级计算机。

6. 第六个40亿和第七个40亿

第六和第七个40亿,咱们就不在每秒的运算次数上继续扩展了。第六个40亿等于40亿秒:40亿秒 ≈ 126.8年。而126.8年的40亿倍,就是:5070亿年。

到了这里,5070亿年,这又是个难以想象的数字。那么我再给出一个参考数字:宇宙的年龄≈138.2亿年,所以5070亿年,约等于宇宙年龄的37倍。

到现在,我们就有了一个很酷炫的总结,即使我们有:

满载GPU电脑组成的千谷歌(1千个谷歌),并且地球上超过一半的人人手一个这样的千谷歌,银河系4%的恒星中都有一个这样的地球(40亿个地球),满负荷不断地猜上37倍的宇宙年龄的时间。

我们依然只有40亿分之一的概率(第八个40亿),可以猜到正确的输入值。

顺便提一句,目前比特币的哈希算力,把所有的矿工全部加在一起,每秒大概能猜测并检验500亿亿个哈希值。

这是个很大的数字吧。那么我要告诉你,这大概只相当于上面提到的“千谷歌”的1/3。

现实生活中,矿工们当然不会这么傻,使用这么贵的GPU来计算哈希值,而是用一种专门为计算哈希值而生的芯片ASIC来计算,它牺牲了其他的功能,别的都不会,就会计算哈希值,算力大概是GPU的1000倍。


 03 
课后题

为了让大家更加深刻地理解“2^256”的大小,大家可以自行百度量子计算机的算力大小,仿照上面的计算过程,计算出:如果我们全部使用量子计算机,要想破解哈希值的话,大概是一个怎样的难度?

如果你依然觉得量子计算机会对区块链造成威胁的话,没关系,通过算法调整,我们可以把256位改成512位啊!

来自: 白话区块链