MAC 消息认证码:同时验证来源和完整性

消息摘要、MAC(消息认证码)、数字签名扫盲贴 消息摘要与MAC的区别,消息摘要只能保证消息的完整性,MAC不仅能够保证完整性,还能够保证真实性。MAC不能保证消息的不可抵赖性,而数字签名可以保证。 阅读详情

MAC 是 Message Authentication Code,即消息认证码。

它的核心作用是同时验证:

  1. 消息完整性:消息有没有被篡改;
  2. 消息来源:消息是否来自持有正确密钥的一方。

相比单独 Hash,MAC 引入了密钥。因此,攻击者即使知道算法,也无法在没有密钥的情况下伪造合法认证码。

关键词

工程含义

MAC / HMAC

带密钥的摘要可同时验证来源和完整性。

1. MAC 是什么

MAC,全称是 Message Authentication Code,中文通常翻译为消息认证码。

它可以理解为:

使用密钥参与计算的消息摘要。

普通 Hash 只对消息内容计算摘要,任何人都可以计算。

而 MAC 不仅使用消息内容,还会使用一个只有通信双方知道的密钥。

因此,MAC 不只是判断“数据有没有变”,还可以判断:

发送方是否拥有正确密钥。


2. MAC 解决什么问题

在嵌入式系统中,MAC 主要解决两个问题。

2.1 验证完整性

完整性解决的是:

消息在传输或存储过程中有没有被修改?

如果攻击者修改了消息内容,但不知道密钥,就无法计算出正确的 MAC。

接收方重新计算 MAC 后,会发现结果不一致,从而拒绝这条消息。


2.2 验证来源

来源验证解决的是:

这条消息是不是合法对象发来的?

因为只有持有共享密钥的一方才能计算出正确 MAC,所以 MAC 可以证明发送方大概率拥有正确密钥。

这比单独 Hash 更安全。

单独 Hash 只能说明:

消息和摘要匹配。

而 MAC 可以进一步说明:

消息和认证码匹配,并且认证码是用正确密钥计算出来的。


3. MAC 的基本思想

MAC 的基本流程如下:

  1. 发送方准备消息内容;
  2. 发送方使用共享密钥和消息内容计算 MAC;
  3. 发送方把消息和 MAC 一起发送给接收方;
  4. 接收方使用同一密钥重新计算 MAC;
  5. 接收方把自己计算出的 MAC 与收到的 MAC 进行比较;
  6. 如果一致,说明验证通过;
  7. 如果不一致,说明消息可能被篡改,或者发送方不可信。

可以简化理解为:

发送方:
MAC = MAC_Algorithm(Key, Message)

接收方:
Expected_MAC = MAC_Algorithm(Key, Received_Message)

if Expected_MAC == Received_MAC:
    接受消息
else:
    拒绝消息

4. MAC 与 Hash 的区别

对比项

Hash

MAC

是否使用密钥

否

是

是否能发现数据变化

能

能

是否能证明来源

不能

能,前提是密钥安全

是否任何人都能计算

是

否

典型算法

SHA-256

HMAC-SHA256、AES-CMAC

典型用途

文件摘要、固件摘要

消息认证、挑战响应、设备认证

Hash 没有密钥参与,因此攻击者修改消息后,可以重新计算 Hash。

MAC 有密钥参与,攻击者即使修改消息,也无法在不知道密钥的情况下生成正确 MAC。


5. HMAC-SHA256

工程上常见的 MAC 实现是 HMAC-SHA256。

HMAC 的全称是 Hash-based Message Authentication Code,也就是基于 Hash 的消息认证码。

HMAC-SHA256 可以理解为:

使用 SHA-256 作为底层 Hash 算法,并按照 HMAC 规范结构引入密钥。

需要注意的是,HMAC-SHA256 不是简单地做:

Hash(Key + Message)

也不是简单地做:

Hash(Message + Key)

而是有一套标准化结构。

这样设计是为了避免简单拼接带来的安全风险。

因此,在 MCU 项目中,如果软件实现 MAC,应优先使用成熟密码库中的 HMAC-SHA256,而不是自行设计变体。


6. AES-CMAC

除了 HMAC-SHA256,嵌入式系统中也可能使用 AES-CMAC。

AES-CMAC 是基于 AES 分组密码构造的消息认证码。

