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

密码学基础-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 的联系与区别,层层递进地描述了如何增加数据的安全性。
  • 本文还介绍了长度扩展攻击的基本实现原理,HMAC 算法通过执行两轮 Hash 运算对抗这种攻击。
  • 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.rhkb.cn/news/381462.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux配置podman阿里云容器镜像加速器

1.下载podman yum install -y podman systemctl status podman systemctl start podman 2.获取阿里云个人容器镜像加速器地址 访问阿里云官网:首先,您需要访问阿里云(Alibaba Cloud)的官方网站。阿里云官网的URL是:…

TinyVue:与 Vue 交往八年的组件库

本文由体验技术团队莫春辉老师原创~ 去年因故停办的 VueConf,今年如约在深圳举行。作为东道主 & 上届 VueConf 讲师的我,没有理由不来凑个热闹。大会结束后,我见裕波在朋友圈转发 Jinjiang 的文章《我和 Vue.js 的十年》,我就…

如何发一篇顶会论文? 涉及3D高斯,slam,自动驾驶,三维点云等等

SLAM&3DGS 1)SLAM/3DGS/三维点云/医疗图像/扩散模型/结构光/Transformer/CNN/Mamba/位姿估计 顶会论文指导 2)基于环境信息的定位,重建与场景理解 3)轻量级高保真Gaussian Splatting 4)基于大模型与GS的 6D pose e…

【AI大模型】生成式AI的未来——CHAT还是AGENT?

【AI大模型】CHAt还是AGENt? 最近,许多人工智能公司或者部门都在针对Agent——人工智能体有所动作。 例如: 文心一言智能体 Gnomic智能体 英伟达视觉AI代理 那么人工智能概念中的智能体Agent到底是什么呢?它又为何会突然在人工智…

「网络通信」HTTP 协议

HTTP 🍉简介🍉抓包工具🍉报文结构🍌请求🍌响应🍌URL🥝URL encode 🍌方法🍌报文字段🥝Host🥝Content-Length & Content-Type🥝User…

基于Nginx搭建RTMP流媒体服务器视频无法保存

文章目录 基于Nginx搭建RTMP流媒体服务器安装Nginx-RTMPNginx 配置文件 视频无法保存 基于Nginx搭建RTMP流媒体服务器 安装Nginx-RTMP 要实现RTMP流媒体服务器需要安装Nginx-RTMP模块 已有Nginx安装Nginx-RTMP模块 sudo apt update sudo apt install libnginx-mod-rtmp可能会…

pnpm build打包时占内溢出

这两天在打包H5网页的时候失败,总是提示下方错误 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 严重错误:堆限制附近标记压缩无效分配失败 - JavaScript 堆内存不足 尝试了多种方法&…

XXE:XML外部实体引入

XXE漏洞 如果服务器没有对客户端的xml数据进行限制,且版本较低的情况下,就可能会产生xxe漏洞 漏洞利用流程 1.客户端发送xml文件,其中dtd存在恶意的外部实体引用 2.服务器进行解析 3.服务器返回实体引用内容 危害:任意文件读…

JavaScript之WebAPIs-BOM

目录 BOM操作浏览器一、Window对象1.1 BOM(浏览器对象模型)1.2 定时器-延时函数1.3 js执行机制1.4 location对象1.5 navigator对象1.6 history对象 二、本地存储三、补充数组中的map方法数组中的join方法数组中的forEach方法(重点)数组中的filter方法(重…

2024可信数据库发展大会:TDengine CEO 陶建辉谈“做难而正确的事情”

在当前数字经济快速发展的背景下,可信数据库技术日益成为各行业信息化建设的关键支撑点。金融、电信、能源和政务等领域对数据处理和管理的需求不断增加,推动了数据库技术的创新与进步。与此同时,人工智能与数据库的深度融合、搜索与分析型数…

Elasticsearch基础(五):使用Kibana Discover探索数据

文章目录 使用Kibana Discover探索数据 一、添加样例数据 二、数据筛选 三、保存搜索 使用Kibana Discover探索数据 一、添加样例数据 登录Kibana。在Kibana主页的通过添加集成开始使用区域,单击试用样例数据。 在更多添加数据的方式页面下方,单击…

sublime中无法找到Package Control或Install Package

在Crtl Shift P 中无法查找到Package Control或Install Package或调用产生报错。 可以尝试在 首选项 ---- > 设置中 检查配置文件"ignored_packages":紧跟的中括号中是否为空,如果不为空请删除其中内容。 如果不确定内容,可以用下面的…

【Python】使用库 -- 详解

库就是别人已经写好了的代码,可以让我们直接拿来用。 一个编程语言能不能流行起来,一方面取决于语法是否简单方便容易学习,一方面取决于生态是否完备。所谓的 “生态” 指的就是语言是否有足够丰富的库,来应对各种各样的场景。在…

TCP与UDP的理解

文章目录 UDP协议UDP协议的特点UDP的应用以及杂项 TCP协议TCP协议段格式解释和TCP过程详解确认应答机制 -- 序号和确认序号以及6位标志位中的ACK超时重传机制连接管理机制 与标志位SYN,FIN,ACK滑动窗口与16位窗口大小流量控制拥塞控制延迟应答捎带应答和面向字节流粘包问题TCP异…

Docker核心技术:容器技术要解决哪些问题

云原生学习路线导航页(持续更新中) 本文是 Docker核心技术 系列文章:容器技术要解决哪些问题,其他文章快捷链接如下: 应用架构演进容器技术要解决哪些问题(本文)Docker的基本使用Docker是如何实…

深入理解Java 8的流式API:简化代码,提升效率

文章目录 深入理解Java 8的流式API:简化代码,提升效率一、流 Stream二、Int | Long | Double Stream三、收集器 Collectors 深入理解Java 8的流式API:简化代码,提升效率 Java 8引入了Stream API,它提供了一种新的抽象&…

JavaDS —— 二叉树

树的基本概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 树形结构中,子树之间不能有…

SpringCloud------Sentinel(微服务保护)

目录 雪崩问题 处理方式!!!技术选型 Sentinel 启动命令使用步骤引入依赖配置控制台地址 访问微服务触发监控 限流规则------故障预防流控模式流控效果 FeignClient整合Sentinel线程隔离-------故障处理线程池隔离和信号量隔离​编辑 两种方式优缺点设置方式 熔断降级-----…

tinymce富文本支持word内容同时粘贴文字图片上传 vue2

效果图 先放文件 文件自取tinymce: tinymce富文本简单配置及word内容粘贴图片上传 封装tinymce 文件自取&#xff1a;tinymce: tinymce富文本简单配置及word内容粘贴图片上传 页面引用组件 <TinymceSimplify refTinymceSimplify v-model"knowledgeBlockItem.content…

用html做python教程01

用html做python教程01 前言开肝构思实操额外修饰更换字体自适应 最后 前言 今天打开csdn的时候&#xff0c;看见csdn给我推荐了一个python技能书。 说实话&#xff0c;做得真不错。再看看我自己&#xff0c;有亿点差距&#x1f61f;。 开肝 先创建一个文件&#xff0c;后缀…