Hash函数碰撞概率公式

生日问题

这个问题在数学上早有原型,叫做"生日问题"(birthday problem):一个班级需要有多少人,才能保证每个同学的生日都不一样?

答案很出人意料。如果至少两个同学生日相同的概率不超过5%,那么这个班只能有7个人。事实上,一个23人的班级有50%的概率,至少两个同学生日相同;50人班级有97%的概率,70人的班级则是99.9%的概率(计算方法见后文)。

这意味着,如果哈希值的取值空间是365,只要计算23个哈希值,就有50%的可能产生碰撞。也就是说,哈希碰撞的可能性,远比想象的高。实际上,有一个近似的公式。

上面公式可以算出,50% 的哈希碰撞概率所需要的计算次数,N 表示哈希的取值空间。生日问题的 N 就是365,算出来是 23.9。这个公式告诉我们,哈希碰撞所需耗费的计算次数,跟取值空间的平方根是一个数量级。

这种利用哈希空间不足够大,而制造碰撞的攻击方法,就被称为生日攻击(birthday attack)。

生日问题数学推导

这一节给出生日攻击的数学推导。

至少两个人生日相同的概率,可以先算出所有人生日互不相同的概率,再用 1 减去这个概率。

我们把这个问题设想成,每个人排队依次进入一个房间。第一个进入房间的人,与房间里已有的人(0人),生日都不相同的概率是365365\frac{365}{365}365365​;第二个进入房间的人,生日独一无二的概率是364365\frac{364}{365}365364​;第三个人是363365\frac{363}{365}365363​,以此类推。

因此,n个人(n<366n<366n<366)的生日都不相同的概率,就是下面的公式。
p‾(n)=1∗364365∗363365∗....∗365−n+1365\overline{p}(n)=1\ast\frac{364}{365}\ast\frac{363}{365}\ast....\ast\frac{365-n+1}{365}p​(n)=1∗365364​∗365363​∗....∗365365−n+1​

那么,至少有两个人生日相同的概率,就是 1 减去上面的公式。
p(n)=1−p‾(n)p(n)=1-\overline{p}(n)p(n)=1−p​(n)

哈希碰撞的公式

在高数中,根据泰勒公式,指数函数 exe^xex 可以用多项式展开。

exp(x)=∑k=0∞xkk!=1+x+x22+x36+...exp(x)=\sum_{k=0}^{\infty}\frac{x^k}{k!}=1+x+\frac{x^2}{2}+\frac{x^3}{6}+...exp(x)=∑k=0∞​k!xk​=1+x+2x2​+6x3​+...

当x是一个极小值的时候,那么上面的公式近似等于下面的形式。
ex≈1+xe^x \approx 1+xex≈1+x

现在把生日问题的1365\frac{1}{365}3651​带入:
364365=1−1365≈e−1365\frac{364}{365}=1-\frac{1}{365}\approx e^{-\frac{1}{365}}365364​=1−3651​≈e−3651​

所以p‾(n)\overline{p}(n)p​(n)可以写成如下的公式:
p‾(n)≈1∗e−1365∗e−2365∗...∗e−n−1365\overline{p}(n)\approx 1\ast e^{-\frac{1}{365}}\ast e^{-\frac{2}{365}}\ast ...\ast e^{-\frac{n-1}{365}}p​(n)≈1∗e−3651​∗e−3652​∗...∗e−365n−1​
化简为:
p‾(n)=e−n(n−1)730\overline{p}(n)=e^{-\frac{n(n-1)}{730}}p​(n)=e−730n(n−1)​

所以p(n)=1−p‾(n)=1−e−n(n−1)730p(n)=1-\overline{p}(n)=1-e^{-\frac{n(n-1)}{730}}p(n)=1−p​(n)=1−e−730n(n−1)​

假设d为取值空间(生日问题中是365),那么就得到一般化的公式:
p(n,d)≈1−e−n(n−1)2dp(n,d)\approx 1-e^{-\frac{n(n-1)}{2d}}p(n,d)≈1−e−2dn(n−1)​

