导读: 当新人在学区块链技术的时候,都会听到哈希和哈希算法,这似乎是无处不在的安全性保证。例如比特币或者以太坊这种运行去中心化网络和共识的机器,都会有上万个节点通过P2P连接,并且需要“无需可信”和可验证的效率。这些系统需要将信息写入紧凑的格式,从而通过参与者进行保证安全和快速验证。

来源 | 巴比特

比特币和以太坊主要的primitive是区块的notion,这是包含转账信息,时间戳和其他重要数据的数据结构。他们安全性的重要部件,就是能够压缩网络全部的状态信息,变成很短,并且标准的信息,在需要的时候可以进行有效验证,这就被称之为哈希。

到处都会使用加密哈希,从密码存储到文件验证系统。使用确定性算法的基本原理,就是使用一个输入,并且每次都产生一个固定长度的字符串。也就是说,使用同样的输入总是会导致同样的输出。

确定性不仅对哈希很重要,而且可以改变输入的单个字符会产生完全不同的哈希。

哈希算法的问题是碰撞(collisions)的必然性。哈希是固定的字符串,意味着对于每个输入,不同的输入都会产生同样的输出。碰撞(collisions)是不好的。这意味着如果有攻击者能够根据需求创建这种collisions,那么他就可以让欺诈文件或者数据看起来像正确的,合适的哈希,并且冒充合法。优质哈希功能的目标是让攻击者很难找到,获得输入数据的方法。

计算哈希不应该太简单,因为这会让对于攻击者来说,计算collisions也变得很容易。哈希算法需要对“预攻击”有抵抗性。也就是说,给定哈希,应该很难计算追溯确定性的步骤来重新产生由哈希创建的数值。

Given s= hash(x), finding x should be near impossible.

概括来看,“好的”哈希算法会有以下3种特性:

-在输入中改变一个字符,应该会创建雪崩效应,从而导致完全不同的哈希

-很低的概率会产生collisions

-提高效率,但是不会牺牲collision的对抗性

破散哈希

其中一个初始哈希算法标准是MD5哈希,这是被广泛用来进行文件整合验证,而且存储哈希密码在网页应用数据库。这个功能非常简单,因为输出是固定的,128个字符串对于每个输入,并且使用几轮微不足道的单向运算来计算其确定性输出。它的输出长度短,操作简单,使得MD5彻底易碎,被称为生日攻击。

“生日攻击”是什么?

我们曾经听过,如果你把23个人放在一个房间,就会有50%的概率,其中的2人会有同样的生日?将这个数字提升到70人在一个房间,就会有99.9%的概率。这就是我们所说的鸽巢原理,也就说如果把100个各自放到99个箱子,你就必须在1个盒子里面放2个鸽子。换句话说,固定的输出意味着collisions 可能会找到固定的排序。

其实,MD5对于collision的抵抗是很脆弱的,家庭使用的2.4GHz处理器就可以在几秒钟算出哈希collision。而且,对于现在网页的早期使用,还可以在网络上创建很多MD5的预图形,如果搜索哈希,就可以在谷歌上很容易找到。

哈希算法的多样化和革新

开始:SHA1 &SHA2

NAS被称为哈希算法标准的先驱,最初的想法是安全哈希算法或者SHA1,创建了160固定长度的输出。不幸地是,SHA1通过增加了输出长度,单向操作的数量,还有单向操作的复杂性,从而形成了MD5算法,但是这不会提供任何基础的提升,来对抗更有力量的机器来尝试不同的攻击。

我们怎么才能做得更好呢?

哈希算法的多样化和革新

进入SHA3时代

在2006年,国家标准和技术研究院提出了一个比赛,来找到SHA2的替代,这在本质上九不同,从而形成了标准。因此,SHA3作为现在所知的KECCAK哈希算法一部分,就这样诞生了。

