1、MAC这玩意是什么?

提起这个MAC我就不得不说一下消息摘要。

什么是消息摘要?

消息摘要是把任意长度的输入揉和而产生长度固定的伪随机输出的算法。消息摘要的主要特点有:

  • ①无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出,SHA-1的变体可以产生192比特位和256比特位的消息摘要。一般认为,摘要的最终输出越长,该摘要算法就越安全。

  • ②消息摘要看起来是“随机的”。这些比特看上去是胡乱的杂凑在一起的。可以用大量的输入来检验其输出是否相同,一般,不同的输入会有不同的输出,而且输出的摘要消息可以通过随机性检验。但是,一个摘要并不是真正随机的,因为用相同的算法对相同的消息求两次摘要,其结果必然相同;而若是真正随机的,则无论如何都是无法重现的。因此消息摘要是“伪随机的”。

  • ③一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。这正是好的消息摘要算法所具有的性质:输入改变了,输出也就改变了;两条相似的消息的摘要确不相近,甚至会大相径庭。

  • ④消息摘要函数是无陷门的单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,甚至根本就找不到任何与原信息相关的信息。当然,可以采用强力攻击的方法,即尝试每一个可能的信息,计算其摘要,看看是否与已有的摘要相同,如果这样做,最终肯定会恢复出摘要的消息。但实际上,要得到的信息可能是无穷个消息之一,所以这种强力攻击几乎是无效的。

  • ⑤好的摘要算法,没有人能从中找到“碰撞”,虽然“碰撞”是肯定存在的。即对于给定的一个摘要,不可能找到一条信息使其摘要正好是给定的。或者说,无法找到两条消息,使它们的摘要相同。

看完之后,发现这个玩意不就是进行了一个hash计算嘛(sha一下)。没毛病这样理解,讲一个信息计算个hash当成消息的digest。

消息认证码(Message Authentication Code,MAC)的概念与消息摘要相似,但是有一个差别。可以看到,消息摘要是消息的简单指印,消息摘要不涉及加密过程。相反,MAC要求发送方与接收方知道共享对称密钥,用其准备MAC因此,MAC涉及加密过程,下面介绍MAC的工作原理。

  • (1)A与B共享一个对称密钥K,是别人不知道。A计算MAC时,要将密钥K作用于消息M。
  • (2)A将消息M和MAC H1发送B。
  • (3)B收到M时,也用K对M求出MAC H2。
  • (4)B比较H1与H2,如果两者相同,则表明消息M没有被中途改变,否则B拒绝消息,因为消息M已经被中途改变。

再来看一个图:

MAC的意义如下:

  • (1)MAC向接收方B保证消息M没有被中途改变。这是因为,如果攻击者改变消息而不改变MAC(这里是H1),则接收方求出的MAC(这这里是H2)与其不同。计算MAC时,使用的密钥K是只有发送方A和接收方B知道,因此攻击者不知道密钥K,无法改变MAC。
  • (2)接收方B保证消息是从正确的发送方A发来的。由于只有发送方与接收方知道密钥K,别人不可能求出发送方所发的MAC(这里是H1)。

尽管计算MAC与加密过程非常相似,但是有一个重要不同,在对称密钥加密中,加密过程是可逆的,即加密和解密是相互镜像。但在MAC中,发送方与接收方都只进行加密过程,因此MAC算法不需要可逆,只要单向函数加密就可以了。

这里其实如果你想起我之前写过一篇HMAC就能便于理解。

2、MAC的类型

虽然所有Mac的最终目标都是相同的,但MAC有几种不同的类型。

一次MAC

一次消息认证码(OTMAC)是一种加密技术,可以用来提供数字消息自创建以来没有被篡改或更改的高水平的保证。OTMAC是一种消息认证代码(MAC)形式,使用一次性密钥创建消息的哈希。然后用发送者的私钥签名该散列,创建数字签名。接收者可以使用发送者的公钥来验证签名并确认消息没有被篡改。

Carter-Wegman MAC

Carter-Wegman Mac是一种用于验证消息完整性的消息认证代码。该消息认证码是使用消息发送者和接收者共享的密钥创建的。该消息认证码是使用哈希算法生成的,消息的哈希包含在消息本身中。当收到消息时,再次计算哈希,并将其与与消息发送的哈希进行比较。如果散列匹配,则消息没有被篡改,并且被认为是真实的。

HMAC

HMAC(基于哈希的消息认证代码)是一种消息认证代码,它使用加密哈希函数创建消息的摘要(或“消息认证代码”)。摘要可用于验证消息的真实性。HMAC是一种MAC,除了消息外,还使用密钥来生成摘要。

算法公式:HMAC(K,m) = H((K ⊕ opad) ∥ H((K ⊕ ipad) ∥ m))

MAC(Message Authentication Code,消息认证码算法)是含有密钥的散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加入了密钥。因次,我们也常把MAC称为HMAC(keyed-Hash Message Authentication Code)。

MAC算法主要集合了MD和SHA两大系列消息摘要算法。MD系列的算法有HmacMD2、HmacMD4、HmacMD5三种算法;SHA系列的算法有HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512五种算法。

经过MAC算法得到的摘要值也可以使用十六进制编码表示,其摘要值长度与参与实现的摘要值长度相同。例如,HmacSHA1算法得到的摘要长度就是SHA1算法得到的摘要长度,都是160位二进制码,换算成十六进制编码为40位。