它适合已经具备 AES 硬件加速模块的 MCU 或安全芯片。

常见选择可以这样理解:

场景

推荐考虑

MCU 有 SHA 硬件加速

HMAC-SHA256

MCU 有 AES 硬件加速

AES-CMAC

安全芯片提供固定认证接口

优先使用芯片支持的 MAC 算法

软件资源有限

选择成熟库中资源占用可接受的实现

具体项目中应根据芯片能力、性能、库支持、认证协议和安全等级综合选择。


7. Challenge-Response 挑战响应

MAC 常用于挑战响应认证。

挑战响应要解决的问题是:

如何证明设备拥有正确密钥,但又不把密钥发出来?

典型流程如下:

  1. 主机生成随机数 Challenge;
  2. 主机把 Challenge 发送给设备;
  3. 设备使用内部密钥对 Challenge 计算 MAC;
  4. 设备返回 Response;
  5. 主机使用相同密钥计算期望 Response;
  6. 主机比较设备返回值和本地计算值;
  7. 如果一致,认证通过。

流程可以表示为:

Host 生成 Challenge
Host → Device: Challenge

Device:
Response = HMAC(Key, Challenge)

Device → Host: Response

Host:
Expected = HMAC(Key, Challenge)

if Response == Expected:
    认证通过
else:
    认证失败


8. 为什么挑战响应可以防重放

如果设备每次认证都返回固定口令,攻击者只要抓包一次,就可以后续重复发送同样的数据。

这就是重放攻击。

同时截取 Challenge 和 Response 后,是否能重放,取决于 Challenge 是否具备一次性、随机性和上下文绑定。

如果 Challenge 每次由主机重新生成、不可预测、不重复,并且只在当前会话中有效,那么旧的 Challenge + Response 不能直接重放。

如果 Challenge 固定、重复、可预测,或者主机允许验证旧 Challenge,那么攻击者截取到一组 Challenge + Response 后,就可以进行重放攻击。


9. 嵌入式工程应用场景

9.1 耗材认证

主机需要判断耗材是否为合法耗材。

典型做法是:

  1. 主机读取耗材 SN;
  2. 主机生成 Challenge;
  3. 耗材安全芯片使用内部密钥计算 MAC;
  4. 主机验证 MAC;
  5. 验证通过后,再检查批次、有效期、使用次数等授权信息。

这里 SN 只是身份识别,MAC 才是身份认证。


9.2 传感器或探头认证

主机需要判断外接传感器、探头或模块是否可信。

可以通过 MAC 认证确认:

  • 探头是否为合法探头;
  • 探头是否持有正确密钥;
  • 探头是否被简单克隆;
  • 探头返回的数据是否可信。

9.3 通信报文完整性保护

对于控制命令、参数设置、状态上报等报文,可以在协议尾部增加 MAC 字段。

接收方验证 MAC 后再执行命令。

这样可以防止攻击者修改命令内容,例如把:

set_speed = 1000

篡改为:

set_speed = 10000

如果没有正确密钥,攻击者无法重新计算合法 MAC。


9.4 固件升级过程保护

固件升级中,MAC 可以用于保护升级过程中的数据块完整性。

不过,对于正式固件发布验证,更推荐使用数字签名。

原因是:

  • MAC 使用共享密钥;
  • 设备端也要保存同一个验证密钥;
  • 如果设备端密钥泄露,攻击者可能伪造升级包;
  • 数字签名只需要设备端保存公钥,更适合固件发布场景。

因此,MAC 可以用于传输过程保护,但固件可信来源验证通常应使用数字签名。


10. 工程注意事项

MAC 的安全性不仅取决于算法本身,还取决于工程实现。

10.1 密钥不能明文放在普通 Flash 中

MAC 安全依赖密钥安全。

如果密钥直接明文放在 MCU 普通 Flash 中,一旦攻击者通过调试口、烧录口、固件读取或漏洞提取密钥,就可以伪造合法 MAC。

更安全的做法包括:

  • 使用加密芯片;
  • 使用 MCU 安全存储区域;
  • 启用读保护;
  • 关闭量产设备调试口;
  • 密钥分散存储;
  • 产线安全烧录;
  • 避免密钥出现在日志和调试输出中。

10.2 Challenge 不能固定或可预测

挑战响应中,Challenge 必须具备随机性或不可预测性。

