当前位置:
文档之家› 第3章-第1讲 伪随机数发生器与单向散列函数
第3章-第1讲 伪随机数发生器与单向散列函数
for j =32 to 47 do (第三轮) Temp= B + ((A + H(B,C,D) + M[(5+(i-32))*3%16] + T[j]) <<< s[j] ; A =D; B =temp; C =B; D = C; end for j =48 to 63 do (第四轮) Temp= B + ((A + I(B,C,D) + M[(0+(i-48))*7%16] + T[j]) <<< s[j] ; A =D; B =temp; C =B; D = C; end (4) Let A = A + AA ,B = B + BB,C = C + CC,D = D + DD
优点: 优点: (1)该发生器有一特殊性质,为了得到第i位不用去迭 代前面的i-1位 (2)对左右都是不可预测的。 缺点: 缺点: 速度比较慢。 使用
加速方法 :
xi
n 的更多低位,可以使用 log 2 位
注意:不使用于序列密码加密,适用于对安全性要求高的应用 注意 程序,例如密钥产生 。
第二部分 单向散列函数
1、线性反馈移位寄存器 、 最简单的反馈移位寄存器是线性反馈移位寄存器 线性反馈移位寄存器 (LFSR),反馈函数 反馈函数是寄存器中某些位的异或运算,即是 反馈函数 上的一个多项式 一个多项式,为了能达到最大周期(m序列 序列)应该是上 一个多项式 序列 的一个本原多项式 本原多项式
例子: 级线性反馈移位寄存器 例子:3级线性反馈移位寄存器
单向散列函数: 单向散列函数:Hash Function,哈希函数、杂凑函数 将任意长度的消息M映射成一个固定长度散列值h的函数: h=H(M), 其中,h的长度为m。 用途: 消息认证、数字签名。
散列函数要具有单向性,则必须满足如下特性: 散列函数要具有单向性,则必须满足如下特性: (1)有效性 ) 给定M,很容易计算h,便于软硬件实现。 (2)单向性 ) 给定h 根据H(M)=h反推M很难。 给定h,根据H(M)=h反推M很难。 H(M)=h反推 (3)弱抗碰撞性(弱攻击性) )弱抗碰撞性(弱攻击性) 给定M,找到另一M’满足H(M)=H(M’)很难。 在某些应用中,单向散列函数还需要满足抗碰撞(Collision) 在某些应用中 , 单向散列函数还需要满足抗碰撞 的条件: 的条件 :要找到两个随机的消息M和M’,使H(M)=H(M’)满足很难。 。 抗强抗攻击性) (抗强抗攻击性)
MD5对每 对每512bit按照下列算法进行处理 对每 按照下列算法进行处理
(1) 把Yi分为16个32比特分组M0、M1、…、M15,其中,M0为最左边的 32bit。 (2) Let AA =A,BB =B,CC =C,DD =D (3) for i =0 to 15 do (第一轮) Temp=B + ((A + F(B,C,D) + M[j] + T[j]) <<< s[j] ; A =D; B =temp; C =B; D = C; end for j =16 to 31 do (第二轮) Temp= B + ((A + G(B,C,D) + M[(1+(j-16)*5)%16] + T[j]) <<< s[j] ; A =D; B =temp; C =B; D = C; End
还要求:
能用于任何大小的消息; 能用于任何大小的消息; 能产生定长输出; 能产生定长输出;
实现: 实现:
单向散列函数是建立在压缩函数之上的: 单向散列函数是建立在压缩函数之上的:
消消消消1
消消消消2
…
消消消消n
填填填
IV
压压 非非
压压 非非
…
压压 非非
非非函
(一) MD5 算 法 一
MD表示消息摘要(Message Digest),单向散列函数 输入: 给定一任意长度的消息 输出: 长为m的散列值。 压缩函数的输入: 消息分组和前一分组的输出(对第一个函数需初始化向量IV); 输出: 到该点的所有分组的散列,即分组Mi的散列为 hi=f (Mi, hi−1) 循环: 该散列值和下一轮的消息分组一起作为压缩函数下一轮的输入,最 后一分组的散列就是整个消息的散列。
图 SHA–1算法
1) 填充消息
将消息填充为512位的整数倍,填充方法和MD5完全相同。幻灯片 16 位的整数倍,填充方法和 完全相同。 将消息填充为 位的整数倍 完全相同
2) 初始化缓冲区
SHA要用到两个缓冲区,均有五个32位的寄存器。 要用到两个缓冲区,均有五个 位的寄存器 位的寄存器。 要用到两个缓冲区 第一个缓冲区: 、 、 、 、 ; 第一个缓冲区:A、B、C、D、E; 第二个缓冲区:H0、H1、H2、H3、H4。 第二个缓冲区: 运算过程中还用到一个标记为W 运算过程中还用到一个标记为 0、W1、…、W79的80个32位字序列和一个 、 个 位字序列和一个 单字的缓冲区TEMP。在运算之前,初始化 j}: 单字的缓冲区 。在运算之前,初始化{H : H0 = 0x67452301 H2 = 0x98BADCFE H4 = 0xC3D2E1F0 H1 = 0xEFCDAB89 H3 = 0x10325476
3) 按512位的分组处理输入消息 位的分组处理输入消息 SHA运算主循环包括四轮,每轮20次操作。 运算主循环包括四轮,每轮 次操作 次操作。 运算主循环包括四轮 逻辑函数序列f0、f1、…、f79,每个逻辑函数的输入为三个32位字,输 逻辑函数序列 、 每个逻辑函数的输入为三个 位字, 位字 出为一个32位字 位字: 出为一个 位字: ft (B,C,D) = (B^C) ˇ(~B^D) ft (B,C,D) = B+C+D + + ft (B,C,D) = (B^C) ˇ(B^D) ˇ(C^D) ft (B,C,D) = B+C+D + + 还用到常数字序列K 还用到常数字序列 0、K1、…、K79: 、 , Kt = 0x5A827999 (0≤t≤19), Kt = 0x6ED9EBA1 (20≤t≤39) (60≤t≤79) (0≤t≤19) (20≤t≤39) (40≤t≤59) (60≤t≤79)
2) 附加长度 将原消息长度的64位表示附加在填充后的消息后面。 将原消息长度的 位表示附加在填充后的消息后面。 位表示附加在填充后的消息后面 用消息长度 填充。 当原消息长度大于264时,用消息长度mod 264填充。 当原消息长度大于 (512=32×16) = × )
3) 初始化 初始化MD缓冲区 缓冲区 初始化用于计算消息摘要的128位缓冲区, 由四个 位缓冲区, 初始化用于计算消息摘要的 位缓冲区 32位寄存器 、B、C、D表示: 位寄存器A、 、 、 表示 表示: 位寄存器 A: 01 B: 89 C: fe D: 76 23 ab dc 54 45 cd ba 32 67 ef 98 10
密码学上安全的伪随机数生成器必须满足下面( )( )(2) 密码学上安全的伪随机数生成器必须满足下面(1)( )条件 (1)它是满足伪随机性,这表明它通过了我们所能找到 的所有 随机性统计检验。 (2)它是不可预测的。即使给出产生序列的算法或硬 件和所有以前产生的比特流的全部知识,也不可能通过计 算来预测下一个随机比特应是什么。 如果一个随机序列产生器具有下面的第三条性质, 它就是真正随机 真正随机的: 真正随机 (3)它不能可靠地重复产生。如果你用完全同样的输 入对序列产生器操作两次(至少与人所能做到的最精确的 一样),你将得到两个不相关的随机序列。
5)输出 ) 在处理完Yn后,128位的消息摘要为A、B、C、D级联的结果。
(二)安全散列函数(SHA) 安全散列函数
1 算法 SHA 是 美 国 NIST 和 NSA 共 同 设 计 的 安 全 散 列 算 法 (Secure Hash Algorithm) , 用 于 数 字 签名 标 准 DSS(Digital Signature Standard)。 修改版SHA–1于1995年作为美国联邦信息处理标准公告发 布。 SHA–1的输入: 度小于264位的消息 输出: 160位的消息摘要。
二、伪随机数生成器
1、线性反馈移位寄存器 、
一个反馈移位寄存器(FSR)由两个部分组成:移位寄存器和 移位寄存器和 反馈函数(feed back function)。移位寄存器是一个位序列,其长 反馈函数 度用位表示,每次需要一个位,移位寄存器中所有的位右移一个位, 新的最左端的位根据寄存器中的其它位计算得到,输出位一般是寄 存器的最低有效位。移位寄存器的周期是指输出序列从开始到重复 的长度
1、算法 、 MD5对输入的任意长度消息产生 对输入的任意长度消息产生128位散列值: 位散列值: 对输入的任意长度消息产生 位散列值
填填填 消消消消(K mod64) 2
L×512 bit=N×32 bit K bit
消消
100…0
512 bit Y0 512 IV 128 HMD5 CV 1 128
a b c d
a M j T[i] b
非非非非非
+
+
+
<<<s
+
c d
四轮操作的不同之处在于每轮使用的非线性函数不同,分别 为(其输入/输出均为32位字): F(X,Y,Z) = (X^Y) ˇ((~X) ^Z) G(X,Y,Z) = (X^Z)ˇ(Y^ (~Z)) H(X,Y,Z) = X+Y+Z I(X,Y,Z) = Y+(Xˇ (~Z)) 其中,^表示按位与; ˇ表示按位或; ~表示按位反; +表示按位异或。
第三章 安全业务及其实现方法
第一讲 伪随机数发生器与单向散列函数
第一部分 伪随机序列发生器
随机数在网络安全算法中的应用