密码学05-Hash函数

Hash函数的定义

Hash函数的定义

  • Hash函数的定义
    • 将任意长的消息 M 映射为较短的、 固定长度的一个值 H(M)
    • Hash函数也称为哈希函数、散列函数、压缩函数、杂凑函数、指纹函数等。H(M) 为哈希值、散列值、杂凑码、指纹、消息摘要等。
    • Hash函数 H 一般是公开的。

M 是一个长消息,设 M=(M1,M2,,Mk),其中 Mil 长的比特串,定义函数 H 如下:

H(M)=M1M2Mk

Hash函数满足的条件

  • Hash函数的目的是为需认证的数据产生一个“指纹
  • Hash函数应满足以下条件:
    • Hash函数函数的输入可以是任意长
    • Hash函数函数的输出是固定长
    • 在软件和硬件上易于实现
  • Hash函数满足的安全条件
  • Hash函数为了实现安全认证,需要满足如下安全条件:
    • 单向性: 已知x,求 H(x) 较为容易;但是,已知 h,求使得 H(x)=hx 在计算上是不可行的。
    • 抗弱碰撞性: 已知 x,找出 y(yx) 使得 H(y)=H(x) 在计算上是不可行的。
    • 抗强碰撞性: 找出任意两个不同的输入 x,y,使得 H(y)=H(x) 在计算上是不可行的
    • 关系:抗强碰撞性 抗弱碰撞性 单向性

迭代型杂凑函数的一般结构

![[迭代型杂凑函数的一般结构.png]]

  • CV0=IV=n 比特长的初值
  • CVi=f(CVi1,Yi1)1iL
  • H(M)=CVL

生日攻击

问题1---第 I 类生日攻击问题

已知一杂凑函数 Hn 个可能的输出, H(x) 是一个特定的输出,如果对 H 随机取 k 个输入,则至少有一个输入 y 使得 H(y)=H(x) 的概率为0.5时, k有多大?

  • 为叙述方便,称对杂凑函数H寻找上述y的攻击为第 I 类生日攻击

因为 Hn 个可能的输出,所以输入 y 产生的输出 H(y) 等于特定输出 H(x) 的概率是 1n ,反过来说 H(y)H(x) 的概率是 11n

yk 个随机值而函数的 k 个输出中没有一个等于 H(x),其概率等于每个输出都不等于 H(x) 的概率之积,为 [11n]k,所以y取k个随机值得到函数的 k 个输出中至少有一个等于 H(x) 的概率为 1[11/n]k

由当|x|1(1+x)k1+kx,可得1[11n]k1[1kn]=kn
若使上述概率等于 0.5,则 k=n2。特别地,如果 H 的输出为 m 比特长,即可能的输出个数 n=2m,则

  • k=2m1

问题2---生日悖论

  • [?] 在 k 个人中至少有两个人的生日相同的概率大于0.5时, k 至少多大?

  • 设有 k 个整数项,每一项都在 1 到 n 之间等可能地取值。

    • P(n,k)k个整数项中至少有两个取值相同的概率
  • 生日悖论就是求使得 P(365,k)0.5的最小 k

    • Q(365,k)k 个数据项中任意两个取值都不同的概率

如果 k>365,则不可能使得任意两个数据都不相同,因此假定k365k 个数据项中任意两个都不相同的所有取值方式数为

365×364××(365k+1)=365!365k!

如果去掉任意两个都不相同这一限制条件,可得k个数据项中所有取值方式数为365k。所以可得

Q(365,k)=365!(365k)365k

P(365,k)=1Q(365,k)=1365!(365k)!365k

  • k=23 时, P(365,23)=0.5073,即上述问题只需23人,人数如此之少。
  • k=100,则 P(365,100)=0.9999997,即获得如此大的概率。
  • 之所以称这一问题是悖论是因为当人数k给定时,得到的至少有两个人的生日相同的概率比想象的要大得多。

生日悖论推广问题

  • [?] 已知一个在 1n 之间均匀分布的整数型随机变量,若该变量的 k 个取值中至少有两个取值相同的概率大于0.5,则 k 至少多大?

  • P(n,k)=1n!(nk)!nk,令 P(n,k)>0.5,可得 k=1.18nn

  • 若取 n=365,则 1.18365=22.54

生日攻击

设杂凑函数 H2m 个可能的输出(即输出长 m 比特),如果 Hk 个随机输入中至少有两个产生相同输出的概率大于0.5,则

k2m=2m/2

