“哈希运算是人类历史上第一次,全球性的,巨大的成本,争先恐后地寻找美学意义上的物理运算的结果”。
说到区块链,大家可以稍微聊聊,然后再详细询问,虽然不是更懂。说到挖矿,你到底在挖什么?估计很少有人能解释清楚。我会尽量详细。
我们常说区块链可以防篡改,那么它是如何防篡改的呢?主要看我们明天要讲的HASH;我们经常说挖矿,虽然挖矿也是HASH,系统指定的HASH,“好看的HASH”。我们也曾在市场上以隐喻的方式听说过HASH,比如:扑克、筛子等。基本逻辑是一样的,要找到系统指定的扑克牌类型才能获胜,或者投出指定的点数将赢得比赛。
HASH 到底是什么?
HASH 是一种算法,你给它一串数字,它就会返回一串数字。你给它的东西叫做“输入”,它给你的东西叫做“输出”。也就是数据输出到HASH函数,HASH函数输出一串数字。
我们以最常见的HASH算法MD5为例。 (其实HASH算法有很多,最著名的就是MD5)。例如:MD5("")=在前面的例子中,""是输入hash工具,前面的字符串是输出。又如:MD5("")=函数有个重要的特点,不管输入多长,输出都是固定宽度。
MD5输入粗细不限,输出为128位二进制补码,即16字节16的补码,如上面第一个计数器例子,c4是第一个字节,代表8位二进制补码,最后3e也是一个字节,代表8位二进制补码
HASH还有一个明显的特点:如果输出稍有不同,结果就会完全不同。
HSAH不选择输入,无论是字符串,还是文件,无论是文本、图像还是视频,只要是数字,都被视为二进制补码输入。
同时,输入的视频也是一样的结果。
哪个是系统指定的散列hash工具,哪个是“一个很长的散列”。
我们以比特币为例,它是一个有很多位大于0的HASH,HASH输出分布比较均匀。基本上,如果你对任意16个不同的输入进行hash,第一位为0的概率为1/2,前两位为0的概率为1/4,前3位的概率为1/8 0,前 4 位数字为 0 的概率为 1/16。
我们做个实验看看对不对,随便给下面的输入:1、MD5("")=
2、MD5("")=
3、MD5("")=
4、MD5("sr&&fvbgt")=
5、MD5("区块链技术")=
6、MD5(红岸科技)=
7、MD5(北京宏安科技)=
8、MD5(IPFS 和 FIL)=
9、MD5()=
10、MD5(网络3.0)=
11、MD5(区块链技术革命u)=
12、MD5(活动开始)=
13、MD5()=
14、MD5()=
15、MD5()=
16、MD5()=
后面会提到,MD5输出是128位,用16的补码显示,比如第一个输出的第一个字节是“c7”,第二个输出的第一个字节是“9a””, 2的补码表示是“”,“”。这样里面的16个HASH输出是(省略号表示前面的位被省略):
c7…………:…………9a…………:…………b1…………:…………24…………:…………64…………:…… ……80…………:…………cd…………:…………7c…………:…………1c…………:………………………… ....:……..
5e…………:…………5d…………:…………55…………………………18…………:…………0a…………:………… …94…………:…………
我们可以统计前1、2、3、4位为0的hash的个数,概率是不是和上面说的差不多?前4位都是0,在这16位上可以说是最好看的,也是最接近系统规定的。那么,需要多少次才能得到一个前 20 位全为 0 的 HASH? 2^20幂,2^20=1024*1024=,难度可想而知,所以需要大量的算力来支持。
那么我们所说的“好看的 HASH 是什么样的”是什么意思呢?
HASH算法有很多,比如BTC使用的MD5、SHA-1、SHA-2、和SHA-256,都是比较主流的算法。
它们有两个特点:
1、对于任意两个不同的输入,都会形成不同的输出。 (这叫防碰撞)
这个HASH算法的输出必须有一定的宽度。如果宽度不够,就会出现重复。例如,假设一个 HASH 算法只有 1 个输出,输出要么是 0,要么是 1,运行两三遍后,有没有可能找到不同输入的相同输出?如果输出只有两位,那么这个HASH的输出只有4种可能,00、01、10、11,是否可以通过运行<@找到四、 五次?不同的输入有相同的输出!
其次,要保证HASH值非常随机,均匀地落在整个输出空间上。而如果输入稍有不同,输出就会完全不同。这样ID就有了治疗效果,HASH就像是每个输入的“指纹”。例如,如果您对 1000 万个不同的文件进行哈希处理,并且每个文件都有一个唯一的 HASH 值,那么您可以将其用作文件的 ID。每个 ID 指的是一个唯一的文件。如果再次遇到相同的ID,则表示遇到了相同的文件。
2、前向估计很容易,但是很难从输出中反转输入,只能靠蛮力猜测。 (这叫不可逆)
那么,全世界的黑客可能有能力通过破解 MD5 来获取我的公钥吗?答案是:根据目前的能力,不会。黑客只能通过不断尝试详尽地列出可能的组合,估计它们的 MD5 值,并希望在三天内计算出相同的 MD5 值来做到这一点。但这些猛烈的猜测需要很长时间。 (粗略来说,以目前的技术,如果全世界的黑客联手,拥有和全球比特币挖矿一样多的算力,至少需要5年时间)。
你用这种方式挖掘什么?我们以从比特币中挖出来的一个HASH为例:72用16的补码表示,所以虽然每个0在二进制补码中都是0000,所以前面的HASH是19*4=76的二进制补码。 0的补码!这个 HASH 是一个块的 HASH。矿工做了多少次 HASH 操作才能使上面的 76 个 2 的补码为 0。它在 HASH 中看起来不错吗?其中一个出现平均需要 2^76 次。你说你做过多少次?他们这么费力地挖这个,他们要做什么?这个区块奖励的数字 BTC。挖出这个区块的矿工(可能很多人一起挖)得到了这里提到的6. BTC,相信你应该对HASH有更全面的了解!