密码学实战-消息认证码(内容详细+视频 信息安全专业的必修课)
本节内容,我们主要学习第三章节:消息认证码。包括,什么是消息认证码,消息认证码的安全性分析,消息认证码的实际应用,以及长度延展攻击分析等内容。
3.1 什么是消息认证码
消息认证码(message authentication code),简称MAC算法。消息认证码算法的输入,一个是消息体本身,一个是保密密钥,在两者的共同作用下,输出一个唯一的消息认证标签。也就是,给定相同的密钥和信息,总是会产生相同的认证标签。
在实际应用中,经常会通过浏览器登录web服务。如果是基于hash的cookie验证方法,首次登录的时候,用户通常提交用户名和口令,web服务器接收到用户名和口令后,将会给用户返回cookie内容,这里的cookie由用户名和用户名的hash值构成。等到再次登录的时候,用户只需要提交cookie内容作为凭证,就可以登录上服务。
实际上,由于hash算法的公开性,任何不法用户都可以构造自己的用户名和对应的hash值,作为cookie,提交给web服务。而,web服务在接收到该cookie后,会正常的调用hash算法来验证用户名的完整性,这样攻击者就可以冒充任何一个用户登录服务。那如何解决这种cookie的冒充问题呢,密码学原语中,引入了消息认证码算法,在首次登录的时候,web服务会输出一个由密钥和用户名,通过消息验证码算法,共同生成的认证标签。并把该认证标签和用户名作为cookie的内容返回给用户。这样,用户再次登录服务的时候,只需要凭据该cookie,就可以顺利登录。由于,攻击者不知道密钥的内容,也就无法通过mac算法构造出正确cookie内容,这样,就有效的阻止了攻击者的冒充行为。
3.2 消息认证码的安全性分析
- 我们来分析下,消息认证码的已知密文攻击。通常情况下,需要输入给定的密钥k和消息m,才可以输出唯一的消息认证标签。如果在密钥k未知的情况下,用户是无法计算出消息m的认证标签的。极限情况下,如果攻击者,拥有大量的消息及其对应的认证标签,想要通过这些信息,找出或者计算出,某个消息的认证标签,是不可能的。 只要密钥k保密,且足够随机,长度足够长,比如大于16个字节,那么,就无法从已知的明密文对中,构造出消息的认证标签。
- MAC算法可以加强抗碰撞性。MAC算法的碰撞,定义为,不同的消息X和消息Y,如果在相同的密钥k下,使得计算出的MAC值相同,则表明,X和Y发生了碰撞。那如何增强MAC算法的抗碰撞性呢,根据测算,带宽为1G的链路上,请求并获得264个认证标签,需要25万年。那么,我们从上一节课中的生日界限理论中知道,一个128比特的认证标签,攻击者需要进行264个在线请求,才能有50%的概率发生碰撞,而进行这么多次的在线请求所耗费的时间开销,已经足够大了,因此,一般采用128比特的认证标签,就可以保证足够的抗碰撞性。
- 消息认证码算法本身不具备防重放功能,那如何增加它的防重放特性呢。通常可以采用给消息增加计数器的方式,来判断是否为重放攻击报文。攻击者截获到报文后,将报文原封不动的进行再次请求,而计数器的递增特性保证了,已经出现过的消息报文,不再被服务接收,这就有效的防止了攻击者的重放攻击。
- 消息认证码容易受到时序攻击。所谓时序攻击,就是服务程序在验证认证标签时,会比较计算的标签与接收的标签是否相同。如果当前比较的时间与上一次不一样,那么,每次比较中,两个标签开始产生差异的位
