为什么要使用消息认证码(MAC)而非对称密钥?

问题:

看了消息认证码的介绍后,小丽心想“如果用对称密码将消息加密后再发送的话,是不是就不需要消息认证码了呢?”原因有下:

1.对称密码的密文只有使用和加密时相同的密钥才能正确解密;

2.如果解密密钥和加密密钥不同,解密之后也只能得到“看上去随机的杂乱消息”;

3.因此,只要解密之后得到的明文是正确的,就可以知道这条消息室由持有相同密钥的发送者加密的;

4.也就是说,只用对称密码就可以实现和消息认证码相同的功能。

请问小丽的想法正确吗?

解答:

小丽的想法部分正确,但并非完全正确。

的确,使用对称密码来对消息进行认证是可能的,实际上也存在这样的方法,但是这样的方法是有局限性的。

假设我们要发送的明文就是随机的比特序列,我们将明文用对称密码加密之后发送出去,当接受者收到密文并进行解密时,明文看上去就是一串随机的比特序列。那么这段密文是来自正确的接受者呢?还是来自不正确的发送者呢(伪装的发送者)呢?

“正确的发送者用正确的密钥加密的随机比特序列”和“不正确的发送者用错误的密钥加密的任意比特序列”,两者在解密后看上去都是随机的比特序列,因此无法对它们进行区别。

小丽的思考过程1~4中,3中的“解密之后得到的明文是正确的”这一点是有问题的。要判断“解密之后得到的明文是正确的”,就需要明文具备某种特定的结构(如存在头尾,或者是像英文文章一样存在概率偏向)。

注:这里的“看起来随机”是指对解密者而言。举一个例子:商品的数量为255,小丽对明文FF加密后得到L8F31,小明解密后得到FE,但小明并不能确认FE就是被篡改过后得到的明文,因为这个结果也在明文空间里

如果使用消息认证码,即便发送的是随机比特序列,我们也能够正确地对消息进行认证。

本质上来说,就是将消息完整性的认证从预定结构的正确性判断抽象到消息认证码单项散列函数的抗碰撞的性质上,从而使得消息本身可以使用任意结构;同时可认证性使用共享密钥保证。

题目来自:

《图解密码技术》第三版

https://zh.wikipedia.org/wiki/%E8%A8%8A%E6%81%AF%E9%91%91%E5%88%A5%E7%A2%BC

上一篇:【leetcode】Convert Sorted List to Binary Search Tree


下一篇:为什么要使用断路器Hystrix?