【区块链与密码学】第5-4讲:详解常用哈希函数(二)

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

【本课堂内容全部选编自PlatON首席密码学家、武汉大学国家网络安全学院教授、博士生导师何德彪教授的《区块链与密码学》授课讲义、教材及互联网,版权归属其原作者所有,如有侵权请立即与我们联系,我们将及时处理。】

5.4.1 Keccak算法简介

美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)于2007年公开征集SHA-3,要求:

能够直接替代SHA-2,这要求SHA--3必须也能够产生224,256,384,512比特的哈希值。

保持SHA-2的在线处理能力,这要求SHA-33必须能处理小的数据块(如512或1024比特)。

安全性:能够抵抗原像和碰撞攻击的能力,能够抵抗已有的或潜在的对于SHA-2的攻击。

效率:可在各种硬件平台上的实现,且是高效的和存储节省的。

灵活性:可设置可选参数以提供安全性与效率折中的选择,便于并行计算等。

2008年10月,有64个算法正式向NIST提交了方案,经过初步评价,共有51个算法进入第一轮评估,主要对算法的安全性、消耗、和实现特点等进行分析。

2009年7月24日宣布,其中14个算法通过第一轮评审进入第二轮;2010年12月9日宣布,其中5个算法(JH、Grstl、Blake、Keccak和Skein)通过第二轮评审进入第三轮。

2012年10月2日NIST公布了最终的优胜者,它就是由意法半导体公司的Guido Bertoai Bertoai、Jean Daemen Daemen、Gilles Van Assche Assche与恩智半导体公司的Micha Michaëël Peeters 联合设计的Keccak算法。

SHA-3成为NIST的新哈希函数标准算法(FIPS PUB 180--5),Keccak算法的分析与实现详见:https://keccak.team/index.html

SHA-3的结构仍属于Merkle提出的迭代型哈希函数结。最大的创新点是采用了一种被称为海绵结构的新的迭代结构.。海绵结构又称为海绵函数。

在海绵函数中,输入数据被分为固定长度的数据分组。每个分组逐次作为迭代的输入,同时上轮迭代的输出也反馈至下轮的迭代中,最终产生输出哈希值。

海绵函数允许输入长度和输出长度都可变,具有灵活的性,能够用于设计哈希函数(固定输出长度)、伪随机数发生器,以及其他密码函数。

5.4.2 Keccak算法描述

其输入数据没有长度限制,输出哈希值的比特长度分为:224,256,384,512。

符号与函数

Keccak算法使用以下符号与函数:

符号

r:比特率(比特 rate),其值为每个输入块的长度

c:容量(capacity),其长度为输出长度的两倍

b:向量的长度,b=r+c,而b的值依赖于指数I,即b=25×2I  

Keccak算法的参数定义

函数

Keccak算法用到了以下5个函数:θ(theta)、ρ(rho)、π(pi)、χ(chi)、ι(iota)

算法描述

Keccak算法对数据进行填充,然后迭代压缩生成哈希值。

填充

对数据填充的目的是使填充后的数据长度为r的整数倍.因为迭代压缩是对r位数据块进行的,如果数据的长度不是r的整数倍,最后一块数据将是短块,这将无法处理。

设消息m长度为l比特。首先将比特“1”添加到m的末尾,再添加k个“0”,其中,k是满足下式的最小非负整数:l+1+k=r-1modr;

然后再添加比特“1”添加到末尾. 填充后的消息m的比特长度一定为r的倍数。

以算法Keccak-256,信息“abc”为例显示补位的过程. a, b, c对应的ASCII码分别是97, 98, 99;于是原始信息的二进制编码为:01100001 01100010 01100011。此时r  = 1088。

① 补一个“1” :0110000101100010 01100011 1

② 补1062个“0”:

01100001 01100010 01100011 10000000 00000000 … 00000000

③ 补一个“1” ,得到1088比特的数据:

整体描述

