问题:

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

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

为什么要使用消息认证码(MAC)而非对称密钥?的更多相关文章

  1. 消息认证码 - MAC (Message Authentication Code)

    消息认证包括两个目标 1消息完整性认证: 确保张三发给我的消息是完整的,在传输过程中没有被第三方篡改 2消息的来源认证: 确保这个数据是张三发给我的,而不是李四发给我的 第一个目标通常使用散列函数来达 ...

  2. 密码学奇妙之旅、03 HMAC单向散列消息认证码、Golang代码

    HMAC 单向散列消息认证码 消息认证码MAC是用于确认完整性并进行认证的技术,消息认证码的输入包括任意长度的消息和一个发送者和接收者之间共享的密钥(可能还需要共享盐值). HMAC是使用单向散列函数 ...

  3. Algorithm:Java加密解密之MAC(消息认证码)

    MD5 消息摘要(数字摘要) 它是把一个文本/文件 通过摘要函数(hash函数)计算出一个结果.然后把文本/文件和摘要结果一同发给接受者接受者接收到文件之后,也进行摘要,把两个摘要结果进行对比.如果一 ...

  4. 密码学初级教程(五)消息认证码MAC-Message Authentication Code

    密码学家工具箱中的6个重要的工具: 对称密码 公钥密码 单向散列函数 消息认证码 数字签名 伪随机数生成器 MAC能识别出篡改和伪装,也就是既可以确认消息的完整性,也可以进行认证. 消息认证码的输入包 ...

  5. 29.密码学知识-消息认证码MAC-6——2019年12月19日

    1. 消息认证码 1.1 消息认证 消息认证码(message authentication code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC. 思考改进方案? 从哈希函数 ...

  6. hmac库 密钥相关的哈希运算消息认证码

    # -*- coding: cp936 -*- #xiaodeng #python 2.7.10 #HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一 ...

  7. HMAC哈希消息认证码

    收藏 137 14   hmac 编辑 HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出.   中文名 哈希消息认证码 外文名 H ...

  8. MAC (Message Authentication Code,消息认证码算法)

    需要将密钥发送到对方,对方用该密钥进行摘要处理,进行摘要验证. //初始化KeyGenerator KeyGenerator keyGenerator= KeyGenerator.getInstanc ...

  9. 转: MAC认证码的说明

    转: http://blog.sina.com.cn/s/blog_4940e1fc01012vk3.html MAC(Message Authentication Code) 消息认证码(带密钥的H ...

随机推荐

  1. 非对称加密技术- RSA算法数学原理分析

    非对称加密技术,在现在网络中,有非常广泛应用.加密技术更是数字货币的基础. 所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密. 但是对于其原理大部分同学应 ...

  2. 10个鲜为人知的C#关键字

    在正式开始之前,我需要先声明:这些关键字对于偏向底层的程序员更加耳熟能详,对这些关键字不了解并不影响你作为一个合格的程序员. 这意味着这些关键字会让你在编写程序时得到更好的代码质量和可读性,enjoy ...

  3. tmux frequently asked questions

    tmux frequently asked questions How is tmux different from GNU screen?     tmux and GNU screen have ...

  4. MySQL5.6的optimizer_trace

    MySQL的explain是各种执行计划选择的结果,如果想看整个执行计划以及对于多种索引方案之间是如何选择的? MySQL5.6中支持这个功能,optimizer_trace 这个是mysql的参数, ...

  5. vimgdb安装

    vimgdb install ************** a) You need: vim-7.3.tar.bz2 http://www.vim.org/sources.php vimgdb- (t ...

  6. Struts2初探

    我记得美妙的瞬间:在我的面前出现了你,有如昙花一现的幻影 今天写一篇Struts2框架的,在很久很久以前,Struts2可谓是称霸江湖,纵然现在有后起之秀,但Struts2依然可以成为老牌的主流框架, ...

  7. OPENCV3——从入门到出门

    跑第一个程序的时候经过坑爹的各种设置终于能用了. 如果遇到问题就谷歌或者百度,大牛的博客会给出解决方案的. vs2010+opencv3 目标:把书上的程序挨个敲一遍跑一遍. 现在已经跑了七章了,还有 ...

  8. PHP+Redis 实例【一】点赞 + 热度 下篇

    这篇主要讲如何将数据保存回Mysql,但是里面还会涉及到如何将错误信息以及提示信息保存到文件里,方便以后的运维,再有就是如何使用PHP写进程BAT. Redis数据刷回数据库前的知识准备 首先针对上篇 ...

  9. SpringMvc架构下css、js、jpg加载失败问题

    SpringMvc架构下css.js.jpg加载失败问题 springMvc搭建成功后,页面出现一些错误,jsp.js等静态资源加载失败.导致页面没有显示任何样式以及 此处原因很简单,是因为相对路径在 ...

  10. PE文件格式分析

    PE文件格式分析 PE 的意思是 Portable Executable(可移植的执行体).它是 Win32环境自身所带的执行文件格式.它的一些特性继承自Unix的Coff(common object ...