尽管表面看起来是相同的,SHA3通过一个被称为海绵结构的机制,让内部变得非常不同,这使用了随机的排列来输入和输出数据,同时也为未来的输入提供了随机的来源,这会进入到哈希算法中。

SHA3维持了内部的状态并且有和输出相关的更多信息,这可以防止之前算法的限制。在2015年,通过NIST成为了标准。

哈希算法和工作量证明

当考虑到整合哈希算法到区块链协议中的时候,比特币使用了比较旧的SHA256算法,但是以太坊使用了修改后的SHA3算法,作为工作量证明的算法。选择工作量证明区块链的哈希功能是很重要的部分,但是计算的效率称为哈希。

比特币SHA256算法通过特定的硬件ASIC,进行有效计算。在矿池中,很多都是在ASIC上写入的算法,但是这也会使得整个协议往中心化计算发展。也就是说,工作量证明激励了有效计算机器来聚集成矿池,同时也增加了哈希力。或者一种机器可以计算每个时间间隔的哈希数量。

以太坊,使用的是被称为KECCAK256的改进SHA3。而且,以太坊的工作量证明算法,Dagger-Hashimoto意味着意味着内存难以计算硬件。

为什么比特币使用双重SHA256算法?

比特币通过SHA256算法,会有很有趣的方式来获得哈希数据,因为它会在协议中运行算法的2次迭代。需要注意地是,这并不是生日攻击的对策,因为很明显如果hash(x) = hash(y),那么hash(hash(x)) = hash(hash(y))。但是,双重SHA256算法是被使用来减轻长度扩展攻击。

本质上来说,这类攻击包括,恶意欺诈的人知道哈希输入的长度,可以用来欺骗哈希来开始内部状态的某个部分,通过附加一个私密字符串到哈希值。SHA256,是SHA2算法大家庭中的一个,逃离这个陷阱,比特币通过计算哈希两次来减轻它。

以太坊2.0和BLAKE算法

SHA3并不是来自2006年NIST哈希比赛的唯一突破。尽管SHA3获得胜利,称为BLAKE的算法获得第二。对于以太坊2.0分片技术的部署,更有效的哈希几乎是个特性要求,研究团队非常重视。BLAKE2b哈希算法,这是BLAKE的更新版本,在和KECCAK256算法相比的时候,它由于效率很高正在被广泛使用,同时也保证了很高的安全性。

BLAKE2b的计算速率实际上是比KECCAK在现代CPU上要快3倍。

哈希算法的未来

不论我们怎么做,我们只能(1)提高内部哈希操作的复杂性,或者(2)提高哈希输出的长度,希望攻击者的计算机不会足够快到能够有效地计算collision。

我们依赖于网络安全单向操作前图像的模糊性。也就是说,哈希算法的安全目标是让所有人尽可能困难地找到能够获得同样哈希输出的数值,尽管对于可能的collision,其数值是有限的。

未来有量子计算机了?哈希算法还安全吗?

根据现在的理解,答案是肯定的。哈希算法将经受量子计算机的考验。量子计算能够打破的东西,是严密的,用巧妙的技巧和理论建立的底层数学架构,例如RSA加密。另个方面来看,哈希算法在内部的框架中,有更少的形式结构。

量子计算机确实加快了计算的速度,例如哈希算法,但是最后,它们也会被利用来进行如同现在计算机的攻击。

不论我们为协议选择了什么算法,很清楚地是我们都处于有效计算的未来,而且我们必须要使用最好的方式来获得正确的工具,以及那些希望能经受时间考验的人。

来源 | 巴比特

推荐阅读

今日问题

用最通俗的语言解释一下什么是哈希算法?

打卡格式:打卡第n天,答:...

