密码学与信息安全 第12章 散列算法和MAC算法.pptx

密码学与信息安全 第12章 散列算法和MAC算法.pptx

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
密码学与信息安全 第12章 散列算法和MAC算法

第12章 散列算法和MAC算法 第12章 散列算法和MAC算法 消息认证是用来验证消息完整性的一种机制或服务。产生消息认证符的函数分为如下三类: 消息加密:整个消息的密文作为认证符。 消息认证码(MAC):它是消息和密钥的函数,它产生定长的值,以该值作为认证符。目前有两种MAC:HMAC和CMAC 散列函数:它是将任意长的消息映射为定长的散列值的函数,以该散列值作为认证符。目前主要有:MD5,SHA-1,SHA256,SHA-384,SHA-512,Whirlpool 等。 在数字签名方案中也要用到散列函数。对需要签名的消息用一个函数,产生一个固定长度的消息摘要(Message Digest),最后对消息摘要进行签名,得到确定长度的签名消息。 典型的安全散列函数的总体结构 典型的安全散列函数的总体结构 散列函数将输入消息分为L个固定长度的分组,每一分组长为b位,最后一个分组不足b位时需要将其填充为b位,最后一个分组还需要一些空间保存输入的总长度。 散列函数中重复使用了压缩函数f,它的输入是前一步中得出的n位结果(称为链接变量)和一个b位分组,输出为一个n位分组。链接变量的初值由算法在开始时指定,其终值即为散列值,通常bn,因此称其为压缩函数。散列函数可归纳如下: CV0=IV=初始n位值 CVi=f(CVi-1,Yi-1) 1≤i≤L H(M)=CVL 安全散列算法 安全散列算法(SHA)是由美国标准与技术协会(NIST)设计,并于1993年作为联邦信息处理标准(FIPS 180)发布,修订版于1995年发布(FIPS 180-1),通常称之为SHA-1. SHA-1产生160比特的散列值。2002年,NIST发布了修订版2,FIPS180-2,其中给出了三种新的SHA版本,散列值长度依次为256,384和512比特。分别称为SHA-256,SHA-384, SHA-512。这些新的版本和SHA-1具有相同的基础结构,使用了相同的模算术和二元逻辑运算。2005年,NIST宣布了逐步废除SHA-1的意图,到2010年,逐步转而依赖SHA的其他版本。 安全散列算法 1.所有的长度以比特为单位 2.安全性是指对输出长度为n比特散列函数的生日攻击产生碰撞的工作量大约为2n/2 SHA-1 SHA-256 SHA-384 SHA-512 消息摘要长度 160 256 384 512 消息长度 264 264 2128 2128 分组长度 512 512 1024 1024 字长度 32 32 64 64 步骤数 80 64 80 80 安全性 80 128 192 256 SHA-512逻辑原理 + 为模264的逐字加 SHA-512逻辑原理 这个过程包含下列步骤: 步骤1:附加填充位。填充消息使其长度模1024与896同余,即长度≡896 (mod 1024),即使消息已经满足上述长度要求,仍然需要进行填充,因此填充位数在1到1024之间。填充由一个1和后续的0组成。 步骤2:附加长度。在消息后附加一个128比特的块,将其看做是128比特的无符号整数,它包含填充前消息的长度。 SHA-512逻辑原理 步骤3:初始化散列缓冲区。散列函数的中间结果和最终结果保存于512比特的缓冲区中,缓冲区用8个64比特的寄存器(a,b,c,d,e,f,g,h)表示,并将这些寄存器初始化为下列64比特的整数: a=6A09E667F3BCC908 e=510E527FADE682D1 b=BB67AE8584CAA73B f=9B05688C2B3E6C1F c=3C6EF372FE94F82B g=1F83D9ABFB41BD6B d=A54FF53A5F1D36F1 h=5BE0CD19137E2179 SHA-512逻辑原理 步骤4:以1024比特的分组(16个字)为单位处理消息。算法的核心是具有80轮运算的模块。每一轮,如t,使用一个64比特的值Wt,该值由当前被处理的1024比特消息分组Mi导出。每一轮还使用附加的常数Kt,其中0≤t≤79,用来表示轮数。这些常数如下获得:前80个素数取三次根,取小数部分的前64比特。第80轮的输出和第一轮的输入Hi-1进行模264相加产生Hi 步骤5:输出。所有的N个1024比特分组都处理完以后,从第N阶段输出的是512比特的消息摘要。 Ho=IV Hi=SUM 64(Hi-1,abcdefghi) MD=HN S

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档