来源:CSDN 
原文:https://blog.csdn.net/l243224118/article/details/83932434
作者:_你微笑时很美

MAC(消息认证码)解读

背景

在开放的计算和通信世界(例如Internet)中,我们会使用不可靠的媒介传输和存储信息。而对信息完整性(integrity)的校验在某些情景下就十分重要。基于密钥作完整性校验的方法常称为MAC(Message Authentication Code)。通常MAC在共享密钥的双方之间,校验相互传递的信息。

实现过程

使用 MAC 验证消息完整性的具体过程是:假设通信双方 A 和 B 共享密钥 K,A用消息认证码算法将 K 和消息 M 计算出消息验证码 Mac,然后将 Mac 和 M 一起发送给 B。B 接收到 Mac 和 M 后,利用 M 和 K 计算出新的验证码 Mac*,若 Mac*和Mac 相等则验证成功,证明消息未被篡改。由于攻击者没有密钥 K,攻击者修改了消息内容后无法计算出相应的消息验证码,因此 B 就能够发现消息完整性遭到破坏。

类别

消息认证码(MAC),在加密的过程中有两种方法,一种是用单向散列函数的实现,另一种是分组密码的实现。

单向hash函数实现


上图是MAC算法的的加密过程, 如上图所示,实现过程较为简单对要传输的消息加上一个通信双方共享的密钥,然后作一次hash运算,得到一个MAC值。传输消息时,连同MAC值一起发送给接收放,接收方收到信息后,自己再对信息作一次相同的hash运算得到另一个MAC值,与发送方传来的进行比对,若有差异则说明消息被篡改。

而MAC函数用单项hash函数加密时,MAC被称为HMAC(Hash Message Authentication Code).

这里对其进行简要介绍

HMAC (k,m) = H ( (k XOR opad ) + H( (k XORipad ) + m ) )

其中

H 是一个Hash函数, 比如, MD5, SHA-1and SHA-256,

k 是一个密钥,从左到右用0填充到hash函数规定的block的长度,如果密钥长度大于block的长度,就对先对输入key作hash。

m 是需要认证的消息,

+ 代表“连接”运算,

XOR 代表异或运算,

opad 是外部的填充常数(0x5c5c5c…5c5c, 一个block长度的十六进制常数constant),

ipad 是内部填充常数 (0x363636…3636,一个block长度的十六进制常数constant)。

特定HMAC实现需要选择一个特定的hash函数。这些不同的HMAC实现通常标记为:HMAC-MD5,HMAC-SHA1, HMAC-SHA256等等. 论文 [Bellare+96]对HMAC的安全性作了全面的分析。

分组密码实现(基于AES组)

AES(Advanced Encryption Standard),高级加密标准,是一种十分常见的对成加密算法。(ps:微信小程序加密传输就是用的AES加密算法)

分组加密的工作模式有ECB,CBC,CFB,OFB四种,其中CBC和ECB这两种模式比较常用。

CBC-MAC

当取AES作为MAC加密的分组密码时,一般采用CBC模式,所以通常称为基于AES的CBC-MAC,若需要产生认证码的消息为x,加密的AES密钥为k,则生成加解密的过程如下图所示

上图分别为CBC(密文分组链接方式)的加密和解密过程。可以看出不同于EBC(电子密码本模式),他在加密过程中,报文的不同分组之间是有联系的,增加了其安全性。

加密步骤如下:

1)首先将数据按照8个字节一组进行分组得到D1D2…Dn(若数据不是8的整数倍,用指定的PADDING数据补位)

2)第一组数据D1与初始化向量IV异或后的结果进行AES加密得到第一组密文C1(初始化向量I为全零)

3)第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2

4)之后的数据以此类推,得到Cn

5)按顺序连为C1C2C3…Cn即为加密结果。

解密是加密的逆过程,步骤如下:

1)首先将数据按照8个字节一组进行分组得到C1C2C3…Cn

2)将第一组数据进行解密后与初始化向量I进行异或得到第一组明文D1(注意:一定是先解密再异或)

