Lauren与密码学8,消息认证码MAC

来源:互联网 发布:李约瑟难题的答案 知乎 编辑:程序博客网 时间:2024/05/23 13:30

Haorui: Lauren, 还记得我们之前讲的手套订单问题吗?

Lauren: 记得里面有很多安全问题,比如否认、抵赖,伪造、篡改等等。

Haorui: 是的,我们学的Hash函数可以解决篡改问题。

Lauren: 是的,我们只要计算一下订单的Hash值就可以知道这个订单在传送的过程中是否被人篡改了。这样说来,如果传输过程出现错误,Hash函数也可以检测出来。功能强大呀!

Haorui:  我们己经学习了随机数,主要用来作密码使用;对称加密算法、非对称加密算法,用来解决消息的机密性;哈希函数,用来解决消息的完整性。从今天开始,基本上不会讲新的算法了,需是用我们己经学过的知识,互相配合使用,一套套组合拳,解决不同的安全问题。

Lauren: 原来我们学习这么多了!我们的电子邮件系统用上Hash函数就不用担心传输错误,或者被篡改的问题了。

Haorui: 回到手套订单问题,我们来看看伪造问题,某人伪造了一个订单发给工厂。Hash函数能解决吗?

Lauren: 不能,Hash只能解决订单的正确性,也就是完整性问题。也就是说,我们不知道订单是否是从一个合法的客户发出来的。如何确认客户的合法性是个问题。

Haorui: 这有个主意,我们先对消息计算Hash值,然后对Hash值进行加密,比如用DES加密算法进行加密码。再把密码事先告诉工厂。工厂收到订单及加密的Hash值后,对Hash值进行解密到得Hash值后就可以验证订单的完整性了。

Lauren: Good idea. 密码只有工厂与客户知道,所以第三者无法伪造订单了。

Haorui: 这就是我们今天要讲的消息认证码,一个带对称加密的Hash函数。与Hash函数对比一下,就多一个加密步骤。见图8.1:


我们再看看具体的流程,与Hash函数的流程相相似。见图8.2:


-       首先,双方要共享一个对称密钥。

-       客户生成订单,计算HASH值并加密得到MAC值,然后将订单与MAC值发给工厂。

-       工厂对订单计算MAC值并与接收到的MAC对比。

-       两个MAC值相同,则证明订单有效。

Lauren: 所以我们用Hash算法加对称密码系统解决了伪造与篡改两个安全问题。干嘛不直接加密订单发给工厂呢,订单的内容而且是加密的。其它人还看不到。

Haorui: 这个就要加密函数来保证订单的完整性了,它不定能做到。再者,HASH值是固定的,一般在1K字节左右,比较小,加密起来比较快。

Lauren: 明白了,消息认证码算法长啥样?

Haorui:  可以用Hash函数算法来作为消息认证码的算法,我们称之为HMAC。当然也有其它的算法,比如HMAC-MD5, HHAC-SHA1。从命名可以看出,其主体算法用的不同的Hash函数。当然也有基于分组密码的MAC。如数据认证算法(DAA,Dataauthentication Algorithm),基于密码的消息认证码(CMAC,CipherMAC)。DAA是基于DES-CBC算法。CMAC基于AES3DES。

原创粉丝点击