密码学中的Hash函数

目录

一. 介绍

二. hash函数的五个基本性质

(1)压缩性

(2)正向计算简单性

(3)逆向计算困难性

(4)弱无碰撞性

(5)强无碰撞性

三. 哈希函数的攻击方式

四. 生日攻击

4.1 第 1 类生日问题

4.2 第2类生日攻击:生日悖论

五. 小结


一. 介绍

Hash函数(也称散列函数或散列算法)的输入为任意长度的消息,而输出为某一固定长度的消息。即 Hash 函数将任意长度的消息串 M 映射成一个较短的定长消息串,记为 H。称 H(M)为消息 M 的 Hash值或消息摘要(message digest),有时也称为消息的指纹。

通常 Hash 函数应用于数字签名消息完整性等方面。设 H 是一个 Hash 函数,x 是任意长度的二元串,相应的消息摘要为y=H(x),通常消息摘要是一个相对较短的二元串(例如 160 比特)。假设我们已经计算出了 y 的值,那么如果有人改变 x 的值为 x’,则通过计算消息摘要 y’=hash(x’),验证 y’与 y 不相等就可以知道原来的消息 x 已被改变。

通常,Hash 函数可以分为两类:

  1. 不带密钥的 Hash 函数只需要有一个消息输入;
  2. 带密钥的 Hash 函数规定要有两个不同的输入,即一个消息和一个秘密密钥;

二. hash函数的五个基本性质

Hash 函数是为指定的消息产生一个消息“指纹”, Hash 函数通常具有以下这些性质:

(1)压缩性

Hash 函数将一个任意比特长度的输入 x 映射为固定长度为 n 的输出 H(x)。

(2)正向计算简单性

给定 Hash 函数 H 和任意的消息输入 x,计算 H(x)是简单的。

(3)逆向计算困难性

对所有预先给定的输出值,找到一个消息输入使得它的 Hash 值等于这个输出在计算上是不可行的。即对给定的任意值y,求使得 H(x)=y 的 x 在计算上是不可行的。在密码学中,通常这一性质也称为 Hash函数的单向性。

(4)弱无碰撞性

对于任何的输入,找到一个与它有相同输出的第二个输入,在计算上是不可行的。即给定一个输入 x,找到一个 x’,使得H(x)=H(x’)成立是计算不可行的,如果单向 Hash 函数满足这一性质,则称其为弱单向 Hash 函数。

(5)强无碰撞性

找出任意两个不同的输入 x 与 x’,使得 H(x)=H(x’)在计算上是不可行的,如果单向 Hash 函数满足这一性质,则称其为强单向Hash 函数。在网络安全中,这个性质非常重要。

三. 哈希函数的攻击方式

攻击者可以对 Hash 函数发起两种攻击。

第一种就是找出一个 x’,使得 H(x)=H(x’)。

例如,在一个使用 Hash 函数的签名方案中,假设 s 是签名者对消息 x 的一个有效签名,s=sig(H(x))。攻击者可能会寻找一个与 x 不同的消息 x’使得 H(x)=H(x’)。如果能找到一个这样的 x’,则攻击者就可以伪造对消息 x’的签名,这是因为 s 也是对消息 x’的有效签名。Hash 函数的弱无碰撞性可以抵抗这种攻击。

攻击者可以发起另一种攻击。同样一个应用 Hash 函数的签名方案中,对手可能会寻找两个不同的消息 x 和 x’,使得 H(x)=H(x’)。然后说服签名者对消息 x 签名,得到 s=sig(H(x))。由于 s=sig(H(x’)),所以攻击者得到了一个对消息 x’的有效签名。Hash 函数是强无碰撞性可以抵抗这种攻击。

四. 生日攻击

4.1 第 1 类生日问题

假设已经知道 A 的生日为某一天,问至少有多少个人在一起时,至少有 1/2 的概率使有一个人和 A 的生日相同?

初步理解:我们假定一年有 365 天,且所有人的生日均匀分布于 365 天中。下面我们求解所需的最少人数。

首先,有 1 人和 A 有相同生日的概率为 1/365,有不同生日的概率则为:

1-1/365=364/365

K 个人与 A 生日不同的概率应为:

(\frac{364}{365})^k

K 个人至少有 1 个人与 A 的生日相同,且概率不小于 1/2 应为:

