Hash函数与生日攻击

article/2025/3/7 5:30:39

简介


Hash函数也叫杂凑函数、散列函数、哈希函数,可以把消息或数据压缩成固定长度的摘要

性质


  • 等长性:给出任意的输入,得到的输出(摘要)长度不变。比如sha-1得到的摘要固定是160位,md5为128位
  • 单向性:任给x,得到 y = h ( x ) y=h(x) y=h(x)是容易的,任给 y = h ( x ) y=h(x) y=h(x),得到x是困难的
  • 抗弱碰撞性:已知x,找到不与x相等的y满足 h ( x ) = h ( y ) h(x)=h(y) h(x)=h(y)是不可行的
  • 抗强碰撞性:找到任意两个不同的输入 x , y x,y xy使得 h ( x ) = h ( y ) h(x)=h(y) h(x)=h(y)是不可行的

哈希碰撞


在这里插入图片描述

  • 根据抗碰撞性,不会有两个不同的输入,使得哈希运算后的输出相等
  • 如果找到反例,比如上图中John和Sandra的输出相等,则称产生了哈希碰撞

空间分析


16个二进制位的哈希值,产生碰撞的可能性是 65536 分之一。也就是说,如果有65537个用户,就一定会产生碰撞。哈希值的长度扩大到32个二进制位,碰撞的可能性就会下降到 4,294,967,296 分之一。

生日悖论


在一个房间中,如果有23人,则存在两个人的生日相同的概率要大于50%。这个“悖论”并非是逻辑中的悖论,而是与直观感觉相悖,因此被称为生日悖论。当人数增加时,该概率也会增加。若人数为50,则存在两个人的生日相同的概率要大于97%。

n个人中,每个人的生日日期都不同的概率:
p ˉ ( n ) = 1 ⋅ ( 1 − 1 365 ) ⋅ ( 1 − 2 365 ) ⋯ ( 1 − n − 1 365 ) = 365 365 ⋅ 364 365 ⋅ 363 365 ⋅ 362 365 ⋯ 365 − n + 1 365 {\bar {p}}(n)=1\cdot \left(1-{\frac {1}{365}}\right)\cdot \left(1-{\frac {2}{365}}\right)\cdots \left(1-{\frac {n-1}{365}}\right)={\frac {365}{365}}\cdot {\frac {364}{365}}\cdot {\frac {363}{365}}\cdot {\frac {362}{365}}\cdots {\frac {365-n+1}{365}} pˉ(n)=1(13651)(13652)(1365n1)=365365365364365363365362365365n+1
p(n)表示n个人中至少2人生日相同的概率

p ( n ) = 1 − p ˉ ( n ) = 1 − 365 ! 36 5 n ( 365 − n ) ! p(n)=1-{\bar {p}}(n)=1-{365! \over 365^{n}(365-n)!} p(n)=1pˉ(n)=1365n(365n)!365!

哈希碰撞


  • 因此,由上可知,如果哈希值的取值空间是365,只要计算23个哈希值,就有50%的可能产生碰撞
  • 为了防止哈希碰撞,需要增大哈希映射的空间

http://chatgpt.dhexx.cn/article/sGrOlWKZ.shtml

相关文章

【Hash函数与生日攻击】

文章目录 一、Hash函数Hash函数关于密钥s散列函数定义碰撞发现实验-可忽略的散列函数安全性的三个典型的安全水平通用生日攻击 参考文献 一、Hash函数 Hash函数 将任意长度字符串压缩成短字符串的函数 关于密钥s 散列函数定义 碰撞发现实验-可忽略的 最强的安全性要求&…

生日攻击理解

1.什么是哈希碰撞?产生哈希碰撞的原因是什么?如何避免? 两个不同的输入,经过哈希算法后,得到了同样的哈希值,就叫做哈希碰撞。由于通常的哈希算法中,哈希值的空间远小于输入的空间,这…

哈希碰撞与生日相同概率

一、哈希碰撞是什么? 所谓哈希(hash),就是将不同的输入映射成独一无二的、固定长度的值(又称"哈希值")。它是最常见的软件运算之一。 如果不同的输入得到了同一个哈希值,就发生了&q…

密码学系列之:生日攻击