3)将第二组数据C2进行解密后与第一组密文数据进行异或得到第二组数据D2

4)之后依此类推,得到Dn

5)按顺序连为D1D2D3…Dn即为解密结果。

这里注意一点,解密的结果并不一定是我们原来的加密数据,可能还含有补位数据,将其去掉才是最终的结果。

特点:

1.每个密文块依赖于所有的信息块,明文消息中一个改变会影响所有密文块,不容易主动攻击,安全性好于ECB,适合传输长报文

2.发送方和接受方都需要知道初始化向量(IV)

3.加密过程是串行的,无法被并行化(在解密时,从两个邻接的密文块可以得到一个平文块,因此解密过程可以并行执行)

OMAC

OMAC(One-key CBC-MAC),是从CBC-MAC改进而来,克服了CBC-MAC的一些缺陷。在2005年被NIST(美国国家标准与技术研究生院)列为推荐标准。

omac算法的核心是cbc-mac的一种变种,是基于一种叫xcbc的算法改进的。xcbc算法有效的解决了cbc-mac的一些安全方面的缺陷,但是需要三个密钥。有人在此基础上,改进了xcbc算法,并把它命名为one-key cbc-mac(omac).之后提交了omac1,在omac的基础了做了精简,并做了一些安全性分析。

上图是omac算法的执行过程,为了使用b比特块密码(E)和秘密密钥(k)生成消息(m)的l比特CMAC标签(t),首先生成两个b比特子密钥(k1和k2)使用以下算法(这相当于在有限域GF(2b)中乘以x和x2)设«表示标准左移运算符,⊕表示逐位排他或:

1.计算临时值k0 = Ek(0)
2.如果msb(k0)= 0,则k1 = k0 << 1,否则k1 =(k0 << 1)⊕C;其中C是一个仅取决于b的特定常数。 (具体来说,C是按字典顺序排列的第一个不可约度-b二元多项式的非前导系数,具有最小数量的1:64位为0x1B,128位为0x87,256位为0x425)
3.如果msb(k1)= 0,则k2 = k1 << 1,否则k2 =(k1 << 1)⊕C
4.返回MAC生成过程的密钥(k1,k2)

作为一个小例子,假设 b = 4,C = 00112,并且k0 = Ek(0)= 01012。然后k1 = 10102并且k2 =0100⊕0011= 01112。

CMAC标签生成过程如下:

