《第3章单向散列函数.ppt》由会员分享,可在线阅读,更多相关《第3章单向散列函数.ppt(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3 3章章 单向散列函数单向散列函数Network and Information Security第第3章章 单向散列函数单向散列函数 3.1 3.1 单向散列函数概述单向散列函数概述3.2 MD53.2 MD5算法算法3.3 SHA3.3 SHA家族家族3.4 3.4 消息认证码消息认证码(MAC)(MAC)3.5 3.5 对单向散列函数的攻击对单向散列函数的攻击第第3 3章章 单向散列函数单向散列函数Network and Information Security 世界上很难找到两个相同指纹的人,我们可用世界上很难找到两个相同指纹的人,我们可用指纹指纹代代表一个人。如果把一条消息看成
2、一个人,消息的表一个人。如果把一条消息看成一个人,消息的散列散列值值就是指纹,由此我们可用散列值代表一条消息。就是指纹,由此我们可用散列值代表一条消息。 单向散列函数是数字签名单向散列函数是数字签名中的一个关键环节中的一个关键环节, ,可以大大可以大大缩短签名时间缩短签名时间并提高安全性并提高安全性, ,另外在另外在消息完整性检测消息完整性检测, ,内存的散布分配内存的散布分配, ,软件系统中软件系统中帐号口令帐号口令的安全存储,单的安全存储,单向散列函数也有重要应用。向散列函数也有重要应用。 第第3 3章章 单向散列函数单向散列函数Network and Information Securi
3、ty 单向散列函数是将单向散列函数是将一个消息一个消息以以不可逆的方式不可逆的方式将它转换将它转换成一段(通常更小)成一段(通常更小)密文密文; 也可以简单的理解为取一串也可以简单的理解为取一串输入码(称为消息),并把它们转化为长度较短、位输入码(称为消息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为消息摘要)的过数固定的输出序列即散列值(也称为消息摘要)的过程。程。 散列函数值可以说是对明文的一种散列函数值可以说是对明文的一种“指纹指纹”或是或是“摘摘要要”,是明文的,是明文的压缩版压缩版,是明文的,是明文的映射映射,可看成是明,可看成是明文的文的代表代表,就是用,就是用小的
4、散列值小的散列值代表代表大的明文大的明文。 一小代大也有例外!像一小代大也有例外!像口令口令的散列存储。的散列存储。3.1 3.1 单向散列函数概述单向散列函数概述第第3 3章章 单向散列函数单向散列函数Network and Information Security 所谓的所谓的单向散列函数单向散列函数(Hash Function(Hash Function,又称哈希函数、杂,又称哈希函数、杂凑函数凑函数) ),是将,是将任意长度的消息任意长度的消息M M映射成一个映射成一个固定长度散列固定长度散列值值h h( (设长度为设长度为m)m)的函数的函数H H: h=H(M)h=H(M) 散列函
5、数要具有单向性,则必须满足如下特性:散列函数要具有单向性,则必须满足如下特性: 给定给定M M,很容易计算,很容易计算h h。 给定给定h h,根据,根据H(M)=hH(M)=h反推反推M M很难。很难。 给定给定M M,要找到另一消息,要找到另一消息MM并满足并满足H(M)=H(M)H(M)=H(M)很难。很难。 在某些应用中,单向散列函数还需要满足抗碰撞在某些应用中,单向散列函数还需要满足抗碰撞(Collision)(Collision)的条件:要找到的条件:要找到两个随机的消息两个随机的消息M M和和MM,使,使H(M)=H(M)H(M)=H(M)很难。很难。 第第3 3章章 单向散列函
6、数单向散列函数Network and Information Security散列函数工作模式散列函数工作模式 消息分组1 消息分组2压缩函数压缩函数IV 消息分组n 填充位压缩函数函数值图3-1 单向散列函数工作模式第第3 3章章 单向散列函数单向散列函数Network and Information Security 3.2.1 算法算法 MD表示消息摘要表示消息摘要(Message Digest)。MD5是是MD4的改进版,该算法对输入的的改进版,该算法对输入的任意长度消息产生任意长度消息产生128位散列值位散列值(或消息或消息摘要摘要) 。MD5算法可用图算法可用图3-2表示。表示。3
7、.2 MD5 算算 法法第第3 3章章 单向散列函数单向散列函数Network and Information Security图3-2 MD5算法 2) 附加填充位附加填充位 3) 消息长度消息长度64 4) 初始化初始化MD缓冲区缓冲区 5) 输出输出 1) 按按512位的分组处位的分组处理输入消息理输入消息1000消息Kbit32bitN512bitL512bit512512bit512bit512128512128128IVCVL-1CV1128位消息摘要HMD5HMD5HMD5Y0Y1YL-1消息长度(K mod 264)填充位图3-2 MD5算法第第3 3章章 单向散列函数单向散列
8、函数Network and Information Security 由上图可知,由上图可知,MD5MD5算法包括以下五个步骤。算法包括以下五个步骤。1) 1) 附加填充位附加填充位 首先填充消息,使其长度为一个比首先填充消息,使其长度为一个比512512的倍数小的倍数小6464位的数位的数。填充方法:在消。填充方法:在消息后面填充一位息后面填充一位1 1,然后填充所需数量的,然后填充所需数量的0 0。填充位的位数是。填充位的位数是1 1511511。 填充消息长度填充消息长度=512-(k+64) mod 512=512-(k+64) mod 5122)2)消息消息长度长度 将原消息长度的将
9、原消息长度的6464位表示附加在填充后的消息后面。位表示附加在填充后的消息后面。当原当原消息长度消息长度大于大于2 26464时,用消息长度时,用消息长度mod 2mod 26464填充。这时,填充。这时,总长度总长度恰好是恰好是512512的整数倍。令的整数倍。令M0 M0 1 1N N11为填充后消息的各个字为填充后消息的各个字( (每字为每字为3232位位) ),N N是是1616的倍数。的倍数。1 0 0 0消息K b i t3 2 b i tN5 1 2 b i tL5 1 2 b i t5 1 25 1 2 b i t5 1 2 b i t5 1 21 2 85 1 21 2 81
10、 2 8I VC VL - 1C V11 2 8 位消息摘要HMD 5HMD 5HMD 5Y0Y1YL - 1消息长度(K mo d 26 4)填充位图3 - 2 MD 5 算法第第3 3章章 单向散列函数单向散列函数Network and Information Security3) 初始化初始化MD缓冲区缓冲区 初始化用于计算消息摘要的初始化用于计算消息摘要的128位缓冲区。这个缓冲区由位缓冲区。这个缓冲区由四个四个32位寄存器位寄存器A A、B B、C C、D D表示。寄存器的初始化值为表示。寄存器的初始化值为(按低位字节在前的顺序存放按低位字节在前的顺序存放): A: 01234567
11、 B: 89abcdef C: fedcba98 D: 76543210 4) 按按512位的分组处理输入消息位的分组处理输入消息 这一步为这一步为MD5的主循环,包括四轮,如图的主循环,包括四轮,如图3-3所示。每个循环都以当前的所示。每个循环都以当前的正在处理的正在处理的512比特分组比特分组Yq和和128比特缓冲值比特缓冲值ABCDABCD为输入,然后更新缓冲内容。为输入,然后更新缓冲内容。 1 0 0 0消息K b i t3 2 b itN5 1 2 b itL5 1 2 b i t5 1 25 1 2 b i t5 1 2 b i t5 1 21 2 85 1 21 2 81 2 8
12、I VC VL - 1C V11 2 8 位消息摘要HMD 5HMD 5HMD 5Y0Y1YL - 1消息长度(K m o d 26 4)填充位图3 - 2 MD 5 算法第第3 3章章 单向散列函数单向散列函数Network and Information Security第四轮第三轮第二轮第一轮ABCDCVqYqABCDCVq1图3-3 单个512比特分组的MD5主循环处理 第第3 3章章 单向散列函数单向散列函数Network and Information Security 图3-3中,四轮的操作类似,每一轮进行16次操作。各轮的操作过程如图3-4所示。 图3-4 MD5某一轮的1次执
13、行过程 cs非线性函数bdaMjTicbdaj:015, i:164(共四轮, 每一次用的都不同)第第3 3章章 单向散列函数单向散列函数Network and Information Security 四轮操作的不同之处在于每轮使用的非线性函数不同,在第一轮操作之前,首先把A、B、C、D复制到另外的变量a、b、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 ZI(X,Y,Z) = Y (X ?(Z) 其中, ?表示按位与; ?表示按位或;
14、表示按位反; 表示按位异或。第第3 3章章 单向散列函数单向散列函数Network and Information Security 此外,由图3-4可知,这一步中还用到了一个有64个元素的表T1.64,Ti=232abs(sin(i),i的单位为弧度。根据以上描述,将这一步骤的处理过程归纳如下:for i = 0 to N/161 do /* 每次循环处理16个字,即512字节的消息分组*/*把A存为AA,B存为BB,C存为CC,D存为DD*/AA = A BB = B CC = C DD = D第第3 3章章 单向散列函数单向散列函数Network and Information Secu
15、rity /* 第一轮第一轮*/* 令令abcd k s i表示操作表示操作b = b + (a + F(b,c,d) + Mk + Ti) s)其中,其中,Ys表示表示Y循环左移循环左移s位位*/* 完成下列完成下列16个操作个操作*/ABCD 0 7 1 DABC 1 12 2 CDAB 2 17 3 BCDA 3 22 4ABCD 4 7 5 DABC 5 12 6 CDAB 6 17 7 BCDA 7 22 8ABCD 8 7 9 DABC 9 12 10 CDAB 10 17 11 BCDA 11 22 12ABCD 12 7 13 DABC 13 12 14 CDAB 14 17
16、15 BCDA 15 22 16第第3 3章章 单向散列函数单向散列函数Network and Information Security/* 第二轮第二轮*/*令令abcd k s i表示操作表示操作b = b + (a + G(b,c,d) + Mk + Ti) s)*/*完成下列完成下列16个操作个操作*/ABCD 1 5 17 DABC 6 9 18 CDAB 11 14 19 BCDA 0 20 20ABCD 5 5 21 DABC 10 9 22 CDAB 15 14 23 BCDA 4 20 24ABCD 9 5 25 DABC 14 9 26 CDAB 3 14 27 BCDA
17、8 20 28ABCD 13 5 29 DABC 2 9 30 CDAB 7 14 31 BCDA 12 20 32第第3 3章章 单向散列函数单向散列函数Network and Information Security/*第三轮第三轮*/*令令abcd k s t表示操作表示操作b= b + (a + H(b,c,d) + Mk + Ti) s)*/*完成以下完成以下16个操作个操作*/ABCD 5 4 33 DABC 8 11 34 CDAB 11 16 35 BCDA 14 23 36ABCD 1 4 37 DABC 4 11 38 CDAB 7 16 39 BCDA 10 23 40A
18、BCD 13 4 41 DABC 0 11 42 CDAB 3 16 43 BCDA 6 23 44ABCD 9 4 45 DABC 12 11 46 CDAB 15 16 47 BCDA 2 23 48 第第3 3章章 单向散列函数单向散列函数Network and Information Security/*第四轮第四轮*/*令令abcd k s t表示操作表示操作b = b + (a + I(b,c,d) +Mk + Ti) s) */*完成以下完成以下16个操作个操作*/ABCD 0 6 49 DABC 7 10 50 CDAB 14 15 51 BCDA 5 21 52ABCD 12
19、 6 53 DABC 3 10 54 CDAB 10 15 55 BCDA 1 21 56ABCD 8 6 57 DABC 15 10 58 CDAB 6 15 59 BCDA 13 21 60ABCD 4 6 61 DABC 11 10 62 CDAB 2 15 63 BCDA 9 21 64 A = A + AA B = B + BB C = C + CC D = D + DD end /*i循环*/第第3 3章章 单向散列函数单向散列函数Network and Information Security 5) 输出输出 由由A、B、C、D四个寄存器四个寄存器的输出按低位字的输出按低位字节在
20、前的顺序节在前的顺序(即以即以A的低字节开始、的低字节开始、D的高字的高字节结束节结束)得到得到128位的消息摘要。位的消息摘要。 以上就是对以上就是对MD5算法的描述。算法的描述。MD5算法的算法的运算均为基本运算,比较容易实现且速度很快。运算均为基本运算,比较容易实现且速度很快。 第第3 3章章 单向散列函数单向散列函数Network and Information Security3.2.2 举例举例我们以求字符串我们以求字符串“abc”的的MD5散列值为例来说明上面描述的过程。散列值为例来说明上面描述的过程。“abc”的二进制表示为的二进制表示为01100001 01100010 01
21、100011。1填充消息填充消息消息长消息长24,先填充,先填充1位位1,然后填充,然后填充423位位0,再用消息长,再用消息长24,即,即0 x00000000 00000018填充,则:填充,则:M0=61626380 M1=00000000 M2=00000000 M3=00000000M4=00000000 M5=00000000 M6=00000000 M7=00000000M8=00000000 M9=00000000 M10=00000000 M11=00000000M12=00000000 M13=00000000 M14=00000000 M15=000000182初始化初始
22、化A: 0123 45 67B: 89ab cd efC: fedc ba 98D: 7654 32 103主循环主循环利用利用3.2.1节中描述的过程对字块节中描述的过程对字块1(本例只有一个字块)进行处理。变量(本例只有一个字块)进行处理。变量a、b、c、d每一次计每一次计算后的中间值不再详细列出。算后的中间值不再详细列出。4输出输出消息摘要消息摘要=90015098 3cd24fb0 d6963f7d 28e17f72第第3 3章章 单向散列函数单向散列函数问题问题 计算计算Hash的自变量由的自变量由3部分组成:部分组成: 消息本身消息本身+填充填充+消息本身长度消息本身长度 为什么不
23、是:为什么不是: 消息本身消息本身+消息本身长度消息本身长度+填充填充 Network and Information Security第第3 3章章 单向散列函数单向散列函数Network and Information Security3.3 安全散列函数安全散列函数(SHA-1) 3.3.1 SHA家族家族 SHA (Secure Hash Algorithm,安全散列算法,安全散列算法) 家族是美国国家族是美国国家安全局家安全局 (NSA) 设计,美国国家标准与技术研究院设计,美国国家标准与技术研究院 (NIST) 发发布的一系列密码散列函数。布的一系列密码散列函数。 1993年发布年
24、发布SHA 家族的第一个成员(家族的第一个成员(SHA-0),),1995年发布年发布了了SHA-1。 SHA-1在许多安全协定中广为使用,包括在许多安全协定中广为使用,包括TLS和和SSL、PGP、SSH、S/MIME和和IPsec,曾被视为是,曾被视为是MD5的后继者。的后继者。 第第3 3章章 单向散列函数单向散列函数SHA-0和和SHA-1相继被攻破和攻击,相继被攻破和攻击,NIST 发布了另外四种变体发布了另外四种变体算法名称算法名称 输 出输 出 长长度度(bits) 分块长度分块长度 (bits) 最大消息最大消息长度长度(bits) 字长字长 (bits) 步数步数SHA-0
25、160 512 264-1 32 80 SHA-1 SHA-2 S H A -256/224 256/224 512 264-1 32 64 S H A -512/384 512/384 1024 2128-1 64 80 Network and Information Security SHA算法参数比较第第3 3章章 单向散列函数单向散列函数3.3.2 SHA-1算法算法Network and Information Security第第3 3章章 单向散列函数单向散列函数Network and Information Security SHA1SHA1的的输入为长度输入为长度小于小于26
26、4位的消息(若大于,位的消息(若大于, 用用mod mod 即可)即可),输出为,输出为160位的消息摘要。具体过位的消息摘要。具体过程如下。程如下。 1) 填充消息填充消息 首先将消息填充为首先将消息填充为512位的整数倍位的整数倍,填充方法和,填充方法和MD5完全相同:完全相同:先填充一个先填充一个1,然后填充一定数量,然后填充一定数量的的0,使其长度比,使其长度比512的倍数少的倍数少64位位;接下来用原;接下来用原消息长度的消息长度的64位表示填充。这样,消息长度就成位表示填充。这样,消息长度就成为为512的整数倍。以的整数倍。以M0、M1、Mn-1表示填充后表示填充后消息的各个字块消
27、息的各个字块(每字块为每字块为16个个32位字位字)。第第3 3章章 单向散列函数单向散列函数Network and Information Security 2) 初始化缓冲区初始化缓冲区 在运算过程中,在运算过程中,SHA要用到两个缓冲区,要用到两个缓冲区,两个缓两个缓冲区均有五个冲区均有五个32位的寄存器位的寄存器。第一个缓冲区标记为第一个缓冲区标记为A A、B B、C C、D D、E E;第二个缓冲区标记为;第二个缓冲区标记为H0、H1、H2、H3、H4。此外,运算过程中还用到一个标记为。此外,运算过程中还用到一个标记为W0、W1、W79的的80个个32位字序列和一个单字的缓冲区位字序
28、列和一个单字的缓冲区TEMP。在运算之前,初始化。在运算之前,初始化Hj: H0 = 0 x67452301 H1 = 0 xEFCDAB89 H2 = 0 x98BADCFE H3 = 0 x10325476 H4 = 0 xC3D2E1F0第第3 3章章 单向散列函数单向散列函数Network and Information Security 3) 按按512位的分组处理输入消息位的分组处理输入消息 SHA运算主循环包括四轮,每轮运算主循环包括四轮,每轮20次操作。次操作。SHA用用到一个逻辑函数序列到一个逻辑函数序列f0、f1、f79。每个逻辑函数的。每个逻辑函数的输入为输入为三个三个3
29、2位字位字,输出为一个,输出为一个32位字。位字。定义如下(B、C、D均为32位字):ft (B,C,D) = (B ? C) ?(B ? D) (0t19)ft (B,C,D) = B C D (20t39)ft (B,C,D) = (B ? C) ?(B ? D) ?(C ? D) (40t59)ft (B,C,D) = B C D (60t79) 其中,运算符的定义与其中,运算符的定义与3.1节中节中MD5运算中的相同。运算中的相同。第第3 3章章 单向散列函数单向散列函数Network and Information Security SHA运算中还用到了运算中还用到了常数常数字序列字
30、序列K0、K1、K79,其值为,其值为 Kt = 0 x5A827999 (0t19) Kt = 0 x6ED9EBA1 (20t39) Kt = 0 x8F1BBCDC (40t59) Kt = 0 xCA62C1D6 (60t79)第第3 3章章 单向散列函数单向散列函数Network and Information Security SHA算法按如下步骤处理每个字块算法按如下步骤处理每个字块Mi: (1) 把把Mi分为分为16个字个字W0、W1、W15。 (2) for t =16 to 79 do let Wt =(Wt3 Wt8 Wt14 Wt16)1 (3) Let A =H0,B
31、 =H1,C =H2,D =H3,E =H4 (4) for t =0 to 79 do TEMP = (A5)+ft (B, C, D)+E +Wt +Kt ; E =D; D =C; C =(B30); B = A; A = TEMP; (5) Let H0 =H0 +A, H1 =H1 +B, H2 =H2 +C, H3 =H3 +D, H4 =H4 +E 4) 输出输出- 在处理完在处理完Mn后,后,160位的消息摘要为位的消息摘要为H0、H1、H2、H3、H4级联的结果。级联的结果。第第3 3章章 单向散列函数单向散列函数Network and Information Securit
32、y 3.3.3 举例 我们以求字符串我们以求字符串abc的的SHA1散列值为例来说明上散列值为例来说明上面描述的过程。面描述的过程。abc的二进制表示为的二进制表示为 a b c 01100001 01100010 01100011。(2) 初始化:初始化:H0 = 0 x67452301 H1 = 0 xEFCDAB89H2 = 0 x98BADCFE H3 = 0 x10325476H4 = 0 xC3D2E1F0 (1) 填充消息:消息长填充消息:消息长l=24,先填充,先填充1位位1,然后填充,然后填充423位位0,再用消息长再用消息长24,即,即0 x00000000 0000001
33、8(64位)位)填充。填充。第第3 3章章 单向散列函数单向散列函数Network and Information Security (3) 主循环:处理消息字块主循环:处理消息字块1(本例中只有本例中只有1个字块个字块),分成,分成16个字:个字: (01100001 01100010 01100011 24) W0=61626380 W1=00000000 W2=00000000 W3=00000000 W4=00000000 W5=00000000 W6=00000000 W7=00000000 W8=00000000 W9=00000000 W10=00000000 W11=00000
34、000 W12=00000000 W13=00000000 W14=00000000 W15=00000018 然后根据然后根据3.2.1节中描述的过程计算,其中,循环节中描述的过程计算,其中,循环“for t = 0 to 79”中,各步中,各步A、B、C、D、E的值如下:的值如下:第第3 3章章 单向散列函数单向散列函数Network and Information Security A B C D Et = 0: 0116FC3367452301 7BF36AE2 98BADCFE 10325476t = 1: 8990536D0116FC33 59D148C0 7BF36AE2 98B
35、ADCFEt = 2: A1390F088990536D C045BF0C 59D148C0 7BF36AE2t = 3: CDD8E11BA1390F08 626414DB C045BF0C 59D148C0t = 4: CFD499DECDD8E11B 284E43C2 626414DB C045BF0Ct = 5: 3FC7CA40 CFD499DE F3763846 284E43C2 626414DBt = 6: 993E30C1 3FC7CA40 B3F52677 F3763846 284E43C2t = 7: 9E8C07D4 993E30C1 0FF1F290 B3F52677
36、F3763846t = 8: 4B6AE328 9E8C07D4 664F8C30 0FF1F290 B3F52677t = 9: 8351F929 4B6AE328 27A301F5 664F8C30 0FF1F290t =10: FBDA9E89 8351F929 12DAB8CA 27A301F5 664F8C30第第3 3章章 单向散列函数单向散列函数Network and Information Security 字块1处理完后,Hi的值为: H0 = 67452301 + 42541B35 = A9993E36 H1 = EFCDAB89 + 5738D5E1 = 4706816A
37、 H2 = 98BADCFE + 21834873 = BA3E2571 H3 = 10325476 + 681E6DF6 = 7850C26C H4 = C3D2E1F0 + D8FDF6AD = 9CD0D89D (4) 输出:消息摘要 = A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D也就是说abc的散列函数值为:第第3 3章章 单向散列函数单向散列函数Network and Information Security3.3.4 SHA1与MD5的比较SHA1与MD5的比较如表 所示。 SHA-1MD5Hash值长度160 bit128 bit分组
38、处理长度512 bit512 bit步数80(420)64(416)最大消息长264 bit不限非线性函数3(第第2、4轮轮相同相同)4常数个数464第第3 3章章 单向散列函数单向散列函数Network and Information Security3.3.3 SHA1与MD5的比较SHA1与MD5的比较如表3-1所示。表3-1 SHA-1与MD5的比较 SHA-1MD5Hash值长度160 bit128 bit分组处理长度512 bit512 bit步数80(420)64(416)最大消息长264 bit不限非线性函数3(第第2、4轮轮相同相同)4常数个数464第第3 3章章 单向散列函
39、数单向散列函数Network and Information Security3.3.3 SHA1与MD5的比较SHA1与MD5的比较如表3-1所示。表3-1 SHA-1与MD5的比较 SHA-1MD5Hash值长度160 bit128 bit分组处理长度512 bit512 bit步数80(420)64(416)最大消息长264 bit不限非线性函数3(第第2、4轮轮相同相同)4常数个数464第第3 3章章 单向散列函数单向散列函数Network and Information Security3.3.3 SHA1与MD5的比较SHA1与MD5的比较如表3-1所示。表3-1 SHA-1与MD
40、5的比较 SHA-1MD5Hash值长度160 bit128 bit分组处理长度512 bit512 bit步数80(420)64(416)最大消息长264 bit不限非线性函数3(第第2、4轮轮相同相同)4常数个数464第第3 3章章 单向散列函数单向散列函数Network and Information Security3.3.3 SHA1与MD5的比较SHA1与MD5的比较如表3-1所示。表3-1 SHA-1与MD5的比较 SHA-1MD5Hash值长度160 bit128 bit分组处理长度512 bit512 bit步数80(420)64(416)最大消息长264 bit不限非线性函
41、数3(第第2、4轮轮相同相同)4常数个数464第第3 3章章 单向散列函数单向散列函数Network and Information Security3.3.4 SHA1与MD5的比较SHA1与MD5的比较如表3-1所示。表3-1 SHA-1与MD5的比较 SHA-1MD5Hash值长度160 bit128 bit分组处理长度512 bit512 bit步数80(420)64(416)最大消息长264 bit不限非线性函数3(第第2、4轮轮相同相同)4常数个数464ft (B,C,D) = (B ? C) ?(B ? D) (0t19)ft (B,C,D) = B C D (20t39)ft
42、(B,C,D) = (B ? C) ?(B ? D) ?(C ? D) (40t59)ft (B,C,D) = B C D (60t79)F(X,Y,Z) = (X ? Y)? (X) ? Z)G(X,Y,Z) = (X ? Z) ?(Y ? (Z)H(X,Y,Z) = X Y ZI(X,Y,Z) = Y (X ?(Z)第第3 3章章 单向散列函数单向散列函数Network and Information Security根据各项特征,简要地说明它们间的不同。根据各项特征,简要地说明它们间的不同。(1 1)安全性:)安全性:SHA-1SHA-1所产生的摘要较所产生的摘要较MD5MD5长长323
43、2位。若两种位。若两种散列函数在结构上没有任何问题的话,散列函数在结构上没有任何问题的话,SHA-1SHA-1比比MD5MD5更更安全。安全。(2 2)速度:两种方法都考虑了以)速度:两种方法都考虑了以3232位处理器为基础的系位处理器为基础的系统结构,但统结构,但SHA-1SHA-1的运算步骤较的运算步骤较MD5MD5多了多了1616步,而且步,而且SHA-1SHA-1记录单元的长度较记录单元的长度较MD5MD5多了多了3232位。因此若是以位。因此若是以硬硬件来实现件来实现SHA-1SHA-1,其速度大约较,其速度大约较MD5MD5慢慢25%25%。(3 3)简易性:两种方法都相当的简单,
44、在实现上不需要)简易性:两种方法都相当的简单,在实现上不需要很复杂的程序或是大量的存储空间。然而总体上来讲,很复杂的程序或是大量的存储空间。然而总体上来讲,SHA-1SHA-1每一步的操作都较每一步的操作都较MD5MD5简单简单。 第第3 3章章 单向散列函数单向散列函数3.3.5 SHA-512算法算法 SHA-512输出消息摘要的长度为输出消息摘要的长度为512位。位。输入输入被处理成被处理成1024位的块位的块 ,处理过程由以下步骤组,处理过程由以下步骤组成:成:Network and Information Security第第3 3章章 单向散列函数单向散列函数Network and
45、 Information Security(2)填加长度。 填充后 消息的长度恰为1024bit的整数倍。(1)填充。若k是消息长度,则计算填充消息长度的公式是:1024-(k+128)mod 1024 ,128位用来放消息长度。(4)以1024bit的块(16个字)为单位处理消息,算法的核心是具有80轮运算的模块(3)初始Hash缓冲区。一个512bit的块用于保存Hash函数的中间值和最终结果。该缓冲区用8个64bit的寄存器(5)输出。所有的N个1024bit分组都处理完以后,从第N阶段输出的是512bit的消息摘要。第第3 3章章 单向散列函数单向散列函数(4)以)以1024bit块块
46、(16个字个字)为单位处理消息为单位处理消息,算法的核心算法的核心是具有是具有80轮运算的模块轮运算的模块 。 第一轮,缓冲区里的值是中间的散列第一轮,缓冲区里的值是中间的散列值值Hi-1。每一轮,如每一轮,如t轮,使用一个轮,使用一个64bit的值的值Wt,其中,其中0t79表示轮数,该值由当表示轮数,该值由当前被处理的前被处理的1024bit消息分组消息分组Mi导出。导出。每一轮还将使用附加的常数每一轮还将使用附加的常数Kt。常数获得:前常数获得:前80个素数取三次方根,个素数取三次方根,取小数部分的前取小数部分的前64bit。第第80轮的输出和第一轮输入轮的输出和第一轮输入Hi-1相加产
47、相加产生生Hi。缓冲区里的缓冲区里的8个字和个字和Hi-1里的相应字独里的相应字独立进行模立进行模264的加法运算。的加法运算。Network and Information Security第第3 3章章 单向散列函数单向散列函数Network and Information SecurityHashHash函数在函数在WebWeb信息系统中的应用信息系统中的应用身份认证身份认证用户注册时第一次设置密码(用户注册时第一次设置密码(passwordpassword), ,密码不直接写数据密码不直接写数据库。?库。?系统用系统用HashHash函数计算函数计算用户密码用户密码的的HashHash
48、值,并保存到数据库中。值,并保存到数据库中。以后用户登录系统时,用户输入密码后,以后用户登录系统时,用户输入密码后, 系统首先计算它的系统首先计算它的HashHash值,值,然后从然后从数据库中取出对应的数据库中取出对应的HashHash值与其比较,值与其比较, 若若相同相同视为合法用户,视为合法用户, 否则不合法否则不合法。合法用户允许访问系统,合法用户允许访问系统, 不合法不能访问系统。不合法不能访问系统。第第3 3章章 单向散列函数单向散列函数Network and Information Security用户用户+密码密码 这种身份认证方式这种身份认证方式简单、简单、 高效,但安全性不
49、高效,但安全性不是很高。是很高。第第3 3章章 单向散列函数单向散列函数Network and Information Security3.4 消息认证码消息认证码(MAC) 目前的认证技术有对用户的认证和对消息的认证两种方式。 1 用户认证用于鉴别用户的身份是否是合法用户; 2 消息认证就是验证所收到的消息确实是来自真正的发送方且未被修改的消息,也可以验证消息的顺序和及时性。 消息认证实际上是对消息本身产生一个冗余的信息MAC(Message Authentication Code,消息认证码)附加在消息后面。 其组成是:消息+消息认证码,以认证消息的完整性 第第3 3章章 单向散列函数单向
50、散列函数Network and Information Security3.4.1 消息认证码基本概念消息认证码基本概念 与与密钥相关密钥相关的的单向散列函数单向散列函数通常称为通常称为MAC,即消息,即消息认证码:认证码:MAC=CK(M) 其中,其中,M为可变长的消息;为可变长的消息;K为通信双方共享的密为通信双方共享的密钥钥;C为单向函数。为单向函数。 MAC可为拥有可为拥有共享密钥的双方共享密钥的双方在通信中在通信中验证消息的验证消息的完整性完整性;也可被;也可被单个用户单个用户用来验证他的用来验证他的文件是否被改动文件是否被改动 。第第3 3章章 单向散列函数单向散列函数Networ