HMAC和MAC在密码学上的区别:

  • MAC是一个散列映射关系
  • HMAC是构建MAC的一种方式

关于细节部分算法的部分可以看看这篇文章:
【HMAC-SHA256】

3、完美无缺?

那不可能

推荐一篇讲MAC很详细的文章【消息认证码(MAC)】

后续涉及到了我一定要好好学一学。

参考链接:
https://www.jianshu.com/p/1c3fd615ead8

浅浅学习一下消息认证码MAC(Message Authentication Code)相关推荐

  1. HMAC(1)消息认证码MAC算法

    1. 定义 MAC(Message Authentication Code) 算法是以消息本身和密钥作为输入,经过一系列计算产生一个消息哈希的算法,用来保证消息的数据完整性和消息的数据源认证. 2. ...

  2. JAVA加密解密之消息认证码算法(Message Authentication Code,MAC)

    消息认证码算法简介 在密码学中,消息认证码(英语:Message authentication code,缩写为MAC),又译为消息鉴别码.文件消息认证码.讯息鉴别码.信息认证码,是经过特定算法后产生 ...

  3. 认证篇——消息认证码

    目录 一.消息认证码介绍 1)消息认证码的使用步骤: 2)消息认证码的密钥配送问题: 3)消息认证码的实例: 4)消息认证码的实现: 二.HMAC(可忽略) 三.对消息认证码的攻击 四.消息认证码无法 ...

  4. 密码学入门(6):消息认证码

    密码学入门(6):消息认证码 文章目录 密码学入门(6):消息认证码 什么是消息认证码? 消息认证码的实现方式 HMAC 认证加密 重放攻击 防御重放攻击的方式 消息认证码无法解决的问题 参考 上次讲 ...

  5. 消息摘要算法与消息认证码简介

    消息摘要算法 消息摘要算法,也称为哈希算法或散列算法.消息摘要算法对一组输入数据进行计算,得到一个固定长度的输出摘要.消息摘要算法主要作用不是进行数据的加解密,而是校验数据的完整性.消息摘要算法很难从 ...

  6. 密码技术--消息认证码及go语言应用

    1.什么是消息认证码 消息认证码(message authorization code)是一种确认完整性并进行认证的技术,取了三个单词的首字母,简称为MAC 发送者:((原始数据) + 秘钥) * 哈 ...

  7. 【学习笔记】密码学入门(2) 单向散列函数,消息认证码,数字签名,证书

    [学习笔记]密码学入门(2) 单向散列函数,消息认证码,数字签名,证书 学习笔记 2 – 混合密码系统 在密码学入门(1)中提到了基本的密码形式,对称密码和公钥密码以及混合密码系统. 这一部分将学习到 ...

  8. 基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例

    HMAC(Hash-based Message Authentication Code):基于Hash的消息认证码,是一种通过特别计算方式之后产生的消息认证码(MAC),使用密码散列函数,同时结合一个 ...

  9. 密码学数学基础,群,阿贝尔群,阶,双线性对,哈希函数,消息认证码概述

    目录 抽象代数基础 群 阿贝尔群(Abelian Group) 阶(Order) 循环群(Cyclic Group) 双线性对 哈希函数H 消息认证码MAC 抽象代数基础 群 定义 群(Group), ...

最新文章

  1. Eclipse如何更改包名后,批量修改文件的包名
  2. 客制化NVRAM的以太网地址
  3. 操作系统原理 : 非连续的内存分配,分段,页表
  4. 计算机在轻化工程中的应用,计算机在轻化工程专业中的应用-中国大学mooc-题库零氪...
  5. TQ210——常见问题
  6. 宏基因组大数据分析的质量控制流程规范
  7. mysql管理应用_如何在PHP和MySQL中制作出色的库存管理应用程序
  8. CentOS7.4中搭建lnmp环境
  9. 记录——《C Primer Plus (第五版)》第九章编程练习第九题
  10. 心理正常与异常的区分_医学心理学:如何区分正常心理和异常心理?
  11. BZOJ3938 UOJ88:[集训队互测2015]Robot——题解
  12. 计算机视觉论文-2021-03-10
  13. excel技巧——F9键
  14. android 获取iccid imsi
  15. 【代老婆发】你是中介,你姐是黑中介,你们全家都是我爱我家的中介
  16. 人脸识别 人脸实名认证
  17. 线性代数_矩阵零空间的维度与奇异值的关系
  18. zephir-安装和初体验
  19. Blender建模模块:修复误挤出的面
  20. 2021年新微信小程序开发系统源码易客多小程序saas系统扫码点餐小程序支付宝小程序快速生成系统源码源代码

热门文章

  1. 用python 实现从fasta文件中获取登记码
  2. 大数据之spark学习记录二: Spark的安装与上手
  3. 获取layui表格单元格的数据_Layui数据表格之获取表格中所有的数据方法
  4. php laravel 入门教程,跟我学Laravel之快速入门
  5. 如何替换模型的骨干网络(backbone)
  6. telnet登录详细步骤
  7. unity 2D人物精灵动画控制
  8. 堆排序中每次堆调整后的次序
  9. ROS暑期学校暨人工智能与机器人视频回放和分享信息(2022)
  10. String转Json的几种方式