提升一度浅析哈希算法
Posted 法币之子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了提升一度浅析哈希算法相关的知识,希望对你有一定的参考价值。
比特币挖矿其实就是不断修改区块头部的随机数,然后通过计算区块的哈希值,知道这个哈希值满足特定标准的过程。那么到底什么是哈希算法?我们今天就具体来讲讲。
在区块链世界里,我们常常听到这样的说法:“哈希一次”。我们来看看“哈希一次”究竟会发生什么。
我们拿30万字的《百年孤独》为例。“哈希一次”就是指通过哈希函数的算法,将这30万字压缩成几个字节的长度,具体长度则取决于不同的哈希算法。
这其中的30万字就是输入值,几个字节是输出值。通俗地理解,这种“压缩”的过程就是“哈希一次”,压缩而成的输出值被称为“哈希值”。
哈希算法是有损的,因此又叫散列算法。其最重要的特征在于不可逆推。也就是说你无法通过输出值反推出输入值是什么。
比如MD5可以将几乎任意大小的文件映射到一串16进制值上面,假如是可逆的话,那么以后再也不用去买硬盘了,一个U盘走天下。
再比如你在船上丢了一个水壶。你知道它就在那里,在那个无边无际的海底。但只要打捞成本远远高于货物价值,那么这只水壶就会一直呆在那。
哈希算法在压缩过程中,就已经损失了绝大部分的细节,通过短短的几个字节不可能反推出文件本身。甚至无从得知这是不是一个文件。这就是不可能通过输出值逆推出输入值的原因。
举个例子,你天天用的手机指纹识别技术就是运用了哈希的原理。
你的指腹上包含了大量皮肤凹凸纹路的信息,可以想象,手机在第一次采集你的指纹时,要完整记录这些信息,显然是一项不可能任务。所以手机采集指纹时,其实是通过“哈希一次”,将你的海量指纹信息压缩到了比较小的数据单位记录下来,你最终录入手机的指纹相当于压缩之后的哈希值。
通过“哈希一次”,很少的信息量就可以代表你的指纹,因为无法逆推,所以原始的完整信息也可以得到保护。
不过,这种哈希并不是完美的。现实世界中并不存在完全一样的两枚指纹,即使DNA相同的同卵双胞胎,也因为后天环境和发展的不同而使皮肤凹凸纹路不尽相同,每一点“凹凸”都可以视作一种主人专属的身份信息。
但因为哈希算法抛弃了绝大多数指纹的“凹凸”信息没有记录,所以存在着两个人录入手机的指纹ID完全一致的情况。
比如按照Apple公开的说法,指纹ID重合的概率达到了1/50000,也就是说,每50000人中有一个人可以解开你的手机指纹。听起来有点可怕对不对?但因为共有指纹ID的人之间偶然发生关联的概率极低,所以基本还是保证了现在指纹识别技术的可靠性。这种哈希值重合的情况,就被称为“碰撞”。
现在,让我们回到区块链的世界。区块链可以理解成环环相扣的数据链,每一个区块头都记录了上一个区块的摘要信息,也就是上一个区块的哈希值。只要原始数据稍微改动一点点,得到的哈希值就会完全不同。
哈希算法可以检验信息是否是相同的,这样的优势可以节省重复文件传送的时间。
除此之外,哈希算法还可以检验信息的拥有者是否真实。
比如,我们在一个网站注册一个账号,如果网站把密码保存起来,那这个网站不论有多安全,也会有被盗取的风险。但是如果用保存密码的哈希值代替保存密码,就没有这个风险了,因为哈希值加密过程是不不可逆的。
再者,哈希存取非常快。因为哈希是常数的时间复杂度啊,不管数据量是大还是小,只要用一个固定的算法算出哈希值就能直接找到结果。
举个例子:我这里有一万首歌。给你一首新的歌曲X,要求你确认这首歌是否在那一万首歌之内。
那么无疑,将一万首歌一个一个的比对肯定会非常慢。但如果存在一种方式,能将一万首歌的每首数据,浓缩到一个数字。如此就能知道歌曲X是否在那一万首歌中了。
所以一个最简单的哈希算法就是:让歌曲所占硬盘的字节数作为哈希码。这样的话,你可以让一万首歌按照大小顺序排列。当你想加入一首新的歌曲时,只要看看新歌的字节数是否和已有的一万首歌当中,某一首歌的字节数相同,就知道新歌是否在那原来的一万首歌之内了。
当然这个简单的哈希算法很容易出现两者同样大小的歌曲,这就是发生了碰撞。而好的哈希算法发生碰撞的几率非常小。
从理论上说,哈希值是可以被获得的,但是对应的用户密码很难获得。
假设一个网站被攻破,黑客获得了哈希值,但仅仅只有哈希值还不能登录网站,他还必须算出相应的账号密码。
计算密码的工作量是非常庞大且繁琐的,严格来讲,密码是有可能被破译的,但破译成本太大,被成功破译的几率很小,所以基本是不用担心密码泄露的。
当然,黑客们还可以采用一种物理方法,那就是猜密码。他可以随机一个一个的试密码,如果猜的密码算出的哈希值正好与真正的密码哈希值相同,那么就说明这个密码猜对了。
密码的长度越长,密码越复杂,就越难以猜正确。如果有一种方法能够提高猜中密码的可能,那么可以算是哈希算法被破解了。
比如说,例如原本猜中的概率是1/万亿,现在增加到了1/1000。如果每猜一个密码需要1秒,按照之前的概率猜,直到地球毁灭都可能没猜中,但后者只需要1小时就足够了。在这样的情况下,哈希算法就算是被破解啦。
好啦,看到这里你是不是对哈希算法有了初步的了解?大家也不要过于担心你的账户以及资产被黑的风险,因为哈希算法仅仅只是比特币的原理算法,还有其他算法一同作用于比特币的运行,因此就算破解了哈希算法也并不能盗取你的账户信息。
以上是关于提升一度浅析哈希算法的主要内容,如果未能解决你的问题,请参考以下文章