消息认证就是验证消息的完整性。当接收方收到发送方的报文时,接收方能够验证收到的报文是真实的未被篡改的。它包含两个含义:一个是验证信息的发送者是真正的而不是冒充的,即数据起源认证;二是验证信息在传送过程中未被篡改、重放或延迟等。
1.鉴别的需求
(1)泄露:将报文内容透露给没有拥有合法密钥的任何人或相关过程。
(2)通信量分析:发现通信双方的通信方式。在面向连接的应用中,连接的频率和连接持续时间就能确定下来。在面向连接或无连接的环境中,通信双方的报文数量和长度也能确定下来。
(3)伪装:以假的源点身份将报文插入网络中。这包括由敌方伪造一条报文却声称它源自授权的实体。另外,还包括由假的报文接收者对收到报文发回假确认,或者不予接受。
(4)内容篡改:篡改报文的内容,包括插入、删除、调换及修改。
(5)序号篡改:对通信双方报文序号的任何修改,包括插入、删除和重排序。
(6)计时篡改:报文延迟或回放。在面向连接的应用中,一个完整的会话或报文的序列可以是之前某些有效会话的回放,或者序列中的单个报文能被延迟或回放。在无连接环境中,单个报文(如数据报)能被延迟或回放。
(7)抵赖:终点否认收到某报文或源点否认发过某报文。
解决前两种攻击的措施是加强报文的保密性。对付(3)~(6)攻击的方法称为报文鉴别。处理(7)攻击的机制称为数字签名。一般地,数字签名技术也能对付表中(3)~(6)的部分或全部攻击。
总之,报文鉴别是一个证实收到的报文来自可信的源点且未被篡改的过程。报文鉴别也可证实序列编号和及时性。数字签名是一种包括防止源点或终点抵赖的鉴别技术。
数据完整性机制有两种类型:一种用来保护单个数据单元的完整性;另一种既保护单个数据单元的完整性,也保护一个连接上整个数据单元流序列的完整性(对消息流的篡改检测)。
消息认证的检验内容应包括:证实报文的信源和宿源及报文内容是否遭到偶然或有意的篡改,报文的序号是否正确,报文的到达时间是否在指定的期限内。总之,消息认证使接收者能识别报文的源、内容的真伪、时间有效性等。这种认证只在相互通信的双方之间进行,而不允许第三者进行上述认证。
本节介绍两种用于产生一个鉴别符的函数。
(1)报文鉴别码(MAC):以一个报文的公共函数和用于产生一个定长值的密钥作为鉴别符。
(2)散列函数:一个将任意长度的报文映射为定长的散列值的公共函数,以散列值作为鉴别符。
2.报文鉴别码
消息验证码(Message Authentication Codes,MAC)由于采用共享密钥,是一种广泛使用的消息认证技术。它是使用一个密钥产生一个短小的定长数据分组,并将它附加在报文中。该技术假定通信双方,比如说A和B,共享一个共有的密钥K。当A有要发往B的报文时,它将计算MAC,MAC作为报文和密钥K的一个函数值。
发送方A要发送消息M时,A使用一个双方共享的密钥K产生一个短小的定长数据块,即消息校验码MAC=TK(M),发送给接收方B时,将它附加在报文中。
A→B:M||FK(M)
接收方对收到的报文使用相同的密钥K执行相同的计算,得到新的MAC。接收方将收到的MAC与计算得到的MAC进行比较,如果相匹配,那么可以保证报文在传输过程中维持完整性:
(1)接收者确信报文未被更改过。攻击者如果修改了消息,而不修改MAC,接收者重新计算得到的MAC将不同于发送方随信息发送的MAC。由于MAC的生成使用了双方共享的秘密密钥,攻击者不能够更改MAC来对应修改过的消息。
(2)接收者确信报文来自真实的发送者。因为没有其他人知道密钥,所以没有人能够伪造出消息及其对应的MAC。
利用MAC进行消息认证的过程如图8-7所示。
图8-7 认证码的使用
以上过程中,消息是明文传送的,故只提供消息认证而不提供保密功能。机密性可通过使用MAC算法之前或之后的加密来实现。以下过程提供认证与保密:
A→B:EK2(M||TK1 LM)
A→B:EK2 M||TK1[Ek2(M)]
{(www.xing528.com)
}
这里K1、K2均由A和B共享。
一般常规的加密能提供鉴别,同时也有已广泛使用的现成产品,为什么不简单地使用它而要采用独立的报文鉴别码呢?这主要是因为以下原因。
(1)有许多应用要求将相同的报文对许多终点进行广播,例如通知用户目的网络不通或军用控制中心发出警告信息。仅使用一个终点负责报文的真实性这一方法既经济又可靠。这样,报文必须以明文加对应报文鉴别码的形式广播。负责鉴别的系统拥有相应的密钥,并执行鉴别操作。如果鉴别不正确,其他终点将收到一个一般的警告。
(2)另一个可用的情形是一方有繁重的处理任务,无法负担对所有收到报文进行解密的工作量。仅进行有选择的鉴别,对报文进行随机检查。
(3)对明文形式的计算机程序进行鉴别是一项吸引人的服务。计算机程序每次执行时无须进行耗费处理机资源的解密。如果将报文鉴别码附加到该程序上,通过检查能随时确信该程序的完整性。
常用的构造MAC的方法包括:利用已有的分组密码构造,如利用DES构造的CBC-MAC。
3.散列(Hash)函数
散列函数(又称杂凑函数)是对不定长的输入产生定长输出的一种特殊函数,其中M是变长的,消息h=H(M)是定长的散列值或称为消息摘要。散列函数H是公开的,散列值在信源处被附加在消息上,接收方通过重新计算散列值来保证消息未被窜改。由于函数本身公开,传送过程中对散列值需要另外的加密保护(如果没有对散列值的保护窜改者可以在修改消息的同时修改散列值从而使散列值的认证功能失效)。
散列函数的目的是为文件、报文或其他分组数据产生“指纹”。要用于报文鉴别,散列函数H必须具有如下性质。
(1)H能用于任何大小的数据分组。
(2)H产生定长输出。
(3)对任何给定的M,H(M)要相对易于计算,使得硬件和软件实现成为实际可行。
(4)对任何给定的码h,寻找M使得H(M)=h在计算上是不可行的。这就是有些书中所称的单向性质。
(5)对任何给定的分组M,寻找不等于M的W,使得H(W)=H(M)在计算上是不可行的,称为弱抗冲突。
(6)寻找任何给定的(M,W)对,使得H(M)=H(W)在计算上是不可行的,称为强抗冲突。
注意到前两个性质使得散列函数用于消息认证成为可能。第2和第3个性质保证H的单向性:给定消息产生散列值很简单,反过来由散列值产生消息计算上不可行。这保证了攻击者无法通过散列值恢复消息。第4个性质保证了攻击者无法在不修改散列值的情况下替换消息而不被察觉。第5个性质比第4个性质更强,保证了一种被称为生日攻击的方法无法奏效。
散列码不同的使用方式可以提供不同要求的消息认证,这里列出如下四种:
(1)使用对称密码体制对附加了散列码的消息进行加密。这种方式与用对称密码体制加密附加检错码的消息在结构上是一致的。认证的原理也相同,而且这种方式也提供保密性。
(2)使用对称密码体制仅对附加的散列码进行加密。在这种方式中,如果将散列函数与加密函数合并为一个整体函数,这实际上就是一个MAC函数。
(3)使用公钥密码体制方式时,是用发送方的私有密钥仅对发送信息形成的散列码进行加密。这种方式与第二种方式一样提供认证,而且还提供数字签名。
(4)发送者将消息M与通信各方共享的一个秘密值S串接,然后计算出散列值,并将散列值附在消息M后发送出去。由于秘密值S并不发送,攻击者无法产生假消息。
下面将简单介绍两种重要的散列函数:MD5、SHA-1。
MD5报文摘要算法(RFC 1321)是由Rivest提出的。MD5曾是使用最普遍的安全散列算法。该算法以一个任意长度的报文作为输入,产生一个128bit的报文摘要作为输出。输入是按512bit的分组进行处理的。
安全散列算法(SHA)由美国国家标准和技术协会(NIST)提出,并作为联邦信息处理标准在1993年公布。1995年又发布了一个修订版,通常称之为SHA-1。SHA,是基于MD4算法的,并且它的设计在很大程度上是模仿MD4的。该算法输入报文的最大长度不超过264bit,产生的输出是一个1160bit的报文摘要。输入是按512bit的分组进行处理的。
这两种算法的优缺点比较如下。
(1)抗强力攻击的能力:对于弱碰撞攻击,这两个算法都是无懈可击的。MD5很容易遭遇强碰撞的生日攻击,而SHA-1目前是安全的。
(2)抗密码分析攻击的能力:对MD5的密码分析已经取得了很大的进展。而SHA-1有很高的抗密码分析攻击的能力。
(3)计算速度:两个算法的主要运算都是模232加法和按位逻辑运算,因而都易于在32位的结构上,实现SHA-1的迭代次数较多,复杂性较高,因此速度较MD5慢。
(4)存储方式:二者在低位字节优先与高位字节优先都没有明显的优势。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。