II 类生日攻击

  • [?] 寻找函数 H 的具有相同输出的两个任意输入的攻击方式

  • 输出长度与碰撞

    • 这种生日攻击给出了消息摘要长度的下界,一个40比特的消息摘要是非常不安全的。
    • 因为在大约220个(大约100万)个随机值中就能以1/2的概率找到一个碰撞。
    • 通常建议消息摘要的最小可接受的长度为128比特,在DSS签名标准中使用160比特的消息摘要就是基于这个考虑

SHA-1 算法

安全杂凑算法SHA‐1

安全杂凑算法(Secure Hash Algorithm, SHA)由美国NIST设计,于1993年作为联邦信息处理标准公布。SHA是基于MD4的算法,其结构与MD4非常类似

算法描述

  • 算法的输入: 小于264比特长的任意消息,分为 512 比特长的分组。
  • 算法的输出: 160 比特长的消息摘要。
  • 算法的框图与MD5一样,但杂凑值的长度和链接变量的长度为160比特

![[SHA-1算法的框图.png]]

算法处理步骤

①对消息填充

  • 对消息填充,使得其比特长在模512下为448,即填充后消息的长度为512的某一倍数减64,留出的64比特备第 ② 步使用。
  • 步骤 ① 是必需的,即使消息长度已满足要求,仍需填充。例如,消息长为448比特,则需填充512比特,使其长度变为960,因此填充的比特数大于等于1而小于等于512
  • 填充方式是: 第1位为1,其后各位皆为0

②附加消息的长度

  • 留出的64比特以来表示消息被填充前的长度。如果消息长度大于264,则以264为模数取模。
  • big-endian模式是指数据的高字节保存在内存的低地址中,反之为little-endian模式

③对MD缓冲区初始化

使用160比特长的缓冲区存储中间结果和最终杂凑值。缓冲区为5个32比特以big-endian方式存储数据的寄存器(A, B, C, D, E)

初始值分别为 A=67452301, B=EFCDAB89, C=98BADCFB, D=10325476, E=C3D2E1F0

④ 以分组为单位对消息进行处理

每一分组 Yq 都经一压缩函数处理,压缩函数由4轮处理过程(如图所示)构成,每一轮又由20步迭代组成。

第4轮的输出(即第80步迭代的输出)再与第1轮的输入 CVq 相加,以产生 CVq+1,其中加法是缓冲区5个字中的每一个字与 CVq 中相应的字模 232 相加

![[SHA的分组处理框图.png]]

⑤ 输出消息

  • 输出消息的L个分组都被处理完后,最后一个分组的输出即为160比特的消息摘要。

总结——③到⑤的处理过程

(1)CV0=IV;(2)CVq+1=SUM32(CVq,ABCDEq);(3)MD=CVL

  • IV: 缓冲区ABCDE的初值。
  • ABCDEq: 第q个消息分组经最后一轮处理过程处 理后的输出
  • L: 消息(包括填充位和长度字段)的分组数
  • SUM32: 对应字的模232 加法
  • MD: 最终的摘要值。

SHA的压缩函数

SHA的压缩函数由4轮处理过程组成,每轮处理过程20步迭代运算组成,每一步迭代运算的形式为

(4)A(E+ft(B,C,D)+CLS5(A)+Wt+Kt)(5)BA(6)CCLS30(B)(7)DC(8)ED

  • ABCDE: 缓冲区的5个字
  • t: 迭代的步数(0≤t≤79)
  • ft(B,C,D): 第 t 步迭代使用的基本逻辑函数
  • CLSs: 左循环移 s
  • Wt: 由当前512比特长的分组导出的一个 32 比特长的字
  • Kt: 加法常量
  • +: 模 232 加法。

![[一步迭代示意图.png]]

基本逻辑函数 ft

迭代的步数 函数名 定义
0t19 f1=ft(B,C,D) (BC)(B¯D)
20t39 f2=ft(B,C,D) BCD
40t59 f3=ft(B,C,D) (BC)(BD)(CD)
60t79 f4=ft(B,C,D) BCD
本逻辑函数的输入为3个32比特的字,输出是一个32比特的字。表中,,a¯, 分别是与、或、非、异或4个逻辑运算。

Wt

下面说明如何由当前的输入分组(512比特长)导出 W0,W1,,W15,W16,W17,,W79

Wt=CLS1(Wt16Wt14Wt8Wt3)

![[SHA分组处理所需的80个字的产生过程.png]]

常量字 Kt

常量字 K0,K1,,K79,如果以16进制给出。它们如下

(9)Kt=0x5A827999(0t19)(10)Kt=0x6ED9EBA1(20t39)(11)Kt=0x8F1BBCDC(40t59)(12)Kt=0xCA62C1D6(60t79)

SM3密码杂凑算法

SM3密码杂凑算法简介