五分钟带你了解哈希算法相关推荐

  1. 的一致性哈希_五分钟看懂一致性哈希算法

    作者简介: 华哥 10年+后端开发工作经验, 主要分享:关于java体系的知识,如:java基础知识/数据结算/算法,Spring/MyBatis/Netty源码分析,高并发/高性能/分布式/微服务架 ...

  2. 5分钟带你理解一致性Hash算法

    转载自 5分钟带你理解一致性Hash算法 一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot s ...

  3. c++ map用法_Python专题——五分钟带你了解map、reduce和filter

    点击上方蓝字,和我一起学技术.今天是Python专题第6篇文章,给大家介绍的是Python当中三个非常神奇的方法:map.reduce和filter.不知道大家看到map和reduce的时候有没有什么 ...

  4. 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器

    前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...

  5. 干货:五分钟带你看懂NestedScrolling嵌套滑动机制

    Android NestedScrolling嵌套滑动机制 Android在发布5.0之后加入了嵌套滑动机制NestedScrolling,为嵌套滑动提供了更方便的处理方案.在此对嵌套滑动机制进行详细 ...

  6. 三分钟看懂一致性哈希算法

    一致性哈希算法,作为分布式计算的数据分配参考,比传统的取模,划段都好很多. 在电信计费中,可以作为多台消息接口机和在线计费主机的分配算法,根据session_id来分配,这样当计费主机动态伸缩的时候, ...

  7. 5分钟读懂一致性哈希算法原理

    目录 一.普通 hash 算法 (取模算法) 1.普通 hash算法 与 使用场景描述 2.普通 hash 算法的缺陷 二.一致性哈希算法 2.一致性 hash 算法的优点 3.hash 环的倾斜与虚 ...

  8. OpenCV开发笔记(五十九):红胖子8分钟带你深入了解分水岭算法(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

  9. C语言入门非常简单!神级程序员五分钟带你入门!这就是学习效率

    很多小伙伴都老是会碰到疑问,其实还是基础没打扎实,这些题如果你不看答案你能知道多少呢?如果还有很多不知道就证明基础没打扎实,如果你还在入门纠结,如果你还在苦恼怎么入门!小编有个建议,可以加小编弄的一个 ...

最新文章

  1. 通过三个直观步骤理解ROC曲线
  2. 推荐给大家看的设计书
  3. F5 network
  4. IDEA中SVN未提交代码,更新时有冲突接受其它怎么办
  5. vue 按钮多次点击重复提交数据
  6. hive求差集和交集
  7. 22. PE结构-PE详解之输入表(导入表)、屠龙刀W32Dasm(静态)、LordPE(动态)工具入门(查找dll、调用函数)
  8. 专业RAW图像处理软件Capture One Pro 22
  9. centos mpeg acc 解码器安装
  10. switch/case语句中,每个case后{}的意义
  11. SoapUI安装教程,亲测可用
  12. 港台服冒险岛枫之谷传统登录方式密码解密及自动登录方式
  13. python不定长参数_Python可变长参数
  14. 频域处理:傅里叶变换及小波变换
  15. 使用Eclipse编写Helloworld!并通过Eclipse中的插件Egit上传至gethub.
  16. DataQL之语法-万能查询执行步骤
  17. 卡通鱼(cartoon fish)
  18. 用react解决1px问题
  19. robocode 机器人编码
  20. SaaS-初识SaaS

热门文章

  1. 如何快速搭建智能人脸识别系统
  2. Java 最高均薪 19015 元! 9 月程序员工资出炉,你拖后腿了吗?
  3. 鸿蒙霸榜GitHub,从最初的Plan B到“取代Android”?
  4. 谷歌开源新模型EfficientNet,或成计算机视觉任务新基础
  5. 大数据的“平民化”、“流动化”、“商业化”推动企业升级与转型
  6. 用Python就可以给你的头像戴上圣诞帽,别@微信团队了!
  7. 推荐好用 Spring Boot 内置工具类
  8. Kafka 顺序消费方案
  9. SpringBoot+WebSocket实时监控异常
  10. 用了 3 年 Apollo,最后我选择了 Nacos,原因不多说了