不推荐的做法包括:

  • Challenge 固定为常量;
  • Challenge 使用简单递增但无保护的计数;
  • Challenge 由低精度时间直接生成;
  • Challenge 重复使用;
  • Challenge 可以被攻击者提前预测。

更好的做法是使用硬件随机数、真随机数源,或安全芯片提供的随机数能力。


10.3 MAC 比对应避免早退出

普通字符串比较函数通常在发现第一个不同字节时就返回。

这会导致不同错误位置产生不同执行时间。

在高安全需求场景下,攻击者可能通过时间差分析逐步推测正确 MAC。

因此,MAC 比对应使用常量时间比较,避免早退出造成时序泄露。

示例思想如下:

int secure_compare(const uint8_t *a, const uint8_t *b, size_t len)
{
    uint8_t diff = 0;

    for (size_t i = 0; i < len; i++)
    {
        diff |= a[i] ^ b[i];
    }

    return diff == 0;
}

这段代码的思想是:无论前面字节是否相等,都遍历完整 MAC 长度。


10.4 不要自行设计 MAC 算法

不要自己设计类似下面的算法:

MAC = Hash(Key + Message)
MAC = Hash(Message + Key)
MAC = CRC(Key + Message)
MAC = AES_Encrypt(Hash(Message))

这些看起来像安全方案,但可能存在结构性风险。

工程上应优先使用成熟算法,例如:

  • HMAC-SHA256;
  • AES-CMAC;
  • 安全芯片厂商提供的认证接口;
  • 经过验证的密码库实现。

10.5 共享密钥要考虑设备级隔离

如果所有设备使用同一个共享密钥,一台设备密钥泄露后,可能影响整批设备。

更好的做法是:

  • 每台设备使用唯一密钥;
  • 按批次派生密钥;
  • 使用根密钥派生设备密钥;
  • 密钥与设备 SN、证书或唯一 ID 绑定;
  • 产线烧录后不再明文导出密钥。

这样可以降低单台设备泄露后的影响范围。


11. MAC、签名与加密的区别

机制

解决的问题

密钥特点

典型用途

MAC / HMAC

完整性 + 来源验证

双方共享密钥

挑战响应、报文认证

数字签名

完整性 + 发布方认证

私钥签名、公钥验证

固件签名、证书链

加密

内容保密

对称或非对称密钥

保护敏感数据内容

简单理解:

MAC 证明:对方知道同一个密钥;
签名证明:数据来自私钥持有者;
加密证明不了来源,只是隐藏内容。


12. 工程总结

MAC 是嵌入式认证中非常实用的工具。

它适合用于:

  • 低成本设备认证;
  • 低资源消息完整性保护;
  • 低延迟挑战响应;
  • 耗材、探头、传感器认证;
  • 主机与外设之间的报文认证。

MAC 的核心价值在于:

它把 Hash 的完整性能力,和密钥带来的身份可信能力结合在一起。

但是,MAC 的安全性强依赖于:

  • 密钥是否安全;
  • 随机数是否可靠;
  • 算法是否标准;
  • 实现是否正确;
  • 设备密钥是否具备隔离性。

因此,工程上应优先使用 HMAC-SHA256、AES-CMAC 或安全芯片提供的认证方案,不建议自行设计变体。

密码学入门——消息认证码 使用消息认证码可以确认自己收到的消息是否就是发送者的本意,也就是说,使用消息认证码可以判断消息是否被篡改,以及是否有人伪装成发送者发送了该消息。消息认证码(Message Authentication Code,MAC)是一种用于验证消息完整性和真实性的算法。它通过将消息和密钥作为输入,生成一个固定长度的代码,称为 MAC,来保证消息的完整性和真实性。MAC 算法通常使用对称密钥密码学算法,如DES、AES等,并且需要密钥的共享才能进行验证。 阅读详情

相关推荐

【项目实战】消息认证码MAC

MAC,Message Authentication Code,消息认证码,简称MACMAC,是一种安全机制。MAC,用于验证数据的完整性和真实性。

奶爸的编程之路,也就一周冷个三天 1089

深入解析消息认证码(MAC)算法:HmacMD5与HmacSHA1

