密码学中的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.rhkb.cn/news/233192.html

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

相关文章

RabbitMQ(八)消息的序列化

目录 一、为什么需要消息序列化&#xff1f;二、常用的消息序列化方式1&#xff09;Java原生序列化&#xff08;默认&#xff09;2&#xff09;JSON格式3&#xff09;Protobuf 格式4&#xff09;Avro 格式5&#xff09;MessagePack 格式 三、总结 RabbitMQ 是一个强大的消息中间…

安全基础~信息搜集3

文章目录 知识补充APP信息搜集php开发学习理解漏洞 知识补充 端口渗透总结 python Crypto报错&#xff1a;https://blog.csdn.net/five3/article/details/86160683 APP信息搜集 1. AppInfoScanner 移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具 使用教程 演示&…

【Harmony OS - 网络请求】

在一个应用开发中&#xff0c;网络请求是必不可少的&#xff0c;我们一般用的fetch、axios来进行http请求&#xff0c;在鸿蒙中也可以通过createHppt来发生一个http请求&#xff0c;它们都是异步请求返回的Promise&#xff0c;下面我们将介绍’ohos.net.http’和axios这两种方式…

网络端口(包括TCP端口和UDP端口)的作用、定义、分类,以及在视频监控和流媒体通信中的定义

目 录 一、什么地方会用到网络端口&#xff1f; 二、端口的定义和作用 &#xff08;一&#xff09;TCP协议和UDP协议 &#xff08;二&#xff09;端口的定义 &#xff08;三&#xff09;在TCP/IP体系中&#xff0c;端口(TCP和UDP)的作用 &#xff08;…

SSM框架学习笔记01 | 注解开发

文章目录 1. 注解形式定义bean2.纯注解开发3.bean管理4. 依赖注入5. 第三方bean管理总结 1. 注解形式定义bean Compoenet ControllerServiceRepository 配合代码块 <context:component-scan /> 使用 2.纯注解开发 Configuration ComponentScan AnnotationConfigApplicati…

k8s笔记1- 初步认识k8s

k8s简介&#xff1a; kubernetes&#xff0c;俗称k8是&#xff0c;用于自动部署&#xff0c;扩缩和管理容器化应用程序的开源系统&#xff0c;它将组成应用程序的容器&#xff0c;组合成逻辑单元&#xff0c;便于管理和服务发现。 k8s的作用 自动化上线和回滚、存储编排…

加工制造EUV极紫外光刻机的钼/硅反射镜的方法与技术

EUV光刻机使用的反射镜材质是具有极高精度的钼/硅反射镜。这是因为几乎所有材料对13.5nm的EUV都强烈吸收&#xff0c;故EUV光刻机不能采用DUV那样的透镜&#xff0c;只能采用反射式光学系统。又因为EUV波长与晶格参数接近&#xff0c;很容易发生衍射&#xff0c;反射率也很低&a…

vue3 指令详解

系列文章目录 TypeScript 从入门到进阶专栏 文章目录 系列文章目录前言一、v-model &#xff08;双向绑定功能&#xff09;二、v-bind(用于将一个或多个属性绑定到元素的属性或组件的 prop)三、v-if、v-else、v-else-if(用于根据条件选择性地渲染元素)四、v-show&#xff08;根…

iview table 表格合并行鼠标悬停时的高亮显示

背景&#xff1a; Iview里面的表格没有提供鼠标移入移出的事件。 而且当开启鼠标悬浮高亮的时候会显示异常&#xff0c;并没有高亮合并后的整行&#xff0c;还是高亮子行。 高亮前&#xff1a; 高亮异常情况&#xff1a; 解决后&#xff1a; 解决方案&#xff1a; 一、思路&…

leetcode“位运算”——只出现一次的数字

只出现一次的数字i&#xff1a; https://leetcode.cn/problems/single-number/ 给你一个非空整数数组 nums&#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现一次的元素。 class Solution { public:int singleNumber(vector<i…