1.将消息分成b位块m =m1∥…∥mn-1∥mn,其中m1,…,mn-1是完整的块。(空消息被视为一个不完整的块。)
2.如果mn是一个完整的块,则mn’=k1⊕mnmn’=k2⊕(mn∥10… 02)。
3.设C0 = 00 … 02
4.对于i = 1,…,n - 1,计算ci = Ek(ci-1⊕mi。
5.Cn = Ek(Cn-1⊕mn’)
6.输出t =msbℓ(cn)
验证过程如下:

1.使用上面的算法生成标记。
2.检查生成的标记是否与接收的标记相同。

MAC、HMAC、CBC-MAC、OMAC的介绍相关推荐

  1. Mac 上设置显示器相关参数介绍

    Mac 上设置显示器相关参数介绍 在 Mac 上,使用"显示器"系统偏好设置来调整分辨率和亮度,以及设置专用于支持各种专业媒体类型和相关制作工作流程的其他选项. 在"预置 ...

  2. Mac 截图工具 iShot Pro - 软件介绍、下载安装详细教程

    Mac 截图工具 iShot Pro -软件介绍.下载安装详细教程 iShot -优秀,功能齐全的区域截图,窗口截图,多窗口截图,长屏幕截图,shell截图,时间间隔截图,快速注释,纹理,颜色匹配,屏 ...

  3. Sketch 55 mac版(矢量绘图软件)新功能介绍

    Sketch 55 Mac版是Mac上一个创新和新的眼光看待矢量绘图软件.Sketch Mac版以简约的设计是基于无限的规模和层次的绘图空间,免费调色板,面板,菜单,窗口和控件.虽然使用简单,它提供了 ...

  4. mac系统共享服务器,mac共享服务器

    mac共享服务器 内容精选 换一换 本课程主要针对openEuler操作系统工程师在基础运维工作,以文件共享服务器的搭建和运维为案例,讲解openEuler操作系统的基础知识,并培养基础运维操作能力. ...

  5. mac系统共享服务器,mac 链接共享服务器

    mac 链接共享服务器 内容精选 换一换 本节操作介绍本地MacOS系统主机通过安装"Microsoft Remote Desktop for Mac"工具向Windows云服务器 ...

  6. mac时间机器文件服务器,Mac小技巧:时间机器的使用方法和细节

    时间机器是MacBook Pro上一个备份系统的内置软件,这款软件对于大多数工作者来说绝对是一款神器,能够让我们无限的找回到以前的Mac备份文件,防止一不小心删除了重要文件等问题,而且使用起来也是非常 ...

  7. tmac v6设置中文_Technitium MAC Address Changer(mac地址修改器) 免费版v6.0.7

    Technitium MAC Address Changer是一款用于更改变换机器MAC地址的软件.此软件能分析你的网络连接状态和使用的MAC地址,通过软件能将本机真实的MAC地址进行伪装,保护你的机 ...

  8. 视频播放器Mac Media Player Mac中文版

    mac视频播放器哪个好用?这里为大家分享一款免费的Mac媒体播放器,Mac Media Player for Mac几乎支持所有格式的媒体文件,不管是视频.音频还是照片,都可以在Mac Media P ...

  9. mac nginx php-fpm,Mac系统下搭建Nginx+php-fpm

    分享背景 由于一直在虚拟机的状态下开发PHP,尝试一下mac本地搭建环境.mac本身是自带Apache+php的,在低版本的mac系统中,mac中的php版本是5.6的版本. 本文分享的是在mac的1 ...

最新文章

  1. 同一肢体不同关节的运动想象过程中的多通道脑电图记录
  2. node sqlite 插入数据_使用 Sequelize 操作 Sqlite3 数据库
  3. ubuntu7.10中的apache的一些设置
  4. 简洁自适应个人码农主页源码
  5. qn模块java脚本_Qn271 对于网络编程 反射 IO 线程的一些一本入门程序 多多联系会加快 速度 WinSock-NDIS 269万源代码下载- www.pudn.com...
  6. Windows7压缩文件到最小的方法
  7. JAVA制作游戏脚本(1)---Robot机器人
  8. ASO优化关键词覆盖、曝光原理
  9. 苹果官网首页页面设计
  10. 微机原理与接口技术期末考试总结
  11. 怎么利用粉丝圈这个微信社区工具做好社群营销?我们是做教育行业
  12. linux下搜索文件和文件夹
  13. 随机森林模型sklearn_Sklearn_随机森林
  14. Oracle创建scott用户导入数据查看emp表
  15. firefox浏览器和火狐浏览器的驱动匹配问题,及对应的版本驱动下载(能解决99%问题)收藏
  16. 使用\begin{aligned} 出现 Environment aligned undefined.解决办法
  17. 算法 - 局部最优的避免
  18. 小牛N1S改装60A大单体宁德时代
  19. 单片机课设:基于MSP430F249的电子时钟设计
  20. 计算机及网络是把双刃剑,网络是一把双刃剑发言稿

热门文章

  1. Oracle + SQL 学习笔记
  2. 说说苹果 App Store 将下架长期不更新的App一事
  3. Win10 打开office软件提示应用程序无法正常启动(0xc0000142)怎么办?
  4. eclipse使用git如何merge
  5. 大学生求职企业招聘APP(服务端采用jsp+mysql,手机端采用android开发)
  6. 如何让AI智能语音助手更加智能
  7. 概率论笔记—大数定律与中心极限定理
  8. SAP WM初阶之事务代码LQ02
  9. 数学建模笔记 因子分析
  10. Linux基础——Ubuntu安装