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

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

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

5.3 SHA-256算法简介

目前常用的哈希函数有三种,分别为SHA-256算法、Keccak算法、SM3算法,今天我们对SHA-256算法进行详细讲解。

概况

SHA系列标准哈希函数是由美国标准与技术研究所(National Institute of Standards and Technology,NIST)组织制定的。

  • 1993年公布了SHA-0 (FIPS PUB 180),后发现不安全。

  • 1995年公布了SHA-1(FIPS PUB 180--1)。

  • 2002年公布了SHA-2( FIPS PUB 180--2),包括3种算法:SHA-256, SHA-384, SHA-512。

  • 2005年王小云院士给出一种攻击SHA-1的方法,用269操作找到一个强碰撞,以前认为是280。

  • 2017年2月23日,谷歌宣布找到SHA-1碰撞的算法,需要耗费110块GPU一年的运算量。

SHA-256算法描述

  • 输入数据长度为l比特,1≤l≤264-1

  • 输出哈希值的长度为256比特

(1) 常量与函数 SHA-256算法使用以下常数与函数:

① 常量

初始值IV为: 0x6a09e667 bb67ae85 3c6ef372 a54ff53a 510e527f 9b05688c 1f83d9ab 5be0cd19 这些初值是对自然数中前8个质数(2,3,5,7,11,13,17,19)的平方根的小数部分取前32比特而来。 举个例子来说,√2小数部分约: 0.414213562373095048 而0.414213562373095048 ≈ 6∗16−1 +a∗16−2+0∗16−3 +9∗16−4 +... 于是,质数2的平方根的小数部分取前32比特就对应出0x6a09e667。 另外,SHA-256还用到了64个常数:K0, K1, …,K63 =

和8个初始值类似,这些常量是对自然数中前64个质数(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97…)的立方根的小数部分取前32比特而来。

② 函数

SHA-256用到了以下函数

其中:∧表示按位“与”;¬ 表示按位“补”;⊕表示按位“异或”; ROTRi(x)表示循环右移i比特;SHRi(x)表示右移i比特;

(2) 算法描述

① 填充

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

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

  • 然后再添加一个64位比特串,该比特串是长度l的二进制表示。填充后的消息m的比特长度一定为512的倍数。

  • 以信息“abc”为例显示补位的过程。a, b, c对应的ASCII码分别是97, 98, 99;于是原始信息的二进制编码为:01100001 01100010 01100011。

补一个“1” :0110000101100010 01100011 1 补423个“0”:01100001 01100010 01100011 10000000 00000000 … 00000000 补比特长度24 (64位表示),得到512比特的数据:

② 消息分块

将填充后的消息m′按512比特分成n组: m′= M(0)||M(1)|| · · · ||M(n-1) 其中:n = (l+k+65)/512

SHA256算法的消息分块过程示意图

③ 消息扩展

对一个消息分组M(t) 迭代压缩之前,首先进行消息扩展:将16个字的消息分组M t 扩展生成如下的64个字,供压缩函数使用W0,W1,…,W63,消息扩展把原消息位打乱,隐蔽原消息位之间的关联,增强了安全性。 消息扩展的步骤如下:

④ 压缩函数

压缩函数是SHA-256的核心,令a, b, c, d, e, f, g, h为字寄存器,T1, T2为中间变量。 压缩函数:V(t+1)= CF(V(t),M(t)), 0 ≤ t ≤n -1。 压缩函数CF的压缩处理:内层迭代 ① FOR t = 0 TO 63 ② CF= F(T1 , T2 , a, b, c, d, e, f, g, h , M(t)) ③ END FOR

​SHA-256算法的压缩函数工作流程示意图

⑤ 基本压缩函数

基本压缩函数的流程如右边公式所述。 说明:

  • a, b, c, d, e, f, g, h为字寄存器,T1, T2为中间变量。

  • +运算为mod 232算术加运算。

  • 字的存储为大端(big-endian)格式。即,左边为高有效位,右边为低有效位。

SHA-256算法的基本压缩函数示意图

⑥ SHA-256工作全过程

SHA-256算法的基本压缩函数示意图

安全性

  • 专业机构设计,经过充分测试和论证

  • 安全性可满足应用的安全需求

  • 学者已开展对SHA-256的安全分析(如缩减轮的分析),尚未发现本质的缺陷

