0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

区块链科普:哈希函数算法

如意 来源:以太坊爱好者 作者:zhiachong 2020-06-28 09:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

哈希值和哈希函数的概念是初次入门区块链的人常听到的两个关键词,而且似乎对安全性来说特别关键。(实际上也确实是。)对于像比特币和以太坊这样由成千上万的节点通过 P2P 方法组成的去中心化网络来说,“免信任性” 和验证效率无疑是关键。也就是说,这些系统需要找到方法把信息编码成紧凑的形式,同时让参与者能够安全快速地进行验证。

比特币和以太坊网络所处理的主要内容叫做“区块”,指的是由交易、时间戳和其他重要元数据所组成的数据结构。比特币和以太坊网络的安全性的关键一环是:它能将表达网络全局状态的大块信息压缩成一个简短的消息。在有需要之时,我们可以高效地验证这个消息的真实性。这个过程就是用哈希函数来完成的,而得到的结果(消息)就是哈希值。

即使只更改输入中的一个字符,最后得出的哈希值也会完全不同

密码学哈希广泛应用于口令存储和文件验证系统。简单来说,密码学哈希函数是一种确定性的算法,不论输入什么值,都能得到一个固定长度的字符串。也就是说,同一个输入值始终对应同一个输出值。

对哈希函数来说,重要的不仅是确定性(还有结果的随机性):即使只更改输入中的一个比特位,也会导致最终得到的哈希值截然不同。

哈希算法有一个无可回避的问题叫碰撞可能性。因为哈希值是固定长度的字符串,同一个输出哈希值有可能对应多个输入。碰撞会造成很严重的后果。如果有人能够按需要发起碰撞攻击,他就可以用恰当的哈希值将恶意文件或数据伪装成合法的、能够通过验证的文件。好的哈希函数的设计目标是让攻击者极难找到方法来找出对应同一个哈希的不同输入。

哈希计算的效率不应过高,以免让攻击者可以更简单地人为计算出碰撞。哈希算法必须能够抵御“原像攻击(pre-image attack)”。也就是说,对于特定哈希值,攻击者很难通过确定性计算步骤倒推出输入值(即,原像)。

假设 s = hash(x),倒推 x 应该是近乎不可能的。

总的来说,“好的” 哈希算法需要具备以下 3 个特性:

更改输入中的一个比特位会产生雪崩效应,导致最后得出的哈希值截然不同

出现哈希碰撞的概率非常低

在无需牺牲抗碰撞性的前提下计算效率过得去

破解哈希算法

哈希算法的初始标准之一是 MD5 哈希。MD5 哈希广泛应用于文件完整性验证(校验和),以及在网络应用数据库中存储经过哈希计算的账号口令。MD5 的功能非常简单,因为它会将每个输入转换成一个固定的 128 位字符串输出,并通过多轮简单的单向操作来计算确定性输出。由于输出值长度较短,操作又较为简单,MD5 很容易被破解,一种常见的攻击方法叫生日攻击。

什么是生日攻击?你有没有听说过这样一个事实?如果你将 23 个人放到一个房间里,其中两个人生日相同的概率为 50% 。如果将 70 个人放到一个房间里,其中两个人生日相同的概率高达 99.9% 。这就是我们所说的鸽笼原理(pigeonhole principle),即将 100 只鸽子装进 99 个鸽笼,必然有两只鸽子分享同一个鸽笼。也就是说,固定长度的输出意味着所有输入输出组合中一定存在碰撞。

笼子不够时,鸽子就会凑对

事实上,MD5 的抗碰撞性太差,以至于一台家用 2.4 GHz 奔腾处理器都能在几秒内计算出哈希碰撞。此外,由于 MD5 在互联网早期阶段得到了广泛应用,网络上有大量 MD5 原像遭到泄漏,通过谷歌搜索它们的哈希值就能找到。

哈希算法的多样性发展

NSA (没错,就是美国国家安全保障局)是哈希算法标准的先驱。安全哈希算法(Secure Hashing Algorithm,SHA1)是最早提出的标准,将输出值的长度固定在 160 位。遗憾的是,SHA1 只是在 MD5 的基础上增加了输出值长度、单向操作的次数和复杂度,但是并没有作出能够抵御更强大机器攻击的根本性改进。

我们如何才能做得更好?

在 2006 年,美国国家标准技术研究所(NIST)举办了一场竞赛,旨在找到一个本质上不同于 SHA2 的替代标准。因此,SHA3 应运而生,它是 KECCAK 哈希算法的一种方案。

虽然 SHA 3 在名称上与 SHA1 和 SHA2 一脉相承,但是在本质上差异很大,因为它采用了一种名为海绵结构(sponge construct)的机制。该机制使用随机排列来吸收并输出数据,同时为将来用于哈希算法的输入值提供随机性。

