《第06章 数据完整性机制》由会员分享,可在线阅读,更多相关《第06章 数据完整性机制(74页珍藏版)》请在金锄头文库上搜索。
1、第6章 完整性验证机制,上课教师:田立勤,日 期:2010年10月,复习,1、请叙述非对称加密的算法步骤 2、对称密钥加密和非对称密钥加密的优缺点 3、如何结合二者做到安全的数据传输,实际系统中存在完整性威胁,例如,黑客可能将原来合法通信者要传的信息“命令你部坚守待援”改成“命令你部立即撤离阵地”,显然,如果黑客的这种攻击行为得逞,将会给战争带来严重的影响。 定义3.1 数据完整性 数据完整性是防止非法实体对交换数据的修改、插入、替换和删除,或者如果被修改、插入、替换和删除时可以被检测出来。数据完整性可以通过消息认证模式来保证。,基本思路,增加信息验证码对数据完整性进行验证 (1)发送方根据要
2、发送的原信息M0,利用验证码函数产生与M0密切相关的信息验证码C0; (2)发送方把原始信息M0和信息验证码C0合在一起,并通过网络发送给接收方; (3)接收方对所收到的原信息和验证码进行分离,假设分别为M1和C1,因为这两个信息可能已被被篡改;,基本思路,(4)接收方使用与原始信息相同的信息验证码函数(双方事先约定好的)对收到的信息部分M1计算其自己的信息验证码C2; (5)接收方将自己制作的接收方信息验证码C2同分离出来的信息验证码C1进行对比,如果相等,接收方断定收到的信息M1与用户发送的信息M0是相同的,如果不相等,则接收方知道原始信息已经被篡改过 ,其模型如下图所示。,基本思路,数据
3、完整性特性机制的评价标准,完整性验证的安全性 消息完整性安全要求对接收的数据的任何改动都能被发现,对于给定的消息m1和其验证码H(m1),找到满足m2m1,且H(m2)H(m1)的m2在计算上不可行 完整性 验证中加密的安全 数据完整性验证的一些机制需要对其中的内容进行加密,例如摘要,数据完整性特性机制的评价标准,数据完整性验证的信息有效率 数据完整性验证的有效率是指原信息部分长度与合并后总信息(包括原消息和验证码)的长度之比。 完整性验证算法的性能 数据完整性验证包括发送方计算验证码,进行加密,接收方重新计算验证码,进行解密,比较等。,(1)基于数据校验思想的 数据完整性验证机制,步骤1:A
4、计算数据M0的冗余码N0; 步骤2:A将前M0和N0合在一起,通过网络发送给B; 步骤3:B收到合并的信息后,将二者分开,设为M1和N1; 步骤4:B用与原始信息相同的循环冗余方法重新计算信息M1的冗余码N2; 步骤5:B将计算的冗余码N2同分离的冗余码N1进行对比,如果相等,B断定信息是完整的,如果不相等,则B断定信息是不完整的。,评价,能检测出数据发生错误的机制并不一定能对数据完整性检测有效 例如,如果攻击者修改原数据的同时也根据国际标准的CRC多项式重新计算CRC,并且替换原来的CRC,这时候虽然发送的数据和接收的数据已经不一致了,但由于原消息和CRC是匹配的,因此用CRC不能检测出来
5、解决方法:对要发送的数据进行加密,(2)基于错误检测码与对称密钥加密的完整性验证机制,步骤1:A用错误检测码算法F计算信息M0的错误检测码(FCS0); 步骤2:A将M0和FCS0合在一起,A使用K加密合并的信息,并通过网络发送给B; 步骤3:B收到加密的信息后,用同一密钥K把密文解密,并将二者分开,设为M1和FCS1;,(2)基于错误检测码与对称密钥加密的完整性验证机制,步骤4:B用与原始信息相同的错误检测码计算方法F重新计算信息M1的的错误检测码FCS2; 步骤5:B将计算的错误检测码FCS2同分离的错误检测码FCS1进行对比,如果相等,B断定信息是完整的,如果不相等,则B断定信息遭到篡改
6、。,评价,这个机制防止了攻击者同时把原信息和错误检测码替换并且保持它们之间的正确匹配关系的攻击,因为密钥只有双方知道,攻击者同时替换后没办法用双方的密钥K再重新加密。 这个机制的前提是需要双方共享对称密钥K,存在密钥的发布问题和缺点。如果改为非对称加密体制的话速度又太慢,因此要将二者结合。,(3)基于非对称密钥和对称密钥结合的完整性验证机制,步骤1:A计算信息M0的错误检测码(FCS0); 步骤2:A选定一次性对称密钥K1,用完即放弃,防止重放攻击; 步骤3:A取一次性对称密钥(K1),用B的公钥(K2)加密K1,结果设为Bk2(K1)。这个过程称为对称密钥的密钥包装(key wrapping
7、); 步骤4 A将M0和FCS0合在一起,并使用对称密钥(K1)加密合并后的数据,结果设为:Ak1(M0+FCS0),并通过网络将Bk2(K1)和Ak1(M0+FCS0)发送给B;,(3)基于非对称密钥和对称密钥结合的完整性验证机制,步骤5:B用A所用的非对称密钥算法和自己的私钥(K3)解密Bk2(K1),这个过程的输出是对称密钥K1; 步骤6:B用A所用的对称密钥算法和对称密钥K1解密Ak1(M0+FCS0),并将二者分开,设为M1和FCS1; 步骤7:B用与原始信息相同的错误检测码计算方法重新计算信息M1的的错误检测码FCS2; 步骤8:B将计算的的错误检测码FCS2同分离的错误检测码FC
8、S1进行对比,如果相等,B断定信息是完整的,如果不相等,则B断定信息遭到篡改。,评价,这个机制防止了攻击者替换和篡改信息的攻击外,解决了密钥的发布问题,A随机选定一次性对称密钥K1,用完即放弃,防止了重放攻击。 缺点:是需要计算误检测码,可以简化验证的步骤,不用计算错误检测码,一个最直接的方法是直接用加密方法实现数据完整性验证,(4)基于RSA的数字签名的完整性验证机制,步骤1:A用自己的私钥加密消息M,用EA私(M)表示; 步骤2:把加密的消息发送给B; 步骤3:B接收到加密的消息后用A的公钥解密,用公式DA公(EA私(M))表示; 步骤4:B根据解密后的明文是否有意义来进行消息完整性验证,
9、如果有意义,B认为数据是完整的,如果是无意义的乱码,则B认为的数据遭到篡改。,评价,在本机制中,参照物的依据就是解密后的信息是否有意义。 这个机制使用非对称密钥加密机制加密要发送的信息来验证数据的完整性,解决了密钥的分发问题。 由于A的公钥是公开的,任何人都可以解密A加密的消息,因此该机制不具有保密作用。 在完整性验证方面,即使攻击者C在中途截获了加密消息,能够用A的公钥解密消息,然后篡改消息,也没法达到任何目的,评价,这个机制有两个主要缺点: 第一个缺点是用非对称加密体制加密整个消息,加密的速度慢; 第二个缺点是发送的明文必须是有意义的明文,在某些场合下,有意义的明文并不好判断,例如二进制文
10、件,因此很难确定解密后的消息就是明文本身,为此对于二进制等文件还是需要通过增加额外验证码来进行完整性验证。,(5)基于消息认证码(MAC)的数据完整性验证机制,步骤1:A根据要发送的消息M0,利用密钥K通过MAC产生函数C产生MAC0=Ck(M0); 步骤2:A将M0和MAC0合在一起,并通过网络发送到B; 步骤3:B收到信息后,并将二者分开,设为M1和MAC1; 步骤4:B利用密钥K对收到的信息M1用与A相同的MAC产生函数C重新计算M1的验证码,设为MAC2, 步骤5:B比较MAC2和MAC1是否相同,如果相等,B断定数据是完整的,如果不相等,则B断定数据遭到篡改。,评价,这种机制使接收者
11、确信信息未被更改过,攻击者如果修改了消息M0,而不修改MAC,接收者重新计算得到的MAC将不同于接收到的MAC。 由于MAC的生成使用了双方共享的秘密密钥,攻击者不能够更改MAC来匹配修改过的消息。 这种机制也可以防止消息被整体替换,因为攻击者替换了消息,并计算自己的MAC,由于不知道K,无法再次生成正确的MAC。 没有保密作用,消息认证码(MAC)的计算,最后一轮迭代结束后,取结果的左边n位作为鉴别码。 信息的有效率为m/L,其中m为信息长度,n为鉴别码长度,L=m+n 缺点是:验证过程需要加密。,(6)基于消息摘要的完整性验证机制,步骤1:A根据要发送的消息M0,利用MD5、SHA-1等哈
12、希函数H(双方事先商定好的)产生消息摘要MD0; 步骤2:A通过网络将M0和MD0一起发送到B; 步骤3:B收到的信息设为M1,摘要设为MD1,B重新用A使用的产生摘要的函数H计算消息摘要,设为MD2 步骤4:B比较MD2和MD1是否相同,如果相等,B断定数据是完整的,如果不相等,则B断定数据遭到篡改。,评价,这个机制的优点是双方不需要共享密钥; 接收者确信信息未被更改过; 信息的有效率高。 消息摘要算法通常产生长度为128位或160位的消息摘要,即任何两个消息摘要相同的概率分别为2128或2160分之一,显然,这在实际上冲突的可能性极小。 如果攻击者同时修改信息及其摘要,接收者就无法判断其完
13、整性,为此要将摘要与加密结合。这样网络截获者不能同时修改消息M和摘要D。,消息摘要与数据的完整性,消息摘要(message digest),也称散列(hash)。 主要用于验证数据完整性,即保证消息在发送之后和接收之前没有被篡改。,消息摘要是消息的浓缩,要使得消息摘要的每一位与原消息的每一位都有关联(这种现象称为雪崩效应),这样只要原消息改变一点则消息摘要将发生巨大的改变(雪崩现象),消息摘要简介,计算消息摘要使用的技术是hash函数。 计算消息摘要的方法是:用散列(hash)函数把一段任意长的消息M(message )映射到一个小的固定长的数据D(digest 摘要)。 hash函数不是一种
14、加密,hash只是用来把一段任意长的数据M映射到一个固定长的数据D。 这个映射是单向的,就是说给你任何一个数据M,那么你可以轻易得到它hash后的对应定长数据D,但使其逆过程成为不可能。,消息摘要例子,摘要类似于纵向冗余校验(LRC,Longitudinal Redundancy Check)和循环冗余校验(CRC,Cyclic Redundancy Check) 下图显示了发送方的LRC计算。 LRC将位块组成列表(行),例如,如果要发送32位,则把其排成四行,然后计算每个列(共8列)有多少个1位 如果1位为奇数,则称为奇性,在阴影LRC行中用一个1位表示; 相反,如果1位为偶数,则称为偶性
15、,在阴影LRC行中用一个0位表示)。,消息摘要例子,消息摘要例子,每列计算奇偶位,生成一个新行,共八个奇偶位,成为整个块的奇偶位。这样, LRC实际上是原消息的消息摘要。 计算结束后将数据和LRC发送给接收方。接收方把数据和LRC分开,对数据块重新执行LRC运算,然后将得到的LRC值与从发送方收到的LRC值比较。如果两个LRC值相同,则可以相信发送方发来的信息没有在中途发生改变。,消息摘要的思想,消息摘要采用类似原理,但范围更大一些。 例如,假设数字4000要用4除,得到1000。则4可以作为4000的摘要。 一个要点是:将4000除以4总是得到1000。如果改变4000,则结果不再是4,即原
16、消息改了,则摘要一定会改变。 另一个要点是:如果只给出数字4而不给出更多信息,则无法追溯原来的公式41000=4000。即消息的摘要(这里是数字4)没有暴露原消息的任何信息(这里是数字4000),不能逆向返回(单向函数,与加密不同,不能解密),消息摘要的思想,另一个消息摘要的简单示例如图416所示。假设要计算数字7391743的消息摘要,则可以将数字中每个位与下一个位相乘(是0时排除),忽略乘积中的第一位。 这样,我们对数据块进行散列运算(或消息摘要算法),得到其散列或消息摘要要比原消息小得多。,一个简单消息摘要简例,两个消息摘要相同的概率,前面考虑的是非常简单的消息摘要。例如,如果前两位篡改为99,则摘要的结果不变,即两个不同的消息有相同的摘要,而且很容易求出 实际上,消息摘要的计算没有这么简单。消息摘要通常占128位以上,选择这么长的消息摘要是有目的的,是为了减少两个消息摘要相同的范围。,消息摘要要求,(1)给定某个消息,消息摘要应该相同。即同一个消息不能有不同的摘要。 也就是说不能出现一个原消息对应多个不同摘要的映射现象,否则会出现完整性检验错误,出