BlockChain学习——Hash函数碰撞概率公式及其推导相关推荐

  1. 二维随机变量函数卷积公式的推导

    二维随机变量函数卷积公式的推导 @(概率论) 给定Z=g(x,y)Z = g(x,y) 通常需要求FZ(z),fZ(z)F_Z(z),f_Z(z) 这里是由两个变元依据关系映射到一个变元,因此,求得F ...

  2. 布谷鸟哈希函数的参数_系统学习hash算法(哈希算法)

    系统学习hash算法(哈希算法) 转载请说明出处. 前言: 关于本文<系统学习hash算法>的由来.在看到了<十一.从头到尾彻底解析Hash 表算法>这篇文章之后,原文中没有暴 ...

  3. 合宙Air105|CRYPTO|加密与解密|算法|RSA|HASH函数| BASE64|MD5|SHA1|SHA256|CRC|官方demo|学习(4):CRYPTO(加密与解密)

    基础资料 基于Air105开发板:Air105 - LuatOS 文档 上手:开发上手 - LuatOS 文档 探讨重点 对官方CRYPTO(加密与解密) 功能的复现,进行相关内容的学习及探讨. 实现 ...

  4. evaluate函数使用无效_VBA学习笔记5:函数与公式

    学习资源:<Excel VBA从入门到进阶>第六讲 函数与公式 by蓝色幻想 一.在单元格中输入公式 1.用VBA在单元格中输入普通公式 Sub t1()Range("d2&qu ...

  5. 视频教程-小白学习课程:梯度下降算法与公式详细推导-深度学习

    小白学习课程:梯度下降算法与公式详细推导 国内"双一流"大学博士研究生,计算机专业,研究方向和兴趣包括人工智能,深度学习,计算机视觉,群体智能算法,元胞自动机等,愿意分享自己的技术 ...

  6. Oulipo(Hash入门第一题 Hash函数学习)

    Hash,一般翻译做散列.杂凑,或音译为哈希,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的 ...

  7. 《具体数学》学习笔记: 4.四种方法推导平方和公式

    四种方法推导平方和公式 序言: 连续自然数的平方和, Sn=∑k=0nk2=12+22+...+n2S_n = \sum_{k=0}^{n}{k^2} = 1^2 + 2^2 + ... + n^2S ...

  8. 梯度下降法参数更新公式的推导

    梯度下降法参数更新公式的推导 先来回顾一下梯度下降法的参数更新公式: (其中,α是学习速率,是梯度) 这个公式是怎么来的呢?下面进行推导: 首先,如果一个函数 n 阶可导,那么我们可以用多项式仿造一个 ...

  9. 梅森公式的推导和探究

    梅森公式的推导(篇三):梅森公式的推导和探究 写在前:   本篇是<梅森公式的推导>的篇三,我的个人探究部分,尝试了梅森公式的推导和探究.篇一认识信号流图介绍了信号流图的基本概念和简单形式 ...

  10. 【相机标定与三维重建原理及实现】学习笔记1——相机模型数学推导详解

    目录 前言 一.小孔成像模型 二.坐标系的变换 1.世界坐标系到相机坐标系的变换(刚体变换)[xw^→xc^\boldsymbol {\hat{x_{w}}}\rightarrow \boldsymb ...

最新文章

  1. javascript优缺点_为什么要在JavaScript中使用静态类型? 优缺点
  2. 2016年,C语言该怎样写
  3. background-attachment: fixed的用法
  4. 转:python 实现GUI(图形用户界面)编程
  5. 类选择器与ID选择器的比较
  6. (转载)计算机视觉、图像处理中常见的滤波操作
  7. redis 获取所有key_Redis笔记
  8. 抓狐狸python_​用Python操作Kubernetes的Job
  9. 创建定制的ASP.NET AJAX非可视化客户端组件
  10. java大数据组件Zookeeper
  11. Ubuntu 16.04 用apt-get来安装Java
  12. 用什么录屏软件能录制高清视频
  13. php 做批量打印二维码,php语言开发的网站,如何实现批量打印快递单的功能?
  14. wordpress插件-wordpress常用插件大全
  15. 医院患者随访工作信息化建设可行性报告
  16. 共享打印机服务器脱机状态,网络/局域网共享打印机脱机故障处理方法
  17. word插入脚注后最后一页多了一个分页符(下一页),导致最后多了一个空白页,删除不掉。
  18. Advanced Installer,搜索注册表,根据注册表选择安装路径
  19. Supported media formats (支持的媒体格式)
  20. LeetCode Image Smoother

热门文章

  1. 家居物联网(IoT)接入控制与认证的再思考
  2. 【读书笔记】致加西亚的信(一)
  3. 鸿蒙开发必备书籍整理【收藏系列】
  4. unit10-Cookie、Session
  5. 给定一个字符串,去除整个字符串中重复的字符
  6. 计算机在学前教育中作用论文,学前教育论文
  7. 小猫钓鱼游戏java实现
  8. 为什么要成为软件工程师
  9. 工控组态编程相关知识点介绍
  10. 数据分析师岗位 分析可视化