简介 生日攻击其实是一个概率论的问题,也就是说一个看起来很难发生的事情,事实上它发生的概率却很大。这种主观上和事实上的概率差距,让随机攻击成功的几率变的更高,这样的攻击就叫做生日攻击。 生日问题的由来 生日问题也叫做…

linux 清空redis缓存

1,进入目录redis下src目录。 #cd redis-2.8.17/src 2,执行redis-cli文件 #./redis-cli 3,执行命令:flushall,出现OK代表执行成功 #flushall 4,退出命令exit #exit 实例:

【redis】linux服务器清空redis

redis-cli 进入redis命令行 flushall 清除所有 如果报出“NOAUTH Authentication required.”错误,那么需要用密码授权 使用 auth [密码] 就可以继续操作了

redis数据清空脚本

redis服务经常因服务器内存不够用而自动死掉。需要经常连接进去做数据清理后启动服务。 所以写了个脚本每天清理一遍。 echo "flushall" | redis-cli -p 7000 -a password echo "flushall" | redis-cli -p 7001 -a password echo "flushall" |…

docker部署python程序清空redis数据

这里还是要推荐下小编的Python学习群: 823137423,不管你是小白还是大牛,小编我都欢迎 ,不定期分享干货,包括小编自己整理的一份2019年最新的Python资料和0基础入门教程视频,欢迎初学和进阶中的小伙伴。在不忙的时间我会给大家解惑。 docker部署python程序清空redis数据 线…

Windows 清空Redis数据

1.redis安装目录下输入cmd 2.redis-cli -p 端口号 3.flushdb 清除当前数据库缓存 4.flushall 清除整个redis所有缓存

Laravel 清空 Redis 队列

先说问题,我的网站搜索使用的 Laravel Scout Algolia 因为 Algolia 是收费的,免费版有容量限制。免费版应该是如下的限制: 一旦你的 计划超出配额,那么 Laravel 队列就会一直失败。失败他会重试导致 ,队列一直累加、…

教你Redis 如何清空所有数据

这篇文章主要介绍了Redis 如何清空所有数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 Redis 清空所有数据步骤总结 1、打开cmd 命令窗口,切换至Redis 安装目录下的bin文件夹 2、在cmd 命…

lnx的导数证明

https://zhidao.baidu.com/question/524121644.html

MT【80】单调性求函数表达式

提示:$f(f(f(x)-lnx)-ln(f(x)-lnx))1ef(f(x)-lnx),\because f(x)$单调.得: $f(f(x)-lnx)-ln(f(x)-lnx)f(x)-lnx$,可以解出$f(x)ln(x)e$ 转载于:https://www.cnblogs.com/mathstudy/p/7630632.html

C语言:综合题,按x的值计算sinx,cosx,ex,lnx

0<x<10,输出sinx 10<x<20,输出cosx 20<x<30,输出ex 30<x<40,输出lnx x<0或x>40,输出zsdy #include<stdio.h> #include<math.h> int main() {double x;printf("input x");scanf("%lf",&x);if(x>0&am…

怎么用计算机算lnx,lnx等于多少怎么算

lnxloge^x。ln是一个算符&#xff0c;它的意思是求自然对数&#xff0c;即以e为底的对数。e是一个常数&#xff0c;约等于2.71828183&#xff0c;lnx可以理解为ln(x)&#xff0c;即以e为底x的对数&#xff0c;所以也就是求e的多少次方等于x。 以常数e为底数的对数叫做自然对数记…

APP专项测试——弱网测试

1.弱网测试场景 弱网测试思路可以从以上场景考虑。像模拟3G网络&#xff0c;3G、4G、5G、WiFi相互切换&#xff0c;是网络测试的基本场景&#xff1b;弱网或者无网时APP的反应时长、页面呈现、超时时间和超时文案是关乎用户体验的基本场景 2.弱网测试工具 &#xff08;1&…

Android Studio创建安卓虚拟机并测试app

首先&#xff0c;右上角点击AVD Manager。 这个界面就会显示我们已有的安卓虚拟机&#xff0c;要创建新的虚拟机&#xff0c;点击Create Virtual Device。进入下一个界面选择屏幕样式&#xff1a; 接下来是Image选择&#xff0c;为了让下载的东西小一点&#xff0c;我们选择了…