Keccak算法采用海绵结构(Sponge Construction),在预处理(padding并分成大小相同的块)后,海绵结构主要分成两部分:

吸入阶段(Absorbing Phase):将块xi传入算法并处理。

挤出阶段(Squeezing Phase):产生一个固定长度的输出。

Keccak算法的整体结构如下图:

Keccak算法的整体运算示意图

吸入与挤出阶段

给定输入串x,首先对x做padding,使其长度能被r整除,将padding后分割成长度为r的块,即x=x0|| x1|| x2||...|| xt-1 。然后执行以下吸入阶段和挤出阶段:

1.初始化一个长度为r+c比特的全零向量。

2.输入块xi,将xi和向量的前r个比特做异或运算,然后输入到f函数中处理。

3.重复上一步,直至处理完x中的每个块。

4.输出长为r的块作为y0,并将向量输入到f函数中处理,输出y1,以此类推,得到的哈希序列即为y= y0||y1||y2||...||yu。在Keccak-224/256/384/512中,只需要在y0中取出前224/ 256/ 384/ 512位即可。

 Keccak算法的吸入阶段和挤出阶段示意图

压缩函数

压缩函数f是Keccak算法的核心,它包含nr轮。

nr的取值与我们之前计算b时用到的指数I (b=25×2I)有关,具体地,nr=12+2*I.Keccak-224/256/384/512中,取I=6,因此nr=24。

在每一轮中,要以此执行五步,即θ(theta)、ρ(rho)、π(pi)、χ(chi)、ι(iota)

在处理过程中,我们把b=1600个比特排列成一个5*5*w的三维数组,其中w=2I=64比特,如右图所示:

 Keccak算法的三维数组示意图

Keccak算法的压缩函数结构示意图

安全性与性能

安全性

可以抵御对哈希函数的所有现有攻击。

到目前为止,没有发现它有严重的安全弱点。

灵活性

可选参数配置,能够适应哈希函数的各种应用。

高效性

设计简单,软硬件实现方便.在效率方面,它是高效的。

尚未广泛应用,需要经过实践检验。

常用的Keccak算法就讲到这里啦,下节课我们将学习常用哈希函数SM3算法,敬请期待!


 

Keccak 算法详解 Keccak 是一种基于海绵结构(Sponge Construction)的密码哈希算法,由比利时密码学家团队设计,2012 年被美国 NIST 选为 SHA-3 标准的核心算法。对每行元素执行:s[x][y] = s[x][y] ^ ((~s[x+1][y]) & s[x+2][y])轮常数(RC [r])异或,RC [r] 由 LFSR 生成,每轮不同34轮常数(RC [r])异或,RC [r] 由 LFSR 生成,每轮不同。第 x 行的元素 y 移动到位置 (2x+3y) mod 5 阅读详情

相关推荐

美国第3代哈希散列算法之SHA3(Keccak)

(1)Keccak算法简介 Keccak算法是美国国家标准技术研究院(NIST)发起的SHA3竞赛的获胜算法,采用的是新型的海绵结构。根据摘要值长度的不同可以分为Keccak224、Keccak256、Keccak384、Keccak512共4个版本。 海绵结构的状态被分为两部分:第一部分长度为r比特,称为比特率(bitrate):第部分长度为c比特,称为填充数(capacity),因此海绵结构的状态大小为b=r+c。

HuangJinLong2的博客 1620

keccak:Keccak 的实现

凯卡克/SHA3 我自己的 Keccak 实现,源自 Markku-Junahi O. Saarinen 的,但具有常量正确性。 这也有一个“keccaksum”程序的工作实现。 就像 Saarinen 的 README 所说的那样,这段代码根本没有在汇编中进行优化,所以不要指望它像生产就绪的代码一样快速运行。 这只是为了让其他人可以获得稍微更“const正确”的代码段,它基本上Saarinen的版本做同样的事情。

区块链】深入理解椭圆曲线密码学(ECC)

