简介

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

生日问题的由来

生日问题也叫做生日悖论,它是这样这样描述的。

假如随机选择n个人,那么这个n个人中有两个人的生日相同的概率是多少。如果要想概率是100%,那么只需要选择367个人就够了。因为只有366个生日日期(包括2月29日)。

如果想要概率达到99.9% ,那么只需要70个人就够了。50%的概率只需要23个人。

对于现在的幼儿园小朋友来说,一个班上差不多有30人,那么将会有大于50%的几率,班上有两个人的生日是一样的。

听起来是不是很神奇?跟我们第一映像中的基数是不是要少很多。

我们看一张概率图:

在实际应用中,可以应用生日问题中的概率模型,从而减少碰撞攻击的复杂度,或者来评估一个hash函数中可能出现碰撞攻击的几率。

怎么计算呢?

假如P(A) 是生日相同的概率,那么P(A) = 1 - P(A’) ,其中P(A’)是生日不同的概率。

一个人生日不同的概率是365/365,两个人生日不同的概率就是365/365 * 364/365 ,依次类推。

我们可以得到23个人生日不同的概率大概就是 0.492703。

也就是说23个人中有两个人生日相同的概率可以大于50%。

再看一张表来个更加直观的描述:

生日问题的衍生

生日问题的取值范围是在一年的365天之内,也就是说生日只可能有365种可能性。

我们将这个问题扩展一下到一般的情况,假设有一个函数f,它的输出范围是H,那么我们的攻击就是找到两个不同的x,y,让f(x)=f(y)。

这时候,我们可以称x和y发生了碰撞。

根据概率论的公式,我们想要达到50%的几率,那么需要尝试的次数是:

如果以bits位来表示可能计算出的结果的话,我们可以参考下面的概率表:

生日攻击的应用

生日攻击一般应用在数字签名中。一般来说为了对机密消息进行签名,因为加密的限制,如果消息很大的情况下,不可能对所有的消息进行签名,通常会对消息计算hash值,然后对这个hash值进行签名。

比如有人想做一个欺诈性的合同,那么会在原合同的基础上进行修改,不断的进行尝试,从而找到一个修改后的合同,让合同和之前合同的hash是一样的,从而导致两者的签名也是一样的。

怎么抵御这种攻击呢?根据我们生日攻击的公式,当然是将签名方案使用的哈希函数的输出长度选择得足够大,以使生日攻击在计算上变得不可行。

本文已收录于 http://www.flydean.com/birthday-attack/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

密码学系列之:生日攻击相关推荐

  1. 密码学系列之:SAFER

    简介 分组密码是一个非常优秀的加密结构,很多常用加的加密算法使用的都是分组算法,比如DES.SAFER表示的也是一种分组密码算法.一起来看看吧. SAFER简介 SAFER的全称是Secure And ...

  2. 密码学系列(一):密码行业、政策介绍

    密码学系列(一):密码行业.政策介绍 管理部门 <密码法>(19年) <密码法>具体章节 第3章 商用密码 第4章 法律责任 相关零散知识 管理部门 国家密码管理局--商密办- ...

  3. 密码学系列 - 椭圆曲线签名的基本原理

    ECDSA 涉及到三个重要的概念 第一个是私钥,私钥是一个只有我自己知道的数字,我可以用私钥去生成签名,比特币使用的私钥是一个256 bit 的整数. 第二个是公钥,公钥是跟私钥配对的一个数,是根据私 ...

  4. 密码学系列 - 椭圆曲线 ECC - ED25519

    密码学 - 椭圆曲线 ECC ED25519 椭圆曲线是一系列满足如下方程的点: y^2 = x^3 + ax + b 并且 4a^3 + 27b^2 != 0 特性 封闭性:因为椭圆曲线上的点相加, ...

  5. 密码学系列 - 国密算法

    国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4,SM9.密钥长度和分组长度均为128位. 国密算法种类 SM1 为对称加密.其加密强度与AES相当.该算法不公开,调用该算法时 ...

  6. 密码学系列 - 棱镜门

    prime256v1 (即 secp256r1) NSA对SECP256r1曲线安置了后门陷阱, 被美国情报人员破解可能性非常大 2013年发生了震惊世界的棱镜门事件.这一年,前中情局(CIA)职员爱 ...

  7. 密码学系列 - 默克尔路径

    默克尔树 (merkle tree) 默克尔树,也称为哈希二叉树,是一种用于有效地汇总和验证大型数据集完整性的数据结构. 默克尔路径 可用于证明在一个很大字节数的区块中上千笔交易中的具体某一笔交易的存 ...

  8. 密码学系列(三):区块链+密码学基础知识

    密码学系列(三):区块链+密码学基础知识 一.区块链的概念 区块链概述 区块链的特点 区块链变化 市场现状 二.区块链政策与标准 区块链的特点与发展 三.区块链的定义 区块链的价值 四.区块链开发语言 ...

  9. 密码学系列 - 国密算法SM1/SSF33

    国密分组密码 SM1分组密码和SSF33分组密码均为国密分组密码标标准,SM1和SSF33的密钥长度和分组长度均为128比特. 目前这两个分组密码标准的算法尚未公开,其实现仅可以通过硬件芯片的方式获得 ...

最新文章

  1. python怎么读取列表-Python如何获取列表(List)的中位数
  2. Python中Pyaudio安装失败的解决办法
  3. Codeforces 848C. Goodbye Souvenir
  4. FluentEmail - 适用于 .NET 和 .NET Core 的邮件发送库
  5. Hive报错:Exception in thread main java.lang.Incom。。。。 Class com.google.common.collect.ImmutableSotil
  6. FreeRTOS学习及移植笔记之一:开始FreeRTOS之旅
  7. 带你深入浅出的分析 HashTable 源码
  8. 02-虚拟机克隆配置
  9. getHibernateTemplate()为NUll
  10. 2006年 上半年 网络管理员 下午试卷
  11. 堆插入和删除的简单实现
  12. 计算机科学与技术实践教学,浅谈计算机科学与技术实践教学体系
  13. 灰色系统理论与灰色关联分析模型
  14. [基于Python的微信公众号后台开发:1]配置对接阿里云服务器
  15. Ada的故事(转自互联网)
  16. 关于博客的书写——读刘末鹏博客学习方法篇有感
  17. elementui级联选择器
  18. Git生成生成公钥和私钥
  19. pytorch基于yolo目标检测的智慧课堂系统
  20. 通过形状先验引导的3D目标检测方法(Disp R-CNN解读)

热门文章

  1. m1 Mac zshrc 环境变量
  2. 堡垒主机内控管理平台产品方案介绍
  3. Jest,karma结合Vue-test-utils的优秀文章
  4. 易语言 上传文件到远程服务器,易语言与向远程服务器发送文件夹
  5. 恢复删除的环境变量-卷影复制
  6. 一分钟快速将ogg转换成MP3格式
  7. opencv blur函数——均值滤波
  8. 人工智能科技如何为航空业“保驾护航”?
  9. gazebo仿真rotors调整实时比例的方法
  10. (6CBIR模拟问题)自己动手,编写神经网络程序,解决Mnist问题,并网络化部署...