KECCAK256 海绵结构是如何进行输入操作的

SHA3 的内部状态相较于输出值拥有更多信息,突破了以往算法的局限性。NIST 于 2015 年正式认可了 SHA3 标准。

哈希计算和工作量证明

就整合进区块链协议的哈希算法而言,比较早的比特币选择了 SHA256 ,而以太坊采用了改进后的 SHA3 (KECCAK256)作为工作量证明算法。对于采用工作量证明的区块链来说,选择哈希函数的一大重要标准是哈希运算效率。

使用一类名为专用集成电路ASIC)的硬件,我们可以大幅提高比特币 SHA256 算法的哈希运算的效率。有很多文章已经阐述了矿池是如何利用 ASIC 的,以及 ASIC 是如何让协议趋向于计算中心化的。也就是说,工作量证明会激励计算效率较高的机器聚集成矿池,从而形成较大的哈希算力(算力大小的衡量标准就是矿机在每个时间间隔内可以完成多少次哈希运算)。

以太坊选择的是改进后的 SHA3 算法(叫做 KECCAK256 )。此外,以太坊的工作量证明算法 Dagger-Hashimoto 被设计成了内存密集型模式,计算硬件需要加大内存才能提高计算效率。

那么,为什么比特币采用双重 SHA256 ?有趣的是,比特币协议(的工作量证明)需要重复运行两遍 SHA256 算法。请注意,这不是为了抵御生日攻击,毕竟在 hash(x) = hash(y) 的情况下,hash(hash(x)) = hash(hash(y)) 。双重 SHA256 旨在抵御长度扩展攻击。

从本质上来说,所谓的长度扩展攻击,指的是如果恶意攻击者知道了某个哈希输入的长度,就可以在哈希值上添加一个秘密的字符串、欺骗哈希函数从其内部状态的一个特定部分开始计算。作为 SHA2 算法家族的一员,SHA256 也存在这一缺陷。因此,比特币采取执行两遍哈希计算的方式来解决这一缺陷。

SHA3 并非哈希算法竞赛取得的唯一突破。虽然最终胜出的是 SHA3 ,但是 BLAKE 算法紧随其后,位居第二。对于以太坊 2.0 的分片实现来说,更高效的哈希算法可以说是一项功能性要求,研究团队对此非常重视。BLAKE2b 哈希算法是 BLAKE 算法的高度升级版本。与 KECCAK256 相比,BLAKE2b 哈希算法在保持高度安全性的同时,在提升效率方面也进行了深入探索。

使用一台现代 CPU 计算 BLAKE2b 的速度比计算 KECCAK 快了 3 倍。

哈希算法的前景展望

这么看来,无论我们做了什么,无非就是(1)增加内部哈希操作的复杂度,或者(2)增加哈希输出值的长度,让攻击者的计算机无法足够快地有效计算出碰撞。

我们依靠单向操作的原像模糊性来保护网络的安全性。也就是说,哈希算法的安全性目标是在有无限多可能的冲突的情况下,让找出哈希碰撞的难度尽可能高。

如果量子计算时代到来,哈希算法依然安全吗?

就目前来看,答案是肯定的,哈希算法将经受时间的考验,抵御量子计算。量子计算能够解决的是那些严格按照某些小技巧或 RSA 加密理论打造底层结构的数学问题。另一方面,哈希算法的内部构造没那么形式化。

量子计算机确实能够提高哈希等非结构化问题的计算速度,但它们最终还是会像如今的计算机一样采取暴力破解手段。

