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

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

抗碰撞性(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.mzph.cn/news/578734.shtml

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

相关文章

MidJourney笔记(9)-daily_theme-docs-describe

/daily_theme 切换 #daily-theme 频道更新的通知。 但我发现在对话框那里,是没有这个命令的: 但官网是有介绍,不知道是不是版本问题还是这个命令已经无效。 但后来,我发现这个命令是要在Midjourney服务对话框那里才有,在我们后面添加的Mid

docker部署jenkins,发布任务执行scp免密传输

第一步 进入docker容器 # 因为jenkins的任务都是以jenkins用户执行,必须以jenkins用户进入容器生成公私钥 docker exec -it -u jenkins jenkins /bin/bash第二步 在容器内生成公私钥 # 容器中生成公私钥 直接三次回车不设置密码等信息 ssh-keygen -t rsa第三步 查…

测试C#使用AForge从摄像头获取图片

百度“C# 摄像头”关键词,从搜索结果来看,使用OpenCV、AForge、window动态链接库获取摄像头数据的居多,本文学习基于Aforge.net连接摄像头并从摄像头获取图片的基本方法。   AForge相关包(尤其是相关的控件)主要针对…

Spring--BeanFactoryPostProcessor与BeanPostProcessor的职责与区别

BeanFactoryPostProcessor与BeanPostProcessor的职责与区别 BeanFactoryPostProcessor: 职责: BeanFactoryPostProcessor 负责在容器实例化任何 bean 之前对 bean 定义进行修改。它允许你在 bean 被实例化之前对 bean 的定义进行全局性的修改&#xff…

计算机网络简述

前言 计算机网路是一个很庞大的话题。在此我仅对其基础概述以及简单应用进行陈述。后续或有补充以形成完善的计算机网络知识体系。 一.计算机网络的定义 根据百度词条的描述,计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过…

智能优化算法应用:基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.减法平均算法4.实验参数设定5.算法结果6.…

如何抵挡外在的干扰,安安静静的写代码

我们身处于外部浮躁的社会环境和快节奏的生活之中,如何抵挡外在的干扰,安安静静的写代码,安静的做项目,安静的做好当下的、眼前的事情,成为一个颇为奢侈的愿望,成了困扰许多人的问题。 现代社会的工作间是通…

Linux 文件权限、文件压缩与文件查找

一、文件权限管理 Linux 一切皆文件 先从如何查看文件类型开始: file filename 查看文件类型和编码 stat filename 查看文件详情 (一)文件属性 # ls -a drwxr-xr-x 5 root root 39 Nov 17 11:16 aaa -rw-…

JavaScript 打开窗口的办法

在JavaScript中,可以使用以下方法来打开新窗口: window.open(url, name, options):使用指定的URL打开一个新窗口。 url:要加载的URL。name:新窗口的名称(可选)。options:一个包含窗口…

OKCC语音机器人的人机耦合来啦

目前市场上语音机器人的外呼形式基本就分为三种,一种纯AI外呼,第二种也是目前主流的AI外呼转人工。那么第三种也可能是未来的一种趋势,人机耦合,或者也叫人机协同。 那么什么是人机耦合呢? 人机耦合是为真人坐席创造相…

跟着LearnOpenGL学习11--材质

文章目录 一、材质二、设置材质三、光的属性四、不同的光源颜色 一、材质 在现实世界里,每个物体会对光产生不同的反应。 比如,钢制物体看起来通常会比陶土花瓶更闪闪发光,一个木头箱子也不会与一个钢制箱子反射同样程度的光。 有些物体反…

【Qt-QMessageBox-】

Qt编程指南 ■ QMessageBox■■■■■ ■ QMessageBox 示例一&#xff1a; #include <QApplication> #include <QMessageBox> #include <QPushButton> #include <QDebug> int main(int argc, char *argv[]) {QApplication a(argc, argv);QMessageBox …

K8S的二进制部署

K8S的源码包部署 搭建准备&#xff1a; k8smaster01&#xff1a;20.0.0.32 kube-apiserver kube-controller-manager kube-scheduler etcdk8smaster02&#xff1a;20.0.0.33 kube-apiserver kube-controller-manager kube-scheduler node节点01&#xff1a;20.0.0.34 …

二分查找及其复杂的计算

&#xff08;一&#xff09;二分查找及其实现 二分查找&#xff0c;也称为折半查找&#xff0c;是一种高效的搜索算法&#xff0c;用于在有序数组&#xff08;或有序列表&#xff09;中查找特定元素的位置。 二分查找的基本思想是将待查找的区间不断地二分&#xff0c;然后确…

支付宝沙箱环境配置结合内网穿透实现远程调试Java SDK接口

文章目录 1.测试环境2.本地配置2. 内网穿透2.1 下载安装cpolar内网穿透2.2 创建隧道3. 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名5. 使用固定二级子域名进行访问 1.测试环境 MavenSpring bootJdk 1.8 2.本地配置 获取支付宝支付Java SDK,…

Mybatis Mapper XML文件-参数(Parameters)

在之前的所有语句中&#xff0c;你看到了简单参数的例子。参数在MyBatis中是非常强大的元素。对于简单的情况&#xff0c;也就是90%的情况&#xff0c;它们并没有太多的复杂性&#xff0c;例如&#xff1a; <select id"selectUsers" resultType"User"&…

odoo17核心概念view2——view_service

这是view系列的第二篇文章&#xff0c;介绍view_service.js static\src\views\view_service.js 一、前端js /** odoo-module **/import { registry } from "web/core/registry"; import { UPDATE_METHODS } from "web/core/orm_service";export const vi…

H.264运动补偿(Motion Compensation)概念(块匹配、运动矢量和残差编码、块划分和运动估计)(运动估计算法:全搜索、钻石搜索、六边形搜索)

文章目录 H.264 运动补偿概念引言I. 运动补偿基本原理1.1 运动预测1.2 帧类型1.3 块匹配 II. 运动矢量和残差编码2.1 运动矢量2.2 残差编码 III. H.264 运动补偿技术难点3.1 块划分和运动估计3.2 残差编码3.3 B帧的预测 IV. H.264 运动补偿实现4.1 帧划分与运动估计4.2 残差编码…

Jmeter 压测 —— 非GUI模式执行实例!

1、上传脚本 把在Windows下调试好的脚本上传的Linux系统/home目录下。 注意&#xff1a;只留测试脚本&#xff0c;屏蔽其它监控组件&#xff0c;比如&#xff1a;查看结果树、聚合报告、监听器等。 2、执行脚本 ①输入命令执行脚本 jmeter -n -t case.jmx -l case.jtl -n&…

Servlet技术之Cookie对象与HttpSession对象

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 Servlet技术之Cookie对象与HttpSession对象 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前…