详解哈希算法
Posted 沈阳四块科技
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解哈希算法相关的知识,希望对你有一定的参考价值。
当新人在学区块链技术的时候,都会听到哈希和哈希算法,这似乎是无处不在的安全性保证。
例如比特币或者以太坊这种运行去中心化网络和共识的机器,都会有上万个节点通过P2P连接,并且需要“无需可信”和可验证的效率。
这些系统需要将信息写入紧凑的格式,从而通过参与者进行保证安全和快速验证。
到处都会使用加密哈希,从密码存储到文件验证系统。使用确定性算法的基本原理,就是使用一个输入,并且每次都产生一个固定长度的字符串。也就是说,使用同样的输入总是会导致同样的输出。
确定性不仅对哈希很重要,而且可以改变输入的单个字符会产生完全不同的哈希。
哈希算法的问题是碰撞(collisions)的必然性。哈希是固定的字符串,意味着对于每个输入,不同的输入都会产生同样的输出。碰撞(collisions)是不好的。
这意味着如果有攻击者能够根据需求创建这种collisions,那么他就可以让欺诈文件或者数据看起来像正确的,合适的哈希,并且冒充合法。优质哈希功能的目标是让攻击者很难找到,获得输入数据的方法。
计算哈希不应该太简单,因为这会让对于攻击者来说,计算collisions也变得很容易。哈希算法需要对“预攻击”有抵抗性。也就是说,给定哈希,应该很难计算追溯确定性的步骤来重新产生由哈希创建的数值。
Given s= hash(x), finding x should be near impossible.
概括来看,“好的”哈希算法会有以下3种特性:
1、在输入中改变一个字符,应该会创建雪崩效应,从而导致完全不同的哈希。
2、很低的概率会产生collisions。
3、提高效率,但是不会牺牲collision的对抗性。
破散哈希:其中一个初始哈希算法标准是MD5哈希,这是被广泛用来进行文件整合验证,而且存储哈希密码在网页应用数据库。这个功能非常简单,因为输出是固定的,128个字符串对于每个输入,并且使用几轮微不足道的单向运算来计算其确定性输出。它的输出长度短,操作简单,使得MD5彻底易碎,被称为生日攻击。
以上是关于详解哈希算法的主要内容,如果未能解决你的问题,请参考以下文章