椭圆曲线密码学(Elliptic Curve Cryptography,简称ECC)是现代公钥密码学的基石之一。它以其高效的计算性能和较短的密钥长度,在区块链、数字货币和信息安全领域扮演着关键角色。本文将深入探讨ECC的原理、应用及其在区块链中的重要性。a和b为常数判别式Δ = 4a³ + 27b² ≠ 0(确保曲线光滑)椭圆曲线密码学是现代密码学区块链技术的核心支柱。它完美地平衡了安全性和效率,为数字世界提供了坚实的密码学基础。随着技术的发展,ECC将继续演进,在更多领域发挥重要作用。

鑫宝的博客 1万+

Keccak简介

一 什么是Keccak Keccak是一种被选定为SHA-3标准的单向散列函数算法。 Keccak可以生成任意长度的散列值,但为了配合SHA-2的散列值长度,SHA-3标准中规定了SHA3-224、SHA3-256、SHA3-384、SHA3-512这4种版本。在输入数据的长度上限方面,SHA-1为2的64次方-1比特,SHA-2为2的128次方-1比特,而SHA-3则没有长度限制。 此为,...

实践求真知 1万+

现代密码学:Hash函数Keccak

Hash函数的核心在于设计压缩函数。可以证明,如果压缩函数具有抗碰撞能力,那么迭代Hash函数也具有抗碰撞能力。 2007年起,NIST开始向全球征集新的安全Hash算法SHA-3,最后的优胜者是Keccak。Keccak以及SHA-3在正式成为标准之前有很多不同程度的更改,我想这也是网上有关Keccak和SHA-3算法的资料都多多少少不太一致的原因。本文仅介绍Keccak-224/256/384...

ayang1986的专栏 8425

keccak算法及实现

前言现在社会中hash算法的应用越来越广泛,因为hash 算法可以用于保证文件不被篡改,可以保证消息正确有效,同时还可以做数字签名,在http协议的开发中,还可以验证某个文件是否被修改过以做到断点续传。而传统的hash函数受到的攻击也越来越多,攻击方法也越来越有效,旧的算法变得不安全,那么就要推行新的标准,而keccak作为SHA- 3算法中的最终的优胜者,当然是有他的优势所在的,所以这里将讨论ke

博客 1万+

区块链区块链密码学基础

密码学区块链技术的核心基石,没有现代密码学的支撑,区块链的去中心化、不可篡改等特性将无从谈起。本文将深入浅出地介绍区块链中的密码学基础知识。

鑫宝的博客 1万+

深入浅出 区块链密码学(学习笔记1.0)——哈希函数

关于哈希函数的知识点

m0_62829674的博客 1918

区块链哈希函数

武汉大学《区块链密码学》课件整理

weixin_62775913的博客 5532

解密区块链中的密码学

在这片文章中,我们总结了区块链会用到的一些密码学原语,那什么是密码学“原语”? 不同于操作系统的“原语”概念,(注:操作系统原语是操作系统或计算机网络用语范畴。是由若干条指令组成的,用于完成一定功能的一个过程,具有不可分割性。)密码学原语强调的是“动机”,可以简单理解为:你想做什么事情?比如“加密”、“签名”是个原语,“密钥交换”、“零知识证明”也是个原语。 位于第一层阶层的原语可能一共有十...

宽客在线的博客 6818

区块链密码学】第5-1哈希函数简史

【本课堂内容全部选编自PlatON首席密码学家、武汉大学国家网络安全学院教授、博士生导师何德彪教授的《区块链密码学》授课义、教材及互联网,版权归属其原作者所有,如有侵权请立即我们联系,我们将及时处理。】 5.1哈希函数的定义性质 点宽学园【区块链密码学】第五单元开课啦!这单元我们将学习哈希函数及其在区块链中的应用。 哈希函数的定义 哈希函数(Hash Function)是一个公开函数,用于将任意长的消息M映射为较短的、固定长度的一个值H(M),又称为散列函数、杂...