SM3是中国国家密码管理局颁布的中国商用密码标准算法,它是一类密码杂凑函数,可用于数字签名及验证、消息认证码生成及验证、随机数生成。

标准起草人:王小云、李峥、于红波、张超、罗鹏、吕述望

2012年3月,成为中国商用密码标准(GM/T 0004-2012)

2016年8月,成为中国国家密码标准(GB/T 32905-2016)

2018年11月22日, 含有我国SM3杂凑密码算法的ISO/IEC 10118 – 3 : 2018《信息安全技术杂凑函数第3部分:专用杂凑函数》 最新一版(第4版)由国际标准化组织(ISO)发布, SM3算法正式成为国际标准。

SM3密码杂凑算法的描述

算法的输入数据长度为 l 比特,l<264 输出哈希值长度为256比特

常数与函数

  1. 常数
    • 初始值 IV=7380166F4914B2B9172442D7DA8A0600A96F30BC163138AAE38DEE4DB0FB0E4E
    1. 常量

Tj={79CC45190j157A879D8A16j63

  1. 函数
  • [i] 式中 X,Y,Z 为32位字,,,a¯, 分别是逻辑与、逻辑或、逻辑非和逐比特异或运算

布尔函数(混淆):

(13)FFj(X,Y,Z)={XYZ0j15(XY)(XZ)(YZ)16j63(14)GGj(X,Y,Z)={XYZ0j15(XY)(X¯Z)16j63

置换函数(扩散):

(15)P0(X)=X(x9)(X17)(16)P1(X)=X(X15)(X23)

  • [i] 式中X为32位字,符号 an 表示把 a 循环左移 n 位。

算法描述

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

填充并附加消息的长度

  • 对消息填充的目的是使填充后的数据长度为512的整数倍。
  • 设消息 m 的长度为 l 比特。首先将比特“1”添加到 m 的末尾,再添加 k 个“0”,其中 k 满足:l+1+k=448mod512
  • 然后再添加一个64位比特串,该比特串是长度l的二进制表示。
  • 举例:消息为011000010110001001100011,其长度为 l=24,填充后的比特串为 0110000101100010011000111000042300001100064bit

迭代压缩

将填充后的消息 m 按512比特进行分组得 m=B(0)B(1)B(L1)m 按下列方式迭代压缩:

FOR(i=0toL1):Vi+1=CF(V(i),B(i))

其中 CF是压缩函数,V(0) 为256比特初始值 ,B(i) 为填充后的消息分组,迭代压缩的结果为 V(L)V(L) 即为消息 m 的哈希值。

![[SM3迭代压缩.png]]

SM3消息扩展过程

![[SM3消息扩展过程.png]]

  1. 消息分组 B(i) 划分为16个字 W0,W1,,W15
  2. FOR (j=16to67):Wj=P1(Wj16Wj9(Wj315))(Wj137)Wj6
  3. FOR (j=0to63):Wj=WjWj+4

Bi经消息扩展后得到132个字 W0,W1,,W67,W0,W1,,W63

压缩函数

ABCDEFGH 为字寄存器,SS1,SS2,TT1,TT2 为中间变量,压缩函数 Vi+1=CF(V(i),B(i))(0in1) 的计算过程如下:

V(i+1)=ABCDEFGHV(i) FOR j=0 to 63SS1((A≪<12)+E+(Tj≪<<j))≪<7;SS2=SS1(A≪<12)TT1=FFj(A,B,C)+D+SS2+WjTT2=GGj(E,F,G)+H+SS1+WjD=CC=BB=AA=TT1;H=G;G=F19;F=E;E=P0(TT2)ENDFORVi+1=ABCDEFGHV(i)

![[SM3算法第j轮迭代压缩流程图.png]]

输出哈希值

ABCDEFGH=VL

输出 256 比特的哈希值 y=ABCDEFGH

![[SM3 产生消息哈希值的处理过程.png]]

SM3哈希算法的安全性

  • 压缩函数是哈希函数安全的关键
    • SM3的压缩函数 CF 中的布尔函数 FFj(X,Y,Z)GGj=(X,Y,Z) 是非线性函数,经过循环迭代后提供混淆作用。
    • 置换函数 P0(X)P1(X) 是线性函数,经过循环迭代后提供扩散作用。
    • 再加上 CF 中的其他运算的共同作用,压缩函数 CF 具有很高的安全性,从而确保SM3具有很高的安全性。

![[比较1.png]]

![[比较2.png]]


  1. 王小云, 于红波. SM3密码杂凑算法[J]. 信息安全研究, 2016(11). ↩︎ ↩︎

posted @   seveN1foR  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示