消息认证码(MAC)算法是确保消息完整性和身份验证的重要技术。HmacMD5和HmacSHA1作为两种常见的MAC算法,分别基于MD5和SHA-1哈希函数进行构建。虽然HmacMD5和HmacSHA1在一定程度上提高了消息传输的安全性,但由于MD5和SHA-1自身存在的潜在安全隐患,使得这两种算法在实际应用中可能面临一定的风险。因此,在选择消息认证码算法时,应优先考虑使用基于更安全哈希函数的Hmac算法,以确保数据的安全传输。

码到三十五 1万+

Android P HAL层添加HIDL实例(详细实现步骤)

Android P HAL层添加HIDL实例 本文将介绍如何在P OS上添加HIDL实例,简单增加seLinux策略使得可以在system_service调用测试,并用模拟器emulator验证。 调用过程为 APP->TestManager->TestService->ITast.hal 文章目录Android P HAL层添加HIDL实例实现过程一 、hardware部分1...

sinat_18179367的博客 1万+

听说这玩意可以验证消息完整性 —— 消息认证码(MAC)

消息认证码   消息认证码(Message Authentication Code)是一种确认完整性并进行认证的一种技术,简称 MAC。 验证过程 消息认证码在输入任意长度的消息和一个发送者与接收者之间的共享密钥后,输出固定长度的数据,该数据称为 MAC 值。 假设用户 A 和用户 B 使用共享密钥 K 进行通信。 A 要发送一段消息 M 给 B,A 首先用消息认证码算法将 K 和 M 计算出消息认证码 MAC。 然后将 MAC 和 M 一起发送给 B。 B 收到 MAC 和 M 后利用 M 和 K 计

Acx7的博客 6317

【算力网络】算力知识

尽管算力这个词在近年来很“火”,但其背后的含义,却很少有人真正了解

qq_42809645的博客 1万+

归因分析计算因子贡献度常见的方法

在归因分析中,我们一般都需要计算出每个因子的贡献度是多少,比如产品DAU上升,对年龄段维度进行拆解,看是不同年龄段的用户对DAU上升的贡献度是多少,一般根据指标的类型,计算贡献度的方法也不一样,下面就列出一些常见的归因分析贡献度的计算方法。

Hubans的博客 4万+

图解 | 消息认证码(MAC)到底解决了什么问题?还有什么问题是它解决不了的?

消息认证码(Message Authentication Code,MAC)是一种用于验证数据完整性和来源可信性(对消息进行认证)的技术。它通常由一个密钥和被保护的消息通过特定算法计算得出,接收方可以使用相同的密钥(共享密钥)来验证发送者是否真的发送了这条消息,防止被篡改和伪造。常用的SSL/TLS、IPsec协议均使用了MAC技术。

所有成功的背后,都是痛苦的坚持,所有的痛苦,都是傻瓜般的不放弃! 2936

wxComboBox类的使用方法及示例代码

其中,parent表示该控件的父窗口,ID_COMBOBOX是该控件的ID,用于在事件处理函数中区分不同的控件,"默认选项"是下拉列表框的默认选项,options是wxArrayString类型的数组,用于存储下拉列表框中的选项,style可以指定wxComboBox的样式。wxComboBox是wxWidgets中的一个常用控件,它可以被用来显示一组在下拉列表框中的选项,并允许用户从中选择一个选项。上述就是wxComboBox类的基本使用方法,使用这个控件可以方便地实现下拉列表框的功能。

学习使你进步。 713

消息认证码(MAC)

消息认证码(MAC,Message Authentication Code)是一种用于验证消息完整性和确保消息来源真实性的加密技术。MAC通过将消息(例如,文件、数据包等)和一个秘密密钥作为输入,生成一个短小的固定长度的值(即MAC值或MAC标签)。接收方使用相同的密钥和相同的算法重新计算并验证这个MAC值,以确保消息在传输过程中未被篡改,并验证消息是由持有共享密钥的发送方发送的。

坚定目标,超越自我 2312

Docker Desktop 从 C 盘迁移到 D 盘的正确方法

本文介绍了三种将Docker数据目录从C盘迁移到D盘的方案。方案1针对WSL2用户,通过导出/导入虚拟磁盘实现迁移;方案2采用软链接方式,适合所有Docker模式;方案3则建议重装Docker到D盘。其中WSL2迁移方案(方案1)最为稳定可靠,推荐使用。文章详细说明了各方案的操作步骤及注意事项,并提供了迁移后常见问题的解决方法,帮助用户彻底解决Docker占用C盘空间的问题。

sg_knight的专栏 2178

功能安全Safety Case构建方法论

本文系统阐述了功能安全认证中SafetyCase的构建方法。SafetyCase是一套结构化论证体系,通过Claim-Argument-Evidence(CAE)逻辑链证明系统安全性,包含系统级、技术安全级和实现级三层论证。文章详细介绍了SafetyCase的核心框架、与FMEDA等验证方法的关系、工程化实施步骤,以及常见失效模式。特别强调SafetyCase连接理论、实现与证据的桥梁作用,是功能安全认证的灵魂文件,要求将分散的安全活动组织成完整的逻辑论证。

VehSwHwDeveloper的博客 578

认证篇——消息认证码

目录 一、消息认证码介绍 1)消息认证码的使用步骤: 2)消息认证码的密钥配送问题: 3)消息认证码的实例: 4)消息认证码的实现: 二、HMAC(可忽略) 三、对消息认证码的攻击 四、消息认证码无法解决的问题 一、消息认证码介绍 消息认证码(Message authentication code)是一种确认完整性并进行认证的一种技术,简称MAC 消息认证码在输入包括任意长度...

锦瑟常思的博客 1万+

PCL 从LAS文件中获取点云的颜色【2026最新版】

PCL从LAS文件中获取点云的RGB信息(pcl::PointXYZRGB)并进行可视化。博客长期更新,本文最新更新时间为:2026年5月4日。

点云侠的博客 1720

密码学工具4——消息认证码(MAC最全版)

消息认证码,,又称为消息鉴别码、文件消息认证码、讯息鉴别码和信息认证码,是将原消息经过一系列特定算法后得到一小段信息,可以检查原消息的完整性以及身份验证。通过消息认证码可以检查出原消息是否被篡改,也可以检查消息的来源。消息认证码的输入包括和一个发送者和接收者之间的,可以输出,即MAC值。消息认证码与单向散列函数类似可以输出固定长度的输出值,但是消息认证码算法需要使用密钥,进行消息通信时,没有共享密钥的一方,无法验证消息认证码,故基于共享密钥可以实现消息的认证功能;

WillsonZ的博客 2893

玩转企业微信群机器人:一份超详细的Webhook消息推送指南

企业微信群机器人是一个连接内部协作与外部服务的强大桥梁。通过灵活运用本文介绍的各种消息类型,你可以构建出丰富多彩、信息明确的自动化通知系统,极大地提升团队沟通效率。现在,就动手试试,将你的第一个机器人集成到工作流中吧!如果你有任何有趣的机器人应用场景或遇到了问题,欢迎在评论区留言交流!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3977

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

消息认证码

消息认证码是一种确认完整性并进行认证的技术。 1、作用 (1)保证数据未被篡改 (2)保证数据的来源 2、单向散列函数与消息认证码的比较 3、认证步骤 ...

weixin_42094659的博客 1290

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SSL和TLS协议的消息认证码(MAC)

SSL/TLS协议中的消息认证码(MAC)是保障数据完整性和真实性的核心机制。早期版本(如TLS 1.2)采用HMAC算法,通过密钥派生生成校验值,并与加密步骤分离。TLS 1.3则简化为AEAD算法,将加密与认证合二为一,提升效率与安全性。MAC通过序列号机制防止重放攻击,其安全性依赖密钥保密性和算法强度。历史漏洞(如POODLE攻击)促使协议不断改进,最终TLS 1.3通过AEAD从根本上解决了传统"加密+MAC"模式的安全缺陷。

前端技术的学习整理 1359

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

229-加密之消息认证码MAC和HMAC

加密之消息认证码MAC和HMAC 消息认证码 什么是消息认证码??? 我们来举个例子 我们假设现在有两家银行 银行A和银行B 如果现在银行A给银行B发送了一条请求 张三给李四汇款1000元 银行B接收到这个请求就会执行 张三给李四汇款1000元 如果现在有一个黑客伪装成银行A 也发送了这样的请求 那么银行B就必须要验证这条消息是不是银行A发送的 所以就要用到消息认证码 ...

Lich Howger 1715

密码学学习笔记(三):MAC - 消息认证码

MAC在对称密钥设置中提供真实性/完整性预期的安全级别:所选消息下的不可伪造性攻击(UF-CMA),无法通过错误检测代码实现CBC-MAC是一种基于伪随机函数的安全构造,HMAC是另一个基于散列函数的函数MAC不提供防止重放攻击的保护MAC不提供不可否认性注:缩写的密码原语可以看之前的笔记,都有介绍过。

weixin_54634208的博客 2672

消息认证码:守护数据完整性的 “密码卫士”——HMAC、CMAC、GMAC 深度解析

消息认证码(MAC)是保障数据完整性和来源真实性的核心技术。本文介绍了MAC三大主流算法:HMAC、CMAC和GMAC。HMAC基于哈希函数,兼容性强但速度较慢,适用于API签名等场景;CMAC基于分组密码,支持加密认证一体化,适合金融交易等短消息认证;GMAC基于流密码模式,并行计算速度快,适用于5G传输等大数据场景。选择MAC算法需根据具体需求:通用性选HMAC,加密认证一体化选CMAC,高速处理选GMAC。密钥安全是MAC有效性的核心保障。

2034

信息安全: MAC(消息认证码)算法,保护数据完整性和真实性的利器

消息认证码(Message Authentication Code,简称 MAC)是一种通过使用秘密密钥生成的,用于验证消息完整性和真实性的码。MAC 能够确保消息在传输过程中未被篡改,并且发送者的身份是可信的。K_o(外部密钥块)和K_i(内部密钥块)。。。最终的哈希值就是 HMAC 的输出。使用密钥对零块进行加密,生成一个中间密钥K1。对K1进行左移操作,并根据最高位的值对生成的值进行异或操作,得到第二个中间密钥K2。将消息分成若干块,对每个块进行加密,最后一块使用K1或K2进行加密。

十年运维开发经验的王义杰在此分享自己的知识和经验 2068

内存加密,消息认证码以及完整性树

Memory Security

谈论现实 1380

物联网安全-消息认证码

消息认证码(Message Authentication Code) 是一种确认完整性并进行认证的技术,简称 MAC。使用消息认证码可以确认自己收到的消息是否就是发送者的本意,也就是说可以判断消息是否被篡改,是否有人伪装成发送者发送了这条消息。消息认证码的输入包括任意长度的消息和一个发送者与接收者之间的共享密钥。输出固定长度的数据,输出的数据就是 MAC 值。   在上个章节我们讲到了单向散列函数,单向散列函数也可以用在检查消息的完整性。那消息认证码和单向散列函数的区别是什么呢?单向散列函数: 只有一个输入

物联网布道师 5697

消息认证码MAC(拥有密钥的单向Hash函数)的实现过程

认证的两个目的 1⃣️验证信息的发送者是合法的,实体认证,包括信源、信宿的认证和识别 2⃣️验证消息的完整性,验证数据在传输过程中合存储过程中是否被篡改、重放或延迟 MAC的性质 MAC和单向Hash函数一样,但是包括了一个密钥,只有拥有密钥的人才能鉴别这个hash函数,所以消息认证码MAC提供的可鉴别性是很有用的。 因为不同的钥匙会产生不同的Hash函数,如果钥匙t和消息x改变了都无法得到正确的Hash函数值,所以MAC能在验证发送者的消息没有经过篡改的同时又可以验证消息的发送者。即同时验证消息完整性和

weixin_45003794的博客 2394

[XJTU计算机网络安全与管理]——第七讲消息认证码和数字签名

[XJTU计算机网络安全与管理]——第七讲消息认证码和数字签名

weixin_47692652的博客 3569

消息认证码(MAC)与HMAC的关系

消息认证码(MAC)是一种密码学技术,用于验证消息的完整性和真实性。其核心原理是通信双方共享密钥,发送方用密钥和MAC算法生成消息标签(Tag),接收方重新计算并比对Tag验证消息。MAC具有密钥依赖性、抗碰撞性和不可逆性。常见实现方式包括基于哈希函数的HMAC、基于分组密码的CBC-MAC/CMAC,以及集成加密的认证加密模式(GCM/CCM)。其中HMAC采用双重哈希结构,公式为HMAC(K,M)=H((K⊕opad)||H((K⊕ipad)||M)),具有单向性。MAC的安全性主要体现在计算不可伪造性

qq_43326214的博客 1108
上一篇: 哈希算法:密码学的基础构件
下一篇: 对称密钥认证:主机和设备共享同一把密钥
Let's Chat Coding
博客等级 码龄3年 1020粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值