RedisTemplate序列化

SpringBoot整合Redis&#xff0c;配置RedisTemplate序列化。如果使用StringRedisTemplate&#xff0c;那么不需要配置序列化&#xff0c;但是StringRedisTemplate只能存储简单的String类型数据&#xff0c;如图&#xff1a; 如果使用StringRedisTemplate存储一个常规对象&#…

4《数据结构》

文章目录 绪论逻辑结构存储结构【物理结构】顺序和链式存储区别顺序表和数组区别数组和链表的区别链表结点概念链表为空条件链表文章http://t.csdnimg.cn/dssVK二叉树B树B树【MYSQL索引默认数据结构】B树和B树区别冒泡排序插排选排快排 绪论 数据结构&#xff1a;研究非数值计…

构建高效PythonWeb:GraphQL+Sanic

1.1 简介&#xff1a;在当今快速发展的技术时代&#xff0c;Web应用的性能和灵活性变得越来越重要。在众多技术中&#xff0c;GraphQL和Sanic以其独特的优势脱颖而出。GraphQL&#xff0c;作为一个强大的数据查询语言&#xff0c;为前端和后端之间的通信提供了极大的灵活性。而…

GPT实战系列-简单聊聊LangChain

GPT实战系列-简单聊聊LangChain LLM大模型相关文章&#xff1a; GPT实战系列-ChatGLM3本地部署CUDA111080Ti显卡24G实战方案 GPT实战系列-Baichuan2本地化部署实战方案 GPT实战系列-大话LLM大模型训练 GPT实战系列-探究GPT等大模型的文本生成 GPT实战系列-Baichuan2等大模…

GPT在地学、GIS、气象、农业、生态、环境等领域中的应用教程

详情点击链接&#xff1a;GPT在地学、GIS、气象、农业、生态、环境等领域中的应用教程 一开启大模型 1 开启大模型 1)大模型的发展历程与最新功能 2)大模型的算法构架与底层逻辑 3)大模型的强大功能与应用场景 4)国内外经典大模型&#xff08;ChatGPT、LLaMA、Gemini、DA…

杨中科 ASP.NET MVC

ASP.NET Core 入门 什么是ASP.NET CORE 1、ASP.NET Core是.NET中做Web开发的框架 2、ASP.NET Core MVC 传统MVC项目&#xff0c;前后端都做在一起 3、ASP.NET Core Web API: 前后端分离、多端开发。(是属于MVC中的一部分) 4、ASPNET Core MVC其实包含Web API&#xff0c;不过…

Excelize 入选“2023开源创新榜”优秀开源项目

近日&#xff0c;由中国科协科学技术传播中心、中国计算机学会、中国通信学会、中国科学院软件研究所共同主办&#xff0c;CSDN 承办的 2023 开源创新榜专家评审会在国家科技传播中心成功举办。Excelize 电子表格文档开源基础库入选“2023开源创新榜”优秀开源项目。 评审委员…

实现在一个文件夹中找到特定名称特点格式的文件

当你要在一个文件夹中查找特定名称和格式的文件时&#xff0c;你可以使用 Python 的 os 和 fnmatch 模块。以下是一个简单的脚本示例&#xff0c;它可以在指定目录中查找文件&#xff1a; import os import fnmatchdef find_files(directory, pattern):"""在指…

突破技术边界:R与jsonlite库探秘www.snapchat.com的数据之旅

概述 Snapchat是一款流行的社交媒体应用&#xff0c;它允许用户发送和接收带有滤镜和贴纸的照片和视频&#xff0c;以及创建和观看故事和发现内容。Snapchat的数据是非常有价值的&#xff0c;因为它可以反映用户的行为、偏好和趋势。然而&#xff0c;Snapchat的数据并不容易获…

【React系列】Portals、Fragment

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) Portals 某些情况下&#xff0c;我们希望渲染的内容独立于父组件&#xff0c;甚至是独立于当前挂载到的DOM元素中&am…