密码学学习笔记(二十三):哈希函数的安全性质:抗碰撞性,抗第一原象性和抗第二原象性

news2024/11/15 11:37:15

在密码学中,哈希函数是一种将任意长度的数据映射到固定长度输出的函数,这个输出通常称为哈希值。理想的哈希函数需要具备几个重要的安全性质,以确保数据的完整性和验证数据的来源。这些性质包括抗碰撞性、抗第一原象性和抗第二原象性。

抗碰撞性(Collision Resistance)

抗碰撞性指的是在合理的时间内很难找到两个不同的输入x和y使得它们的哈希值相同,即H(x) = H(y)。对于所有x\neq y,找到H(x) = H(y)是不可行的。

假设有一个哈希函数 H,其输出是一个128位的哈希值。为了证明这个函数具有抗碰撞性,我们需要展示即使在大量尝试之后也很难找到两个不同的输入导致相同的哈希值。

在密码学中,这通常通过展示哈希函数能够抵抗“生日攻击”来完成。生日攻击是一种概率攻击,其原理类似于生日悖论:在一个23人的房间中,至少有两人生日相同的概率超过50%。

在哈希函数的上下文中,这意味着在 2^{n/2} 次尝试后,找到一对碰撞的概率超过50%,其中 n 是哈希值的位数。因此,如果我们的哈希函数 H 在超过 2^{64} 次尝试后仍然没有碰撞,我们可以认为它具有良好的抗碰撞性。在实际应用中,如密码存储或数字签名,开发者会选择已知具有强抗碰撞性的哈希函数。

抗第一原象性(Pre-image Resistance)

抗第一原象性意味着对于给定的哈希值 h,在合理的时间内很难找到任何原始输入 x,使得 H(x) = h。对于给定的h,找到任意x使得H(x) = h是计算不可行的。

这是一个理论上的属性。例如,如果攻击者获得了数据库中的哈希密码,他们不应该能够找到对应的密码。

假设一个黑客获得了一个哈希值 h,他们想要找到一个消息 m 使得 H(m) = h。如果哈希函数是抗第一原象的,黑客尝试所有可能的输入直到他们找到一个匹配的原象,这个过程应该是不切实际的。例如,如果一个哈希函数的输出是256位长,黑客将需要尝试2^{256}个不同的输入才能找到正确的原象,这在现实中是不可行的。

抗第二原象性(Second Pre-image Resistance)

抗第二原象性指的是对于一个固定的输入 x,在合理的时间内很难找到一个不同的输入 y,使得 H(x) = H(y)。对于固定的x和任意的y\neq x,找到H(x)=H(y)是计算不可行的。这保证了即使攻击者知道一个特定的输入和它的哈希值,他们也不能找到另一个具有相同哈希值的不同输入。

考虑一个电子文件签名的场景,Alice 用哈希函数 H 对文件 f 生成一个哈希值 h=H(f) 并用她的私钥加密它,创建一个数字签名。Bob 可以用Alice的公钥解密并得到 h,然后自己对文件 f 运行 H 来验证签名。

如果一个攻击者想要伪造一个签名,他们需要找到一个不同的文件 f′ 使得 H(f′)=h。如果哈希函数是抗第二原象的,那么找到这样的 f′ 将是非常困难的。

在这些例子中,一个关键的假设是哈希函数的输出空间足够大,这样概率才会站在我们这一边使得找到满足上述条件的输入变得不现实。在实践中,这就是为什么推荐使用比如SHA-256或更高位数哈希函数的原因,因为它们为找到原象或碰撞提供了足够小的概率。

Message Authentication Code (MAC)

MAC涉及的是一个哈希函数和一个密钥,用于验证消息的完整性和真实性。它结合了哈希函数的抗碰撞性和密钥的保密性,使得即使有人可以找到哈希函数的碰撞,他们也无法生成有效的MAC,因为他们不知道密钥。

MAC(k,m) = H(k || m)

其中 k 是密钥,m 是消息,H 是哈希函数,|| 表示连接。

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

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

相关文章

C#网络编程TCP程序设计(Socket类、TcpClient类和 TcpListener类)

目录 一、Socket类 1.Socket类的常用属性及说明 2.Socket类的常用方法及说明 二、TcpClient类 三、TcpListener类 四、示例 1.源码 2.生成效果 TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在C#中,TCP程序设…

Fiddler的配置、原理和使用

一、Fiddler的工作原理 本地应用与服务器之间所有的请求(request)和响应(response),由fiddler进行转发,此时fiddler以代理服务器的方式存在。 由于所有的网络数据都要经过fiddler,因此&#xf…

6、原型模式(Prototype Pattern,不常用)

原型模式指通过调用原型实例的Clone方法或其他手段来创建对象。 原型模式属于创建型设计模式,它以当前对象为原型(蓝本)来创建另一个新的对象,而无须知道创建的细节。原型模式在Java中通常使用Clone技术实现,在JavaSc…

01_W5500简介

目录 W5500简介: 芯片特点: 全硬件TCPIP协议栈: 引脚分布: W5500简介: W5500是一款高性价比的以太网芯片,其全球独一无二的全硬件TCPIP协议栈专利技术,解决了嵌入式以太网的接入问题,简单易用&#xff…

HostHunter虚拟主机发现

HostHunter虚拟主机发现 1.HostHunter2.安装3.参数解释4.实例1.HostHunter HostHunter 一种工具,用于有效发现和提取提供大量目标 IPv4 或 IPv6 地址的主机名。HostHunter 利用简单的 OSINT 和主动协调技术将 IP 目标与虚拟主机名进行映射。这对于发现组织的真正攻击面特别有…