1-(\frac{364}{365})^k\geq \frac{1}{2}

所以可得:

(\frac{364}{365})^k\leq \frac{1}{2}

进一步计算可得:

k\geq -ln2/ln(364/365)\geq 0.6931471/0.027370\geq 253

即至少为 253 人。

若已知 A 的生日,则当至少有 253 个人时,才能保证有 1/2 的概率使有 1 人和 A 的生日相同。

4.2 第2类生日攻击:生日悖论

假设一年有 365 天,每个人的生日均匀分布于 365天,那么至少有多少个人在一起是,能保证至少有 1/2 的概率存在 2 个人有相同的生日?

第 2 类生日问题也称生日悖论。

P_m为 m 个人在一起,不存在相同生日的概率。根据假定,则 m-1个人中无相同生日的概率为 P_{m-1},m-1 个人共有生日 m-1 天。第 m 个人与前面 m-1 人无相同生日的概率为:

也就是递推关系满足:

由此可得:

可以验证当 m≥23 时,Pm<1/2。即 23 个人在一起时,无相同生日的概率小于 1/2。反过来就是当 23 个让你在一起是,有两个人的生日相同的概率大于 1/2。这个结果挺神奇的。

五. 小结

哈希函数的迭代结构一般为:

目前使用的大多数Hash函数如MD5、SHA-1,其结构都是迭代型的,如上图所示。其中函数的输入M被分为L个分组,每一个分组的长度为b比特,如果最后一个分组的长度不够,需对其做填充。最后一个分组中还包括整个函数输入的长度值。这将使得攻击者的攻击更为困难,即攻击者若想成功地产生假冒的消息,就必需保证假冒消息的Hash值与原消息的Hash值相同,而且假冒消息的长度也要与原消息的长度相等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(九)One-Wire总线-DS18B20

文章目录 One-Wire总线篇复位和应答读/写0&#xff0c;1 DS18B20篇原理图概述最主要特性几个重要的寄存器&#xff08;部分要掌握&#xff09;存储有数字温度结果的2个字节宽度的温度寄存器寄存器描述&#xff1a;寄存器说明&#xff1a; 一个字节的过温和一个字节的低温&#…

[嵌入式AI从0开始到入土]10_yolov5在昇腾上应用

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第一章 昇腾Altas 200 DK上手 第二章 下载昇腾案例并运行 第三章…

window使用cpolar实现内网穿透

文章目录 cpolar下载和安装启动和配置cpolar卸载 cpolar下载和安装 进入spolar官网&#xff0c;完成注册&#xff0c;下载相应的cploar版本解压和运行安装文件 配置安装路径&#xff0c;然后选择next&#xff0c;完成即可 启动和配置 点击首页的快捷图标打开网页&#xf…

python学习:实现猜数游戏和汉诺塔问题的解决

实现猜数游戏 规则&#xff1a; 计算机随机产生一个0~100的预设数字&#xff0c;让用户通过键盘输入所猜的数&#xff0c;如果大于预设的数&#xff0c;显示“遗憾&#xff0c;太大了“&#xff1b;小于预设的数&#xff0c;显示”遗憾&#xff0c;太小了“&#xff0c;如此循…

【MySQL】数据库之MMM高可用

目录 一、什么是MMM 二、关于MMM架构的说明 三、实操MMM的高可用 步骤一&#xff1a;完成主主复制、主从复制 步骤二&#xff1a;所有节点服务器都安装mysql-mmm,并完成mmm_common.conf文件的配置 步骤三&#xff1a;完成monitor节点服务器的配置文件修改mmm_mon.conf 步…

基于SSM的基金投资交易管理网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

K210基础实验系列

CanMV K210 开发板: CanMV K210 是由 01Studio 设计研发&#xff0c;基于嘉楠科技边缘计算芯片 K210 &#xff08; RSIC V 架构&#xff0c; 64 位双核&#xff09;方案的一款开发板&#xff0c;采用硬件一体化设计&#xff08; K210 核心板、 摄像头、 LCD 集成在一个…

mysql进阶-重构表

目录 1. 原因 2. 如何重构表呢&#xff1f; 2.1 命令1&#xff1a; 2.2 命令2&#xff1a; 2.3 命令3&#xff1a; 1. 原因 正常的业务开发&#xff0c;为什么需要重构表呢&#xff1f; 原因1&#xff1a;某张表存在大量的新增和删除操作&#xff0c;导致表经历过大量的…

