区块链中的数学知识之HASH算法

哈希算法(hash)

任意长度的二进制值(明文) 映射为较短的固定长度的二进制值(hash值) ,并且不同的明文很难映射为相同的hash值。

例如:计算一段话“csdn网站真是好好啊”md5 hash 值为:

    10012549883a2ef85dc81b90fb606046 #这个值是假设,还没有论证过


哈希函数具有输入敏感特性。也就是说,如果输入数据发生微小改变——比如改一个字符,那么输出将发生很大的变化。这带来两点好处:第一,你无法通过输出的变化,来推测输入发生了什么变化。第二,保存哈希值可以验证数据是否被篡改。一般的,hash算法都是算力敏感型,意味着计算资源是瓶颈,主频越高的CPU进行 hash 的速度也越快。也有一些hash算法不是算力敏感的,例如scrypt,需要大量的内存资源,节点不能通过简单的增加更多 CPU 来获得 hash 性能的提升。

注:MD5是一个经典的hash算法,其和SHA-1算法都已被证明安全性不足应用于商业场景。为了提高安全性,NIST NSA 还设计出了 SHA-224SHA-256SHA-384,和 SHA-512算法(统称为SHA-2) ,跟SHA-1算法原理类似。比特币使用的是 SHA256。

所以一个优秀的hash算法,需要冲突避免,即很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

例如:文字"version1" 和"version2" 进行MD5 HASH后二者的MD5值就天差地别了

"version1"的MD5 HASH值为 "966634ebf2fc135707d6753692bf4b1e";

"version2"的MD5 HASH值为 "2e0e95285f08a07dea17e7ee111b21c8";

但是还有一种可能

1、"0e306561559aa787d00bc6f70bbdfe3404cf03659e704f8534c00ffb659c4c8740cc94

2feb2da115a3f4155cbb8607497386656d7d1f34a42059d78f5a8dd1ef"

2、"0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc94

2feb2da115a3f415dcbb8607497386656d7d1f34a42059d78f5a8dd1ef"

上面这两段文字只有红色加大的数字不同,但是MD5 HASH后的值如下:

1、cee9a457e790cf20d4bdaa6d69f01e41

2、cee9a457e790cf20d4bdaa6d69f01e41

这个就是碰撞案例,像这种案例很多,现在的计算机只要数秒就能找到MD5的一个碰撞案例,因此,MD5在数年前就已经不被推荐作为应用中的散列算法方案,取代它的是SHA家族算法,也就是安全散列算法(Secure Hash Algorithm,缩写为SHA)。

安全散列算法与MD5算法本质上的算法是类似的,但安全性要领先很多——这种领先型更多的表现在碰撞攻击的时间开销更大,当然相对应的计算时间也会慢一点。SHA家族算法的种类很多,有SHA0、SHA1、SHA256、SHA384等等。其中SHA1是现在用途最广泛的一种算法,但是在2017年2月破灭了,谷歌宣布实现了 SHA-1 碰撞。所以对于一些大的商业机构来说, MD5 和 SHA1 已经不够安全,推荐至少使用 SHA2-256 算法。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值