现实困境:
接收方接收到发送方发送的报文。但是接收方不确定接收到的报文是否是完整的,或者没有被第三方修改过。因此,接收方需要某种机制来确认接收到的报文是可靠的。
看图说话:
第一步:A将报文X用散列函数进行处理得到一串哈希值H。
第二步:使用公共密钥K对哈希值H进行加密得到报文鉴别码MAC。
第三步:将长度一定的报文鉴别码MAC附着在报文之后得到拓展报文。
第四步:将拓展报文发送出去。
第五步:B接收拓展报文,并分解MAC和报文(未加密)。
第六步:B用公共密钥K解密报文鉴别码MAC,得到散列值H。
第七步:B用散列函数对报文X进行处理,得到报文哈希值H(X)。
第八步:比对H和H(X),如果相等,那么说明报文是完整的。否则,丢弃。
反向假设:
如果第三方截获来拓展报文,修改来报文鉴别码,转发给B。那么B无法使用密钥K进行解密。
如果第三方截获来拓展报文,修改未加密的报文,转发给B。那么B计算得出的H(X)和H不相等。
至此,完成了报文完整性的鉴别工作。
涉及到的知识:对称加密,散列函数(MD5, SHA, HMAC)。
反思:假设A采用的不是对称密钥而是非对称加密,那又会得到什么结果呢?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。