第5章散列函数和消息鉴别
- 格式:ppt
- 大小:472.00 KB
- 文档页数:27
第七讲散列函数与消息认证码马春光machunguang@计算机科学与技术学院哈尔滨工程大学1 /•网络安全威胁:–被动攻击(Passive Attack):敌手通过侦听和截获等手段获取数据;–主动攻击(Active Attack):敌手通过伪造、重放、篡改、乱序等手段改变数据;图1 无线网络中的四种通信安全威胁(a)监听;(b)篡改;(c)伪造;(d)阻断2 /•消息认证(Message Authentication)的目的:–验证消息的完整性,确认数据在传送和存储过程中未受到主动攻击。
•消息认证的方式:–消息加密函数:加密整个消息,以消息的密文文件作为认证,可使用对称密码或公钥密码体制进行加密;–散列函数(Hash):将任意长度的消息变换为定长的消息摘要,并加以认证;–消息认证码(MAC):依赖公开的函数(密钥控制下)对消息处理,生成定长的认证标识,并加以认证;3 /提纲•1 散列函数–1.1 散列函数的定义–1.2 散列函数的通用结构–1.3 MD5•2 消息认证码–2.1 MAC函数–2.2 MAC的安全性–2.3 CBC-MAC•作业4 /提纲•1 散列函数–1.1 散列函数的定义–1.2 散列函数的通用结构–1.3 MD5• 2 消息认证码•作业5 /散列函数的定义•散列函数H 是一个公开的函数,它将任意长度的消息M变换为固定长度的散列码h 。
•h=H (M)–M:变长消息,H(M):定长的散列值•散列函数是一种算法,算法的输出内容称为散列码或者消息摘要。
•消息摘要要唯一地对应原始消息,如果原始消息改变并且再次通过散列函数,它将生成不同的消息摘要,因此散列函数能用来检测消息地完整性,保证消息从建立开始到收到为止没有被改变和破坏。
•运行相同算法的接受者应该收到系统的消息摘要,否则保温是不可信的。
•散列函数又称为:哈希(Hash )函数、数字指纹(Digital fingerprint)、压缩(Compression)函数、数据认证码(DataAuthentication Code)等6 /散列函数的要求•H 能用于任意大小的分组;•H 能产生定长的输出;•对任何给定的x,H(x)要相对易于计算,使得硬件和软件实现成为实际可能;•对任何给定的码h ,寻找x 使得H(x)=h 在计算上是不可行的,即单向性(one-way);•对任意给定的分组x,寻找不等于x 的y,使得H(x)=H(y)在计算上是不可行的,即弱抗冲突性(Weak Collision-free);•寻找对任意的(x, y) 对使得H(x)=H (y) 在计算上是不可行的,即强抗冲突性(Strong Collision-free);7 /提纲•1 散列函数–1.1 散列函数的定义–1.2 散列函数的通用结构–1.3 MD5• 2 消息认证码•作业8 /2.2 Hash函数的通用结构•由Ron Rivest于1990年提出MD4•几乎被所有Hash函数使用•具体做法:–把原始消息M分成一些固定长度的块Y i–最后一块padding 并使其包含消息M长度–设定初始值CV0–压缩函数f, CV i=f(CV i-1, Y i-1)–最后一个CV i为Hash值9 //提纲•1 散列函数–1.1 散列函数的定义–1.2 散列函数的通用结构–1.3 MD5• 2 消息认证码•作业11 /MD5 描述•1989年,Merkle提出Hash function模型•1990年,Ron Rivest提出MD4•1992年, Ron Rivest完成MD5 (RFC 1321) –/rfcs/rfc1321.html•在最近数年之前,MD5是最主要的Hash算法•现行美国标准SHA-1以MD5的前身MD4为基础•MD5(Message Digest)–输入:任意长度的消息–输入分组长度:512 bit–输出:128 bit 消息12 /(4)(3)13 /14/MD5 描述-(1)•消息填充•对消息进行填充,使其比特数与448模512同余,即填充长度为512的整数倍减去64,留出64比特在(2)中使用:•填充方法:填充比特串的最高位为1,其余各位均为0。
网络与信息安全第七讲消息鉴别与散列函数陈钟教授北京大学信息科学技术学院软件研究所--信息安全研究室chen@2008-2009年度北京大学研究生课程2009/03/30 NISC-07 ©CZ@PKU回顾与总结•对称密码算法–运算速度快、密钥短、多种用途(随机数产生、Hash函数)、历史悠久–密钥管理困难(分发、更换)•非对称密码算法–只需保管私钥、可以相当长的时间保持不变、需要的数目较小–运算速度慢、密钥尺寸大、历史短信息安全的需求•保密性(Confidentiality)•完整性(Integrity)–数据完整性,未被未授权篡改或者损坏–系统完整性,系统未被非授权操纵,按既定的功能运行•可用性(Availability)•鉴别(Authenticity)–实体身份的鉴别,适用于用户、进程、系统、信息等•不可否认性(Non-repudiation)–防止源点或终点的抵赖•……讨论议题•消息鉴别(Message Authentication)•散列函数(Hash Functions)定义•消息鉴别(Message Authentication):是一个证实收到的消息来自可信的源点且未被篡改的过程。
•散列函数(Hash Functions):一个散列函数以一个变长的报文作为输入,并产生一个定长的散列码,有时也称报文摘要,作为输出。
•数字签名(Digital Signature)是一种防止源点或终点抵赖的鉴别技术。
通信系统典型攻击1)窃听2)业务流分析3)消息篡改内容修改:消息内容被插入、删除、修改。
顺序修改:插入、删除或重组消息序列。
时间修改:消息延迟或重放。
4)冒充:从一个假冒信息源向网络中插入消息5)抵赖:接受者否认收到消息;发送者否认发送过消息。
两个概念•鉴别(Authentication):真伪性•认证(Certification)资格审查消息鉴别•鉴别的目的•鉴别模型•鉴别函数鉴别的目的•鉴别的主要目的有二:第一,验证信息的发送者是真正的,而不是冒充的,此为信源识别;第二,验证信息的完整性,在传送或存储过程中未被篡改,重放或延迟等。
散列函数、消息摘要与数字签名⼀,散列函数(Hash function)散列函数:任何⼀种能将任意⼤⼩数据映射为固定⼤⼩数据的函数,都能被称为散列函数。
散列函数的返回值称为散列值、散列码,摘要或者简单散列。
也就是说散列函数能将任意长度的输⼊变换成固定长度的输出,该输出就是散列值。
散列值空间通常远⼩于输⼊的空间。
散列函数的⼀些特性:消息的长度不受限制确定性:对于相同的输⼊(根据同⼀函数),它必须始终⽣成相同的散列值,如果两个散列值是不相同的,那么这两个散列值的原始输⼊也是不相同的,但是对于不同的输⼊可能会散列成相同的输出(哈希碰撞),所以不可能从散列值来确定唯⼀的输⼊值。
均匀性:良好的散列函数应该输⼊尽可能均匀的映射到输出范围上。
单向性:在加密应⽤程序中,通常期望散列函数实际上是不可逆的。
⼆,散列函数的应⽤1. 散列表散列函数通常与散列表(hash table)结合使⽤,使⽤散列表能够快速的按照关键字查找数据记录。
具体地,散列函数会先将关键字映射到地址集合中的某⼀个位置,然后通过这个地址来查找数据记录(也就是将关键字通过散列函数转换的地址来查找表中的数据)2. 加密散列函数由于散列函数的多样性,它们经常是专门为某⼀应⽤⽽设计的,⽐如为加密和验证信息完整性⽽设计的散列函数(⼜被称为单向散列函数、杂凑函数或者消息摘要函数),这种散列函数是⼀个“单向”操作:对于给定的散列值,没有实⽤的⽅法可以计算出⼀个原始输⼊,也就是说很难伪造,⽐如 MD5 这种散列函数,被⼴泛⽤作检测⽂件的完整性。
2.1 验证消息的完整性安全hash的⼀个重要应⽤就是验证消息的完整性:发送者将原⽂与摘要⼀起发送给接受者,然后接收者⽤同⼀个hash函数对收到的原⽂产⽣⼀个摘要,与发送者的摘要信息对⽐,如果相同,则说明收到的信息是完整的。
验证流程如下:在上述流程中,信息收发双发在通信前已经商定了具体的散列算法,并且该算法是公开的,如果消息在传递过程中被篡改,则该消息不能与已获得的数字指纹相匹配。
消息认证和散列(Hash)函数1 散列函数1.1散列函数的概念1.2 简单散列函数的构造1.3 作为消息认证的散列函数应具有的特性2 基于散列函数的消息认证方式2.1 对称密钥加密方式2.2 公开密钥与对称密钥结合的加密方式2.3公共秘密值方式在网络通信环境中,可能存在下述攻击:1.泄密:将消息透露给没有合法密钥的任何人或程序。
2.传输分析:分析通信双方的通信模式。
在面向连接的应用中,确定连接的频率和持续时间;在面向业务或无连接的环境中,确定双方的消息数量和长度。
3.伪装:欺诈源向网络中插入一条消息,如攻击者产生一条消息并声称这条消息是来自某合法实体,或者非消息接受方发送的关于收到或未收到消息的欺诈应答。
4.内容修改:对消息内容的修改,包括插入、删除、转换和修改。
5.顺序修改:对通信双方消息顺序的修改,包括插入、删除和重新排序。
6.计时修改:对消息的延时和重放。
7.发送方否认:发送方否认发送过某消息。
8.接收方否认:接收方否认接收到某消息。
其中,对付前两种攻击的方法属于消息保密性范畴;对付第3种至第6种攻击的方法一般称为消息认证;对如第7种攻击的方法属于数字签名;对付第8种攻击需要使用数字签名和为抗此种攻击而涉及的协议。
这样归纳起来,消息认证就是验证所收到的消息确实来自真正的发送方且未被修改的消息,它也可验证消息的顺序和及时性。
任何消息认证在功能上基本可看做有两层。
下层中一定有某种产生认证符的函数,认证符是一个用来认证消息的值;上层协议中将该函数作为原语使接收方可以验证消息的真实性。
产生认证符的函数类型通常可以分为以下三类:1.消息加密:整个消息的密文作为认证符。
2.Hash函数:它是将任意长的消息映射为定长的hash值得公开函数,以该hash 值作为认证符。
3.消息认证码(MAC):它是消息和密钥的公开函数,它产生定长的值,以该值作为认证符。
实际上消息认证码也属于Hash函数的范畴,它是带密钥的Hash函数。