无论我们为协议选择了哪种算法,我们显然都在迈向计算高效化的未来。为此,我们必须慎重选择最合适的工具,使之经受住时间的检验。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 哈希函数
    +关注

    关注

    0

    文章

    43

    浏览量

    9775
  • 区块链
    +关注

    关注

    112

    文章

    15579

    浏览量

    111290
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    OPC UA 服务端用户认证的底层逻辑:哈希与加盐应用详解

    用户信息至关重要。本文不涉及复杂的代码实现,而是通过分析典型服务端配置文件中的相关机制,阐述哈希算法(SHA-256)与加盐(Salt)机制在OPCUA登录环节的具
    的头像 发表于 01-15 17:29 379次阅读
    OPC UA 服务端用户认证的底层逻辑:<b class='flag-5'>哈希</b>与加盐应用详解

    C语言增量式PID的通用算法

    C语言增量式PID通用算法控制算法中PID使用的非常广泛,但是在网上找代码的时候发现好多代码都不够通用,需要自己改好多东西,而且当一个项目需要使用多个PID控制器时也颇为麻烦,这里设计一个通用的增量
    发表于 01-14 08:28

    ElfBoard嵌入式教育科普|Linux系统I/O接口:Open函数详解

    1.函数概述open()是Linux/Unix内核提供的底层系统调用,核心功能是打开或创建文件。成功调用后,内核会返回一个整型的文件描述符作为该文件的句柄,后续的所有读写操作都基于此描述符进行。调用
    的头像 发表于 12-29 11:41 1395次阅读
    ElfBoard嵌入式教育<b class='flag-5'>科普</b>|Linux系统I/O接口:Open<b class='flag-5'>函数</b>详解

    Molex OTS零哈希电缆组件技术解析与应用指南

    Molex现成(OTS)零哈希电缆组件是标准分立式电线电缆组件,设计用于应对电子设备日益缩小的挑战。这些电缆组件提供节省空间的薄型解决方案,具有创新的双点接触特性,有2、4、6和8电路尺寸可供选择
    的头像 发表于 11-17 16:44 956次阅读

    MD5信息摘要算法实现一(基于蜂鸟E203协处理器)

    命名为“Q”,则message_var=Q[(32*i):(32*i+31)]。 4、哈希运算(Hash Operation) 此部分为MD5算法的核心。MD5有4组主循环,每组的主循环需要进行16轮
    发表于 10-30 07:18

    Camellia算法的实现(基于开源蜂鸟E203协处理器)

    的输入。Camellia算法一共要用到四个不同的S盒,S盒的定义已在如上公式中给出。S盒处理后的数据还需要输出给P变换作为处理,P变换也为相应的异或运算。最后得出,F函数的输出结果。 上图所示为
    发表于 10-30 07:04

    SM4算法原理及分享1

    SM4算法是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(32位)为单位进行加密运算,每一次迭代运算均
    发表于 10-30 06:54

    TCORDIC算法实现正余弦函数

    TCORDIC算法,由低延迟CORDIC算法和Taylor展开组成。Taylor展开计算作为CORDIC算法的补充,能够结合CORDIC算法和Taylor展开方式来计算浮点正余弦
    发表于 10-29 06:30

    查找表与多项式近似算法实现初等函数

    逼近的定义区间长度及选取系数的方式决定。 每个子间隔的系数存储在查找表中。用Xm来选择系数,所以方程变成: 使用查找表与多项式近似结合算法实现对数函数,如下图所示为指数函数的流水线结构: 下图为仿真结果:
    发表于 10-28 08:10

    gcc工具无法汇编硬件浮点指令fsqrt问题

    团队在项目推进过程中发现,Linux环境下,math库中的sqrt()函数无论是在浮点数的gcc工具中还是整数的gcc工具中,综合的结果都是以整数指令来模拟。 若果想要进一步地节约时间,我们
    发表于 10-20 06:19

    北京科技创新促进中心文科与科普部李守勇部长一行莅临昱栎技术科普基地实地踏勘

    10月14日,北京科技创新促进中心文科与科普部部长李守勇一行莅临北京昱栎技术有限公司(以下简称“昱栎技术”),围绕科普基地建设运营开展实地踏勘与专题座谈。昱栎技术董事长栗旭锦全程陪同,通过“实景参观
    的头像 发表于 10-16 09:48 1073次阅读
    北京科技创新促进中心文科与<b class='flag-5'>科普</b>部李守勇部长一行莅临昱栎技术<b class='flag-5'>科普</b>基地实地踏勘

    新思科技青少年芯片科普公开课武汉开讲

    8月10日,由新思科技芯片设计行业顶尖专家团队与中学教师联合开发的青少年芯片科普公开课,在武汉成功开讲!
    的头像 发表于 08-25 15:36 1058次阅读

    科普|通信射频接头学习

    科普|通信射频接头学习
    的头像 发表于 08-19 17:09 1108次阅读
    <b class='flag-5'>科普</b>|通信射频接头学习

    哈希极化到零拥塞:主动路径规划在RoCE网络中的负载均衡实践

    智算集群对网络性能,特别是高吞吐、低延迟和无损特性有着严苛要求,RoCE因此被广泛应用。然而,在主流Clos组网架构下,传统的ECMP路由机制存在天然的局限性,容易引发哈希极化问题,成为制约
    的头像 发表于 07-21 17:27 2197次阅读
    从<b class='flag-5'>哈希</b>极化到零拥塞:主动路径规划在RoCE网络中的负载均衡实践

    循环经济 2.0:海翔科技如何用区块技术追溯二手设备全生命周期

    摘要:在循环经济 2.0 时代,资源高效利用与透明化管理成为核心诉求。海翔科技创新性地将区块技术应用于二手半导体设备全生命周期追溯,为行业发展提供新范式。本文通过分析循环经济 2.0 背景下的行业
    的头像 发表于 06-27 09:58 1253次阅读
    循环经济 2.0:海翔科技如何用<b class='flag-5'>区块</b><b class='flag-5'>链</b>技术追溯二手设备全生命周期