密码学学习笔记(十一):哈希函数 - Merkle–Damgård结构

news2024/11/18 19:57:42

Merkle–Damgård是一种算法,由Ralph Merkle和Ivan Damgård提出。它通过迭代调用压缩函数来计算消息的哈希值。

应用

拿SHA-2举例,首先我们需要对需要进行哈希运算的输入做填充,然后将填充后的输入划分为等长的分组,每个分组的长度等于压缩函数的输入长度。填充的意思就是在输入中添加特定的字节,使输入的长度变成分组大小的整数倍。

第一步:对输入消息进行填充,填充后的消息应该是压缩函数长度的倍数
​​​​​

 然后,将压缩函数应用于消息的所有分组,在每次迭代过程中,都将上一轮的输出作为压缩函数的第二个输入参数,而将消息的某个分组作为它的第一个输入参数。将压缩函数最终的输出作为消息的摘要。

第二步:将一个压缩函数迭代地应用到消息分组,每次迭代都将以前一个压缩函数的输出以及消息的一个分组作为压缩函数的输入。将最后一次调用压缩函数产生的输出作为摘要。

如果压缩函数本身是抗碰撞的,那么就可以证明Merkle–Damgård结构是抗碰撞的。这样一来,输入长度不固定的哈希函数的安全性就简化为输入长度固定的压缩函数的安全性。

构造

Merkle–Damgård结构的目标是从压缩函数f构造一个哈希函数h

f: \left \{ 0,1 \right \}^{m+t+1}\rightarrow \left \{ 0,1 \right \}^{m}

h: \left \{ 0,1 \right \}^{*}\rightarrow \left \{ 0,1 \right \}^{m}

给定任意长度的消息x,使得:

例子:

给定一个压缩函数f:

f: \left \{ 0,1 \right \}^{128+512+1}\rightarrow \left \{ 0,1 \right \}^{128}

消息x有1000bits:

  • y_{1}是x的前512bits
  • y_{2}x\left | \right |0^{24}的后488bits
  • y_{3}是24的0^{480}\left | \right |32-bit二进制表示
  • z_{1} = f\left ( 0^{129}\left | \right |y_{1} \right ), z_{1}有128bits
  • z_{2} = f\left ( z_{1}\left | \right |1\left | \right |y_{2} \right )
  • z_{3} = f\left ( z_{2}\left | \right |1\left | \right |y_{3} \right )z_{3}是h(x)的消息摘要

抗碰撞性

为什么如果压缩函数本身是抗碰撞的,Merkle–Damgård结构就是抗碰撞的呢?

给定压缩函数f和Merkle–Damgård结构h

f: \left \{ 0,1 \right \}^{m+t+1}\rightarrow \left \{ 0,1 \right \}^{m}

