密码学基础-Hash、MAC、HMAC 的区别与联系

news2024/11/14 1:33:52

密码学基础-Hash、MAC、HMAC 的区别与联系

Hash

Hash 是一种从一段数据中创建小的数字“指纹”的方法。就像一个人的指纹代表一个人的信息一样,Hash 对输入的数据进行整理,生成一个代表该输入数据的“指纹” 数据。通常该指纹数据也可称之为摘要、散列、校验和。常见的 Hash 有 CRC、SHA1、SHA2、SHA3、SHA256 和 MD5。
生成 Hash_code 的数学表达使可以简写为:

hash_code = sha256(message);

在这里插入图片描述
Hash 具有抗碰撞的特性,即在指定的输入范围内保证两个不同的数据生成的摘要是不同的。借助此特性,Hash 最大的用途是通过小体积的摘要值,来执行数据的完整性校验。以上图为例,发送放将 1G 的消息数据和 MD5 算法生成的 128bit 的摘要发送给接受方;接收方接受到消息+摘要后也使用 MD5 算法重新计算消息的摘要,然后对比接收到的摘要计算后的摘要,若两者相等就代表消息没有发生误码或者被篡改。
常见的 Hash 函数:
在这里插入图片描述
Hash 函数并不能保证数据来自合法的发送方,如果是不法分子使用 MD5 算法发送一段数据+摘要给到数据接收者,那么接收者仍旧会接收该数据,从而造成安全风险。

MAC

MAC,即消息认证码。与Hash 类似,它也用一段小的数据(称为MAC)来代表一段数据,不同的是,MAC 在生成消息认证码时使用对称加密来保证数据来自约定好的合法的伙伴。
mac_code 的计算方法可以通过下述数学公式进行表达:

mac_code = mac_algorithm(mac_key + message);

MAC 的认证机制如下:

  1. 发送者和接收者存储对称加密的密钥。
  2. 发送者通过MAC算法计算出消息的MAC值,并和消息一起发给收信者
  3. 收信者用同样的MAC算法计算收到的消息的MAC值,并对比接收到的mac计算后的mac

在这里插入图片描述
从本质上讲,MAC是一种算法,它将消息与共享密钥组合在一起作为输入,输出一个代表共享密钥和消息的数据。

MAC可用于数据完整性和身份验证。消息、密钥中的任何更改都会导致不同的 MAC,因此只要没有密钥,攻击者就无法识别和验证MAC。

MAC 算法可能受到长度扩展攻击

MAC 算法面临的常见威胁是长度扩展攻击。要实现长度扩展攻击只需要知道密钥的长度和使用的算法即可。
假设 MAC 算法是:

mac_code = md5("my_key" + "my_message1")

原始要发送的消息+mac 是:

"my_message1" + mac1

然而使用过 md5 计算的开发人员都知道,MD5 计算具备可循环冗余计算的特性:

md5_code1 = md5("base");
md5_code2 = md5(md5_code1  + "extern");

其中,md5_code1、md5_code2 都是正确的 md5 mca。即在计算 md5 mac 时,可以在上一次的基础上追加一个数据,得到的 MD5 数据仍旧是正确的 MD5 mac。
那么作为攻击者,要实现长度扩展攻击,主要需完成下面几步:

  1. 设法获取 MAC 算法的 KEY 的加密数据 secret 的长度(不需要知道 key 的值)。
  2. 生成一个附加消息(extern)。使用原始消息对应的 md5_code1 与扩展的消息(攻击数据)生成 md5_code2.
  3. 重新组合 secret + base + extern + md5_code2,这样接收方在接收到数据后,运行 md5 算法并对 secret 执行解密数据,就会发现数据是对的,然而实际上,攻击者在原始的 base 信息后面增加了一段恶意的数据 extern,这中恶意数据可能是一些窃取、攻击类信息,容易造成安全隐患。

HMAC

HMAC 算法本质属于 MAC 算法的一种。其保留了对称密钥、生成 MAC 消息认证码的特点。但是进一步结合了哈希函数和密钥加密技术。
根据用于计算 MAC 的哈希函数,可以定义许多示例,目前主要集合了MD和SHA两大系列消息摘要算法。其中MD系列的算法有HmacMD2、HmacMD4、HmacMD5三种算法;SHA系列的算法有HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512五种算法。

HAMC 通常可以使用下述数学表达式来简单概述:

HMAC = Hash(key1 + Hash(key2 + message))

HMAC 使用两个密钥,并执行两轮哈希计算。该算法的第一轮从原始消息和第一个密钥 K1 生成内部哈希 HMAC1。然后,第二轮使用生成的内部哈希和第二个密钥 K2 创建最终的 HMAC。接收方计算自己的 HMAC,并将其与接收的 HMAC 进行比较,以验证消息的身份验证和完整性,如下图所示:
在这里插入图片描述
HAMC 算法具有以下特点:

  • HMAC输出和原有的哈希算法长度一致。
  • HMAC 机制依赖于两轮对称加密时密钥的安全性,密钥一旦泄露就不安全了。