程序设计

  • typedef.h:定义数据类型

  • sha256.h:定义SHA-256算法相关功能函数、数据接口声明

  • sha256.c:实现SHA-256算法相关功能函数

  • sha256_test.h:定义测试函数、数据接口声明

  • Sha256_test.c:实现测试功能函数

  • main.c:实现main函数,测试程序的正确性、性能等

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

hash哈希函数(散列函数)、hash table 哈希表(散列表) 哈希函数中,指纹就是对原始数据进行哈希计算后得到的个简短、固定长度的数字值,它充当数据的唯标识符。通过指纹,我们可以高效地查找、验证、比较数据。如今,散列算法也被用来加密存在数据库中的。 阅读详情

相关推荐

哈希 :哈希冲突、负载因子、哈希函数、哈希表、哈希桶

文章目录哈希哈希(散列)函数 哈希 哈希(散列)是种数据结构,通过散列算法将元素值转换为散列值进行存储。使得元素存储的位置元素本身建立起了映射关系,如果要查、改数据,就可以直接到对应的位置去,使得时间复杂度达到了 O(1)。 哈希(散列)函数 哈希函数就是建立起元素其存储位置的映射关系。 对于哈希函数来说,必须具有以下特点; 哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0 到m-1之间 哈希函数计算出来的地址能均匀分布在整个空间中(防止产生密集的哈希冲突

Jormungand_V的博客 4739

常用的字符串哈希函数

本文将介绍什么是字符串哈希函数,字符串哈希函数常见用法,以及字符串哈希函数的实现原理和常用算法。

dvlinker的技术专栏 1万+

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

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

鑫宝的博客 1万+

常用哈希函数介绍

哈希函数介绍 什么是哈希?在记录的关键字记录的存储地址之间建立的种对应关系叫哈希函数哈希函数就是种映射,是从关键字到存储地址的映射。 通常,包含哈希函数的算法的算法复杂度都假设为O(1),这就是为什么在哈希表中搜索数据的时间复杂度会被认为是"平均为O(1)的复杂度". 在解具体内容前,首先我们要清楚以下几个概念: 冲突(碰撞) 对于不同的关键字ki、kj,若ki != kj,但H(ki) = H(kj)的现象叫冲突(collision) ,即不同的输入却有相同的输出。我们应该尽量避免冲突,因为冲

lemon 1万+

经典Hash函数的实现

Hash函数是指把个大范围映射到个小范围。把大范围映射到个小范围的目的往往是为了节省空间,使得数据容易保存。 除此以外,Hash函数往往应用于查找上。所以,在考虑使用Hash函数之前,需要明白它的几个限制: 1.Hash的主要原理就是把大范围映射到小范围;所以,你输入的实际值的个数必须和小范围相当或者比它更小。不然冲突就会很多。2.由于Hash逼近单向函数;所以,你可以用它来对数据进...

weixin_30802171的博客 652

区块链区块链密码学基础

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

鑫宝的博客 1万+

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

关于哈希函数的知识点

m0_62829674的博客 1918

区块链哈希函数

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

weixin_62775913的博客 5532

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

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

Digquant的博客 1242

解密区块链中的密码学

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

宽客在线的博客 6818

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

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

Digquant的博客 1595

哈希函数详解:从MD5到SHA-3密码学基石

哈希函数是现代密码学的核心组件,它将任意长度的输入转换为固定长度的输出(哈希值),具有单向性、抗碰撞性和雪崩效应等安全特性。本文系统解析了哈希函数的定义、性质、典型算法及应用场景。 核心算法包括已淘汰的MD5(128位)、SHA-1(160位),以及当前主流的SHA-2(如SHA-256)和新兴的SHA-3(基于海绵结构)。哈希函数广泛应用于数据完整性校验(如文件下载验证)、密码存储(加盐哈希防彩虹表攻击)、区块链(区块标识)和数字签名等领域。随着算法演进,SHA-256仍是安全推荐标准,而BLAKE3等新

qq2745567641的博客 1917

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

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

weixin_45067603的博客 2161

区块链中的密码学 —— 哈希函数

SHA-256 是。

qq_27510557的博客 1953

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

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

qq_51447436的博客 3万+

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

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

fudaihb的博客 3567

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

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

2401_85754355的博客 2930

03 区块链密码学

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

FrancyZhou的博客 886

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值