Digquant的博客 1242

区块链密码学】第2-3区块链基础技术大剖析之哈希函数

【本课堂内容全部选编自PlatON首席密码学家、武汉大学国家网络安全学院教授、博士生导师何德彪教授的《区块链密码学》授课义、教材及互联网,版权归属其原作者所有,如有侵权请立即我们联系,我们将及时处理。】 2.4.1 哈希函数 区块链作为一个诞生刚到十几年的技术,的确算是一个新兴的概念,但是它所用到的基础技术全是当前非常成熟的技术。可以说是一个技术的“结晶体“。 区块链的基础技术如哈希运算、数字签名、P2P网络、共识算法以及智能合约等,在区块链兴起之前,很多技术已经在各...

Digquant的博客 1595

区块链的数学基础:核心原理应用解析

区块链技术作为分布式账本系统,成功地解决了传统中心化系统中的信任问题。其背后隐藏着复杂而精妙的数学原理,包括密码学哈希函数、数字签名、椭圆曲线、零知识证明等。这些数学工具不仅为区块链提供了安全保障,也为智能合约和去中心化应用(DApps)的开发奠定了基础。本文将深入剖析区块链中的核心数学基础,帮助读者理解其工作原理实际应用。

fudaihb的博客 3567

区块链探秘:从基础到深度,全面解读区块链技术应用

区块链探秘:从基础到深度,全面解读区块链技术应用

qq_51447436的博客 3万+

密码学区块链技术中的应用

通过哈希函数,确保了数据的完整性和不可篡改性,为区块链的信任机制提供了坚实的基础。综上所述,密码学区块链技术中的重要性不可替代,已取得的应用成果令人瞩目,但为了应对不断变化的技术环境和应用需求,进一步的研究和发展是必不可少的。此外,区块链技术的广泛应用和不断拓展的场景对密码学的性能和效率提出了更高的要求。由于哈希函数的特性,即使区块中的数据有极微小的改变,所生成的哈希值也会完全不同。虽然加密能保护我们的交易信息不被别人看到,可要是加密的办法不够好,或者加密的时候出了错,交易信息可能会被泄露。

2401_85754355的博客 2930

区块链学习———密码学原理

本文介绍了区块链使用到的密码学原理,主要使用到了哈希函数和数字签名。

qq_43589852的博客 2848

区块链学习笔记】1:比特币中的密码学原理

跟着肖臻老师公开课学习一下区块链技术。

大桔骑士的学习笔记 5669

03 区块链密码学

Hash,一般翻译做散列、杂凑,或者音译为哈希,是把任意长度的输入通过哈希算法变换成固定长度的输出,该输出就是散列值。能够实现该功能的算法叫做哈希算法,能够实现哈希算法要求的函数叫做哈希函数哈希函数就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。区块链地址是指区块链网络上的标识,经典的地址生成算法由公私钥产生,具有安全性和隐私性。地址可以绑定数字资产,或者链上有价值的数据。

FrancyZhou的博客 885

区块链知识个人总结(一)哈希函数密码学

密码学中的哈希函数 三个性质 1.collision resistance 个人理解为抵抗哈希碰撞的性质,即能将人为制造哈希碰撞的效率降至非常低下,或者说不可能发生有效的人为制造哈希碰撞的性质。 理解a:这个算法无法被证明。 只可以在长时间的实践中证实。因为源文件可以是真正意义上的无数种,而哈希之后得到的哈希值一定会有穷尽。所以单纯的数学方法无法证明 理解b:这个算法不一定一直有效:。 比如说以前...

weixin_45067603的博客 2161
上一篇: 【区块链与密码学】第5-3讲:详解常用哈希函数(一)
下一篇: 【区块链与密码学】第5-5讲:详解常用哈希函数(三)
Dig Quant
博客等级 码龄6年 124粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值