深入了解Snowflake雪花算法:分布式唯一ID生成器

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

JVM中对象的创建

一.JVM运行流程 JVM向操作系统申请内存&#xff0c;初始化运行时数据区&#xff0c;接下来装载使用的类&#xff0c;执行类里面相应方法的时候为当前虚拟机栈压入一个栈帧&#xff0c;方法执行完成后栈帧出栈&#xff0c;进行垃圾回收。 二.JVM中对象的创建过程 符号引用&…

MySQL数据库进阶-事务

事务 事务由单独单元的一个或多个SQL语句组成&#xff0c;在这 个单元中&#xff0c;每个MySQL语句是相互依赖的。而整个单独单 元作为一个不可分割的整体&#xff0c;如果单元中某条SQL语句一 旦执行失败或产生错误&#xff0c;整个单元将会回滚。所有受到影 响的数据将返回到…

端云协同,Akamai 与快手联合落地 QUIC 提升海外用户视频体验

10月10日&#xff0c;负责支持和保护数字化体验且深受全球企业信赖的解决方案提供商阿卡迈技术公司( Akamai Technologies, Inc.&#xff0c;以下简称&#xff1a;Akamai )( NASDAQ&#xff1a;AKAM )携手全球领先的短视频记录和分享平台快手(HK&#xff1a;1024)通过全面落地 …

【LeetCode】150. 逆波兰表达式求值(ASCII码)

今日学习的文章链接和视频链接 leetcode题目地址&#xff1a;150. 逆波兰表达式求值 代码随想录题解地址&#xff1a;代码随想录 题目简介 即将后缀表达式转换成中缀表达式并计算。 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 …

【无线通信专题】NFC通信模式及可能的应用方式

在文章【无线通信专题】NFC基本原理中我们讲到了NFC工作模式。其中NFC工作模式主要有三种,读写模式、卡模拟模式、点对点模式。 NFC通信模式丰富,NFC Forum定义了三种NFC设备:通用NFCForum设备、读写器设备和标签设备。这些NFC设备可以在三种通信模式下运行,并对应用案例进…

【DevOps-05】Integrate工具

一、简要说明 持续集成、持续部署的工具很多,其中Jenkins是一个开源的持续集成平台。 Jenkins涉及到将编写完毕的代码发布到测试环境和生产环境的任务,并且还涉及到了构建项目等任务。 Jenkins需要大量的插件保证工作,安装成本较高,下面会基于Docker搭建Jenkins。 二、Jenk…

Java Base64简单介绍

1. Base64工具 工具链接 2. Base64示例代码 public class Base64Demo {// 请注意&#xff0c;在处理二进制数据时&#xff08;例如图片或文件&#xff09;&#xff0c;不需要将字节数组转换为字符串再进行编码或解码&#xff0c;// 可以直接对字节数组进行Base64操作。上述…

【前端设计】文字聚光灯

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 案例 文字聚光灯效果可以用于网站标题 html <!DOCTYPE html> <html lang"en&quo…

File与Io流

IO&#xff08;Input/Output&#xff09;是指计算机与外部世界进行数据交换的过程。在程序中&#xff0c;IO通常用于读取输入数据或将输出数据写入到外部设备或文件中。 Java的IO库主要分为两种类型&#xff1a;字节流和字符流。 字节流&#xff08;Byte Stream&#xff09;&a…

FreeRTOS移植详解

一、前言 本文旨在讲解FreeRTOS在STM32单片机上的移植步骤&#xff0c;对于FreeRTOS在其他单片机上的移植已具有一定的参考意义。相信读者在看完这篇文章后&#xff0c;一定会有所收获&#xff01; 文末附有相关资料连接&#xff0c;有需要的读者可以自行下载。 二、FreeRTOS源…

各银行小微企业信贷相关产品和机器学习建模案例

各银行小微企业贷款业务 互联网的时代&#xff0c;大量新信息技术的涌现和网络的无处不在&#xff0c;想要抢占这片金融天地&#xff0c;必须重视小微金融业务&#xff0c;小微企业是一直具有重大潜力的客户&#xff0c;商业银行、消金公司发展小微信贷业务可以拓宽自身客户群…