直观清晰的带你了解KMP算法(超详细)

KMP算法用来找某个字符串是否存在某个连续的真子串的 下面举一个例子让抽象的KMP算法更加直观,有助于理解 首先我们要了解KMP算法首先要找到一个next数组来表示主串中每一个字符的回退的下标(这个下标是对于真子串而言的,主串不需要回退&…

ubuntu安装tomcat并配置前端项目

1.1查找 # 先更新 sudo apt update # 查找 apt search jdk1.2安装 sudo apt install openjdk-8-jdk1.3验证 java -version 2.安装tomcat 下载链接:Apache Tomcat - Apache Tomcat 8 Software Downloadshttps://tomcat.apache.org/download-80.cgi下载这个&…

layui+ssm实现数据批量删除

layuissm实现数据的批量删除 //数据表格table.render({id: adminList,elem: #adminList,url: ctx "/admin/getAdminList", //数据接口cellMinWidth: 80,even: true,toolbar: #toolbarDemo,//头部工具栏limit: 10,//每页条数limits: [10, 20, 30, 40],defaultToolba…

JS生成登录验证码

采用js生成登录的验证码 采用的技术点有html&#xff0c;css&#xff0c;JS&#xff0c;jQuery HTML&#xff1a; <div class"box_b"><img src"./img/0775639c-c82c-4a29-937f-d2a3bae5151a.png" alt""><div class"regist…

4G基站BBU、RRU、核心网设备

目录 前言 基站 核心网 信号传输 前言 移动运营商在建设4G基站的时候&#xff0c;除了建设一座铁塔之外&#xff0c;更重要的是建设搭载铁塔之上的移动通信设备&#xff0c;这篇博客主要介绍BBU&#xff0c;RRU以及机房的核心网等设备。 基站 一个基站有BBU&#xff0c;…

Leetcode—1038.从二叉搜索树到更大和树【中等】

2023每日刷题&#xff08;四十九&#xff09; Leetcode—1038.从二叉搜索树到更大和树 算法思想 二叉搜索树的中序遍历&#xff08;左根右&#xff09;结果是一个单调递增的有序序列&#xff0c;我们反序进行中序遍历&#xff08;右根左&#xff09;&#xff0c;即可以得到一…

Redis系列之incr和decr命令是线程安全的?

Redis是一个单线程的服务&#xff0c;所以正常来说redis的命令是会排队执行的。incr/decr命令是redis提供的可以实现递增递减的命令&#xff0c;所以这两个命令也是具有原子性的&#xff1f;是线程安全的&#xff1f;这个也是互联网公司面试的常见题&#xff0c;话不多说&#…

linux 命令 tmux 用法详解

一、tmux 解决的痛点&#xff08;screen命令一样可以解决&#xff0c;但是tmux功能更强大&#xff09; 痛点一&#xff1a;大数据传输的漫长一夜 相信做过 Linux 服务运维的同学&#xff0c;都用 scp 进行过服务器间的大文件网络传输。一般这需要很长的时间&#xff0c;这期间…

react结合vant的Dialog实现签到弹框操作

1.需求 有时候在开发的时候&#xff0c;需要实现一个签到获取积分的功能&#xff0c;使用react怎么实现呢&#xff1f; 需求如下&#xff1a; 1.当点击“签到”按钮时&#xff0c;弹出签到框 2.展示签到信息&#xff1a; 签到天数&#xff0c; 对应天数签到能够获取的积分&…

封装时间轴组件 timeline

要求时间轴的点展示进度百分比&#xff0c;线也根据进度不同展示不同长度的颜色 实现效果&#xff1a; 使用的组件库是vant的circle 子组件&#xff1a; <template><div class"m-timeline-area" :style"width: ${width}px"><div class&qu…

XXL-Job详解(五):动态添加、启动任务

目录 前言XXL-Job API接口添加任务API动态添加任务动态启动任务 前言 看该文章之前&#xff0c;最好看一下之前的文章&#xff0c;比较方便我们理解 XXL-Job详解&#xff08;一&#xff09;&#xff1a;组件架构 XXL-Job详解&#xff08;二&#xff09;&#xff1a;安装部署 X…

SQLserver通过字符串中间截取然后分组

当我们存的数据是json的时候可以全部取出在模糊查询但是有多个重复数据的时候就没办法准确的模糊出来这个时候我们就需要用的字符串截取 --创建函数create FUNCTION [dbo].[Fmax] (str varchar(50),start VARCHAR(50),length VARCHAR(50)) RETURNS varchar(max) AS BEGINDEC…

如何使用Cloudreve搭建本地云盘系统并实现随时远程访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

nginx部署和安装-后端程序多端口访问-后端代理设置

部分补充 查看nginx是否安装http_ssl_module模块 ./nginx -V 看到有 configure arguments: --with-http_ssl_module, 则已安装。 如果没有安装&#xff1a;参考文档 nginx官网地址&#xff1a;nginx: download 这里下载nginx-1.18.0稳定版tar.gz 下载后&#xff0c;利用…

失落的艺术:无着色器3D渲染

假设你想创建一个甜蜜的弹跳立方体&#xff0c;如下所示&#xff1a; 一个弹跳的立方体 你可以使用 3D 框架&#xff0c;例如 OpenGL 或 Metal。 这涉及编写一个或多个顶点着色器来变换 3D 对象&#xff0c;以及编写一个或多个片段着色器来在屏幕上绘制这些变换后的对象。 然…