h: \left \{ 0,1 \right \}^{*}\rightarrow \left \{ 0,1 \right \}^{m}

  • 假设我们找到x\neq x'所以h(x)\neqh(x'),所以f可以找到碰撞。
  • y(x) = y_{1}\left | \right |y_{2}\left | \right |...\left | \right |y_{k+1}
  • 让h(x)的中间结果等于z_{1},z_{2},...,z_{k+1},然后h(x) = z_{k+1} = f(z_{k}\left | \right |1\left | \right |y_{k+1})
  • 让h(x')的中间结果等于z'_{1},z'_{2},...,z'_{n+1}y(x') = y'_{1}\left | \right |y'_{2}\left | \right |...\left | \right |y'_{n+1}然后,h(x') = z'_{n+1} = f(z_{k}\left | \right |1\left | \right |y_{k+1}) = f(z'_{n}\left | \right |1\left | \right |y'_{n+1})
  • f(z_{k}\left | \right |1\left | \right |y_{k+1}) = f(z'_{n}\left | \right |1\left | \right |y'_{n+1})
  • 情况1:
  • |x| \neq |x'|\: mod \; t(填充位的数量不同),然后y_{k+1}\neq y'_{n+1},发现碰撞
  • 情况2:
  • |x| = |x'| 然后k=n,要么z_{k} \neq z'_{k}发现碰撞;要么z_{k} = z'_{k}z_{k} = z'_{k} = f(z_{k-1}\left | \right |1\left | \right |y_{k}) = f(z'_{k-1}\left | \right |1\left | \right |y'_{k}),如果y_{k} \neq y'_{k},发现碰撞;如果z_{k-1}\neq z'_{k-1},则发现碰撞,否则返回。一定有一个数字j使得y_{j}\neq y'_{j}
  • 情况3:
  • |x| \neq |x'|,跟情况1相似,除了我们可以一直回到其中一个字符串的开头并且有f(0^{m+1}\left | \right |y_{1}) = f(z'_{j}\left | \right |1\left | \right |y'_{j+1}),碰撞被发现。

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

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

相关文章

中级课程——SSRF

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言挖掘 前言 挖掘

【网站开发】jq (jquery)实现瀑布流布局

要实现网站瀑布流效果&#xff0c;可以使用HTML、CSS和jquery来完成。下面是一种常见的实现方式&#xff1a; 注意要引入jQuery库。 代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title>…

git下载源码及环境搭建之数据库(二)

学习目标&#xff1a; 数据库 新项目使用 数据库文件 的配置 及相关属性的设置 步骤&#xff1a; 数据库 下图所示为开发时所用数据库 第一步&#xff1a;新建一个数据库 注意&#xff1a; 字符集与排序规则我们应该选择utf-8 相关 选中新创建的表&#xff0c;点击备份—还…

【雕爷学编程】Arduino动手做(06)---KY-038声音传感器模块4

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

Flutter:网络图像缓存插件——cached_network_image

前言 为什么要使用这个插件&#xff0c;有什么用呢&#xff1f;毕竟官方提供了Image.network来进行网络图片加载 Image.network和CachedNetworkImage都可以用于在Flutter中加载网络图片&#xff0c;但它们之间有一些区别。 Image.network是Flutter核心库提供的一个构造函数&…

趣味:关于AI是否具备自我意识的探究方案之一

随着gpt等其他NLP大语言模型的爆火&#xff0c;AI技术再次成为我们谈论的焦点&#xff0c;AI是一种拟人的、能够通过学习和自我优化执行各种任务的技术&#xff0c;关于ai是否具备自我意识的答案很明显是否定的&#xff0c;以下将使用一个例子来论证的观点 1.实验准备 我们将…

收拾屋子找出10年前的三维教程

明天找个带光驱的电脑&#xff0c;打开看看。那会还是刻盘&#xff0c; 那会我还是小鲜肉&#xff0c;只是喜欢PS2游戏。所以才接触到三维软件&#xff0c;可惜没干这行。现在变成中年大叔了&#xff0c;拿出来玩会。 想当初现在e维网&#xff0c;下载最新的教程。后面电驴里…

高并发下保证接口幂等性的常用策略

接口幂等性问题&#xff0c;对于开发人员来说是一个常见的公共问题。这里分享一些我在项目中用到过的一些方法&#xff0c;给有需要的同学们一个参考。 你是否遇到过以下的场景&#xff1a; 在填写form页面表单时&#xff0c;如果前端没做loading或者防抖操作&#xff0c;保存…

松松商城上线“谷歌英文外链“资源,松松软文推出英文站点资源

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 近期&#xff0c;为了丰富资源&#xff0c;松松商城和松松软文迎来了一系列新的更新。松松商城推出了“谷歌外贸站英文"外链资源&#xff0c;而松松软文则上线了英文站点资源&#xff0c;为用…

MURF20100CT-ASEMI快恢复对管MURF20100CT

编辑&#xff1a;ll MURF20100CT-ASEMI快恢复对管MURF20100CT 型号&#xff1a;MURF20100CT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 恢复时间&#xff1a;50ns 正向电流&#xff1a;20A 反向耐压&#xff1a;1000V 芯片个数&#xff1a;2 引脚数量&#xff1…

场景图生成——RelTR训练自己的数据集

RelTR训练自己的数据集 省流量省时间版本框的标注关系的标注总的 前言Open Images V6的标注格式RelTR中使用的Open Images V6的数据标注格式具体步骤框的标注生成格式关系三元组的生成格式 结束语参考链接 省流量省时间版本 框的标注 共需要创建4个json标注文件 train.json, …

功能升级,数据同步更便捷!场景化数据同步助您提效60%!

在企业数仓建设初期&#xff0c;为了保障数字化转型的落地效果&#xff0c;需要提供充足的数据资源&#xff0c;除了基础的数据抽取、转换和加载等过程&#xff0c;数据的同步也是重要环节之一。数据同步常用于数仓ODS、ADS层的建设&#xff0c;通过不同数据源的同步&#xff0…

回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于B…

Michael.W基于Foundry精读Openzeppelin第8期——Context.sol

Michael.W基于Foundry精读Openzeppelin第8期——Context.sol 0. 版本0.1 Context.sol 1. 目标合约2. 代码精读2.1 _msgSender()2.2 _msgSender() 0. 版本 [openzeppelin]&#xff1a;v4.8.3&#xff0c;[forge-std]&#xff1a;v1.5.6 0.1 Context.sol Github: https://gith…

MIT 6.S081 Lab 11 -- NetWork - 下

MIT 6.S081 Lab 11 -- NetWork -- 下 引言代码解析网络子系统初始化相关数据结构lab 分析e1000_transmit函数实现e1000_recv函数实现socket write全流程分析socket read全流程分析socket关闭ARP数据报的发送与接收 引言 本文为 MIT 6.S081 2020 操作系统 实验十一解析。 MIT …

HCIA-datacom认证最新资料共享

hcia认证有哪些值得推荐的学习方向&#xff1f; 入门首选学习方向&#xff1a;HCIA&#xff1a;Datacom&#xff01;但是HCIA云计算&#xff08;Cloud Computing&#xff09;方向、HCIA 无线&#xff08;WLAN&#xff09;方向、HCIA Data Center Facility方向、HCIA 安全(Secur…

TTX1995可调谐激光器控制软件系统

画了两周时间&#xff0c;利用下班时间&#xff0c;设计了一个ITLA可调谐激光器控制软件&#xff0c;从硬件到软件。 这是使用的界面&#xff0c;实现了下面的功能&#xff1a; 1、模块信息的读取&#xff0c;包括生产日期&#xff0c;生产厂家&#xff0c;型号&#xff0c;序…

产品流程图

流程图设计 1.什么是流程图2.流程图元素定义3.几种常见的产品流程图 3.1业务流程图 | 泳道图&#xff08;给产品经理看&#xff09;3.2任务流程图&#xff08;给程序员看&#xff09;3.3页面流程图&#xff08;给UI设计人员看&#xff09; 4.如何绘制流程图 4.1调查研究4.2梳理…

笔试题之地区经济数据分析

数据分析通常应用于商业领域&#xff0c;但对于政府、非盈利组织等机构而言&#xff0c;在考量城市发展、监控环境质量等方面&#xff0c;也会涉及到数据分析。这时&#xff0c;就需要我们根据实际场景&#xff0c;结合数据分析的理论知识&#xff0c;发现其中的规律&#xff0…

Tensorflow入门(2)——深度学习框架Tesnsflow 线程+队列+IO操作 文件读取案例

目录 一、二、Tesnsflow入门 & 环境配置 & 认识Tensorflow三、线程与队列与IO操作1.队列实例&#xff1a;完成一个出队列、1、入队列操作(同步操作) 2.队列管理器 创建线程3.线程协调器 管理线程案例&#xff1a;通过队列管理器来实现变量加1&#xff0c;入队&#xff…