HMAC算法的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中,认证流程如下:
(1) 先由客户端向服务器发出一个验证请求。
(2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。
(3) 客户端将收到的随机数与自己的密钥进行HMAC-SHA1运算并得到一个结果作为认证证据传给服务器(此为响应)。
(4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-SHA1运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户 。

从挑战-应用的使用场景看 HMAC 算法的安全性:

HMAC算法引入了密钥,其安全性已经不完全依赖于所使用的HASH算法,安全性主要有以下几点保证:
(1)使用的密钥是双方事先约定的,第三方不可能知道,因此数据的收发方是可信的。由上面介绍应用流程可以看出,作为非法截获信息的第三方,能够得到的信息只有作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以无法仿造出一致的响应。
(2) HMAC算法与一般的加密重要的区别在于它具有“瞬时”性,即破解只在本条消息有效,对其他消息被破解无法提供帮助,而加密算法被破解后,以前的加密消息就可能被解密。

总结

  • 本文主要介绍 Hash、MAC、HMAC 的联系与区别,层层递进地描述了如何增加数据的安全性。
  • hash只能验证数据完整性,无法保证数据防篡改,计算过程无密钥参与。
  • MAC既可以验证数据完整性,也可以验证数据是由原始发送方发出的,计算过程有密钥参与,使用对称加密算法构造。
  • HMAC是mac的一种,可以验证数据完整性,也可以验证数据是由原始发送方发出的,使用hash函数来构造,hmac输出长度与原始 HASH 算法的长度一样。
  • HASH 旨在检测数据的意外更改,而 HMAC 旨在检测故意更改。
  • MAC 算法通常不单独使用。取而代之的是,它们被集成到加密算法中,构建了我们所说的 AEAD(具有关联数据的身份验证加密)。它们还可以与哈希函数结合使用,创建 HMAC、SHA1-HMAC 和 MD5-HMAC 等算法。
  • HMAC 和数字签名都确保了消息的完整性和真实性。完整性意味着消息未被更改。真实性表示收件人确信邮件来自发件人。
  • MAC 和 HMAC 之间的主要区别在于消息认证码(代表消息的一小段数据,就像数据的指纹)的计算方式。在 MAC 算法中,消息认证码通常是通过将加密函数直接应用于消息和密钥来计算的。HMAC 使用更复杂的结构,涉及哈希函数的两次传递,以及内部和外部填充的使用。
  • HMAC可以任何 HASH 算法一起使用,使其成为MAC应用程序的灵活选择。HMAC 已被广泛用于各种协议和标准,包括 IPsec、SSL/TLS 和 SSH。
  • HMAC的缺点是其使用共享密钥,这存在不可否认性问题。如果发送方或接收方的密钥遭到泄露,攻击者将很容易创建未经授权的消息,实现中间人攻击。
  • 当代密码学的关键支柱是数据机密性、数据完整性、身份验证和不可否认性。我们可以通过下述文章进一步了解密码学相关的知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1939686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CefSharp音视频编译与免费下载

注:Cefharp 音频和视频播放编译,生成相应的dll文件,从而支持项目开发。 建议编译至少 16G 的 RAM和至少 250G 的 SSD。该脚本以 E 盘为例,您需要在 E 盘上手动创建 cef 文件夹。禁止在转载后通过发布其他平台向用户收取下载费用。…

全国区块链职业技能大赛第八套区块链产品需求分析与方案设计

任务1-1:区块链产品需求分析与方案设计 医疗健康平台中涉及到医院、医生、患者等参与方,他们需要在区块链医疗健康平台中完成账户注册、身份上链、挂号就诊、查询病例等多种业务活动。通过对业务活动的功能分析,可以更好的服务系统的开发流程。基于医疗健康平台系统架构,以…

【数据结构进阶】二叉搜索树

🔥个人主页: Forcible Bug Maker 🔥专栏: C || 数据结构 目录 🌈前言🔥二叉搜索树🔥 二叉搜索树的实现Insert(插入)find(查找)erase(删除)destro…

毕业/期刊论文发表必备:YOLOv5 / v7 / v8 /v10算法网络结构图【文末提供原型文件下载地址】

前言:Hello大家好,我是小哥谈。同学们在写YOLO算法相关毕业论文/期刊论文的时候,不可避免的会用到相关版本的网络结构图,曾有很多小伙伴私信我索要原型文件,本文就给大家提供YOLOv5/v7/v8/v10版本算法网络结构图及原型文件下载地址。🌈 目录 🚀1.网络结构图 �…

Fiddler 导出请求为curl格式

来自:https://www.cnblogs.com/yudongdong/p/15418181.html Fiddler 下载地址: https://downloads.getfiddler.com/fiddler-classic/FiddlerSetup.5.0.20243.10853-latest.exe 这段代码加到类中 public static RulesOption("关闭请求体转代码", "生成代码&qu…

简单页表和多级页表

地址转换(Address Translation) 内存需要被分成固定大小的页(Page)然后再通过虚拟内存地址(Virtual Address) 到物理内存地址(Physical Address) 的地址转换(Address Translation)才能到达实际存放数据的物理内存位置 简单页表 页表的概念 想要把虚拟内存地址,映…

ip地址是电脑还是网线决定的

在数字化时代的浪潮中,网络已经成为了我们日常生活和工作不可或缺的一部分。当我们谈论网络时,IP地址无疑是一个核心的概念。然而,关于IP地址的分配和决定因素,很多人可能存在误解。有些人认为IP地址是由电脑决定的,而…

pytorch 46 将ASpanFormer模型导出onnx运行

ASpanFormer是一个2022年8月份发布的算法,其主要步骤与LoFTR模型类似,因此无法导出为onnx模型。根据ASpanFormer论文中的数据与效果图,可以确定AsPanFormer是可以作为一个比SP+SG更为有效的方案,其在标准数据集上的效果优于SP+SG,在速度上远超SP+SG,与LoFTR接近;在预测点…

C语言:静态库和动态(共享)库

相关阅读 C语言https://blog.csdn.net/weixin_45791458/category_12423166.html?spm1001.2014.3001.5482 在软件开发中,库(Library)是一个至关重要的概念。它们是由函数和数据的集合构成,用于实现特定的功能,供其他程…

测试——性能测试

内容大纲: 常见的性能问题 性能测试是什么 性能测试和功能测试之间的区别 为什么要进行性能测试 常见的性能指标及性能测试专业术语 性能测试分类 1. 常见的性能问题 系统内部以及软件的代码实现: 资源泄漏,包括内存泄漏。CPU使用率达到100%,系统被锁定…

Vue3组件通信

1、props 1.1 父传子 父组件:通过属性在子组件标签传递 子组件:通过defineProps接收 1.2 子传父 1.父组件先给子组件传递一个函数 2.子组件接收此参数(函数),并在合适的时机调用此函数,通过函数的参数&…

SEO之网站结构优化(四)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 4、清晰导航 清晰的导航系统是网站设计的重要目标,对网站信息架构、用户体验影响重大。SEO也越来…

Hadoop高可用集群搭建及API调用

NameNode HA 背景 在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNode,但是它并不是NameNode的备份,它只是NameNode的一个助理,协助NameNode工作,SecorndaryNameNode会对fsimage和edits文…

【BUG】已解决:OSError: [Errno 22] Invalid argument

已解决:OSError: [Errno 22] Invalid argument 目录 已解决:OSError: [Errno 22] Invalid argument 【常见模块错误】 错误原因: 解决方法如下: 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&…

基于luckysheet实现在线电子表格和Excel在线预览

概述 本文基于luckysheet实现在线的电子表格,并基于luckyexcel实现excel文件的导入和在线预览。 效果 实现 1. luckysheet介绍 Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。 官方文档在线Demo 2. 实现 …

配置单区域OSPF

目录 引言 一、搭建基础网络 1.1 配置网络拓扑图如下 1.2 IP地址表 二、测试每个网段都能单独连通 2.1 PC0 ping通Router1所有接口 2.2 PC1 ping通Router1所有接口 2.3 PC2 ping通Router2所有接口 2.4 PC3 ping通Router2所有接口 2.5 PC4 ping通Router3所有接口 2.…

力扣 28找到字符串中第一个匹配项的下标 KMP算法

思路: 朴素匹配有很多步骤是多余的 KMP算法能够避免重复匹配 KMP算法主要是根据子串生成的next数组作为回退的依据,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。 这里讲一下为什么用模式串的最大公共前后缀…

基于python的当当二手书数据分析与可视化系统设计与实现

1.1 研究背景及现状 1.1.1 研究背景 生态文明建设是我国的基本国情之一,资源利用作为应该重要的环节[1]。然而随着大学校园内掀起倡导的低碳环保热潮,高校学生教材及其他书籍的目前的处理方式已被大多人所关注[2]。从循环利用资源的角度出发[3]&…

封装MAVSDK为JAR包并导出给其它Android工程用完整示例

效果: 未解锁状态 已执行解锁指令 已执行起飞指令 飞行中 已执行降落指令 已执行返航指令 实现步骤: 1.准备PX4容器并启动:

Java项目中整合多个pdf合并为一个pdf

一、Java项目中整合多个pdf合并为一个pdf gitee笔记路径&#xff1a;https://gitee.com/happy_sad/drools一、依赖导入 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.6</version> …