前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >密码学系列之:生日攻击

密码学系列之:生日攻击

原创
作者头像
程序那些事
修改于 2021-06-16 02:29:28
修改于 2021-06-16 02:29:28
2.1K0
举报
文章被收录于专栏:程序那些事程序那些事

简介

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

生日问题的由来

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

假如随机选择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/ 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现! 欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
密码学经典之生日悖论与生日攻击【详解】
生日悖论 在算法导论书上看到个比较有意思的概率算法,在这里加上自己的理解分享下: 上次刚看同学发的朋友圈说道:“两个人同一间宿舍,而且同年同月同日生,这个缘分真的是醉了”,当时我也是醉醉的,看了这个算法后才发现,屋里有23个人,那么就可以50%的概率生日是一样的。 是这样子证明的: 首先,假设屋子里有K个人,分别对他们编号1,2,3….k号。不考虑闰年的情况,那么一年就有n=365天,首先还是要假设生日是均匀分布在一年的n天中(喜欢在春天生就都在春天生这就不均匀了),然后还要假设两个人生日相互独立(什么
Angel_Kitty
2018/04/09
2.6K0
哈希碰撞与生日攻击
所谓哈希(hash),就是将不同的输入映射成独一无二的、固定长度的值(又称"哈希值")。它是最常见的软件运算之一。
ruanyf
2018/09/21
1.4K0
哈希碰撞与生日攻击
终于有人把生日悖论讲明白了
生日悖论是一个概率论中的现象,它说明了在一定的条件下,一个不太可能的偶然事件发生的概率会比直觉认为的要大得多。具体来说,生日悖论指的是,在一个随机选择的23人群体中,至少有两个人生日相同的概率超过50%。
空白诗
2025/04/16
800
终于有人把生日悖论讲明白了
简单小结密码学入门知识点
  密码,最初的目的是用于对信息加密,计算机领域的密码技术种类繁多。但随着密码学的运用,密码还被用于身份认证、防止否认等功能上。密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。
步履不停凡
2019/08/23
2.2K0
简单小结密码学入门知识点
python 实现 AIGC 大模型中的概率论:生日问题的基本推导
在上一节中,我们对生日问题进行了严谨的阐述:假设屋子里面每个人的生日相互独立,而且等可能的出现在一年 365 天中的任何一天,试问我们需要多少人才能让某两个人的生日在同一天的概率超过 50%。
望月从良
2023/12/05
1850
python 实现 AIGC 大模型中的概率论:生日问题的基本推导
反直觉的「生日悖论」问题
生日悖论是由这样一个问题引出的:一个屋子里需要有多少人,才能使得存在至少两个人生日是同一天的概率达到 50%?
五分钟学算法
2019/09/03
9830
反直觉的「生日悖论」问题
密码学系列之:碰撞抵御和碰撞攻击collision attack
hash是密码学和平时的程序中经常会用到的一个功能,如果hash算法设计的不好,会产生hash碰撞,甚至产生碰撞攻击。
程序那些事
2021/06/03
1.3K0
科普 | 哈希函数的过去、现在与未来
以下文章来源于以太坊爱好者 翻译&校对: 闵敏 & 阿剑 科普 | 哈希函数的过去、现在与未来 哈希值和哈希函数的概念是初次入门区块链的人常听到的两个关键词,而且似乎对安全性来说特别关键。(实际上也确实是。)对于像比特币和以太坊这样由成千上万的节点通过 P2P 方法组成的去中心化网络来说,“免信任性” 和验证效率无疑是关键。也就是说,这些系统需要找到方法把信息编码成紧凑的形式,同时让参与者能够安全快速地进行验证。 比特币和以太坊网络所处理的主要内容叫做 “区块”,指的是由交易、时间戳和其他重要元数据所组成的
区块链大本营
2023/03/31
6970
科普 | 哈希函数的过去、现在与未来
一个屋子里必须要有多少人,才能让某人和你生日相同的概率至少为1/2? 必须要有多少人,才能让至少两个人生日为 7月 4 日的概率
证明:假设有n个人,生日都在一年365天当中,则某人和你的生日相同的概率至少为1/2,即n≥23。
福大大架构师每日一题
2023/06/21
3170
一个屋子里必须要有多少人,才能让某人和你生日相同的概率至少为1/2? 必须要有多少人,才能让至少两个人生日为 7月 4 日的概率
密码技术之单向散列函数
单向散列函数(one-way hash function),也称为消息摘要函数(message digest function)、哈希函数、杂凑函数,是指输入消息(message)输出散列值(hash value),用于消息的完整性(一致性)检查。
安智客
2018/07/30
1.6K0
密码技术之单向散列函数
密码学系列之:Merkle–Damgård结构和长度延展攻击
Merkle–Damgård结构简称为MD结构,主要用在hash算法中抵御碰撞攻击。这个结构是一些优秀的hash算法,比如MD5,SHA-1和SHA-2的基础。今天给大家讲解一下这个MD结构和对他进行的长度延展攻击。
程序那些事
2021/07/23
1.9K0
hashCode,MD5,SHA-1的区别和碰撞量级
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/11/20
7K0
python 实现 AIGC 大语言模型中的概率论:生日相同问题的代码场景模拟
对深度学习本质而言,它实际上就是应用复杂的数学模型对输入数据进行建模,最后使用训练好的模型来预测或生成新的数据,因此深度学习的技术本质其实就是数学。随着大语言模型的发展,人工智能的数学本质被进一步封装,从业者要不直接调用给定模型处理给定数据,有点“技术内涵”的就是在给定模型基础上进行“微调”,我看现在很多 国内的AIGC 创业团队,几乎没有多少人有能力对开源的大模型进行修改或创造的能力。主要原因在于大模型的训练需要天量的数据和算力外,还在于其在数学理论基础上有很高的要求。我们很多人因此只能局限于AIGC 的“术”,也就是拿一个开源模型去适配特定的商业需求或场景,对于AIGC 的”道“而言,就只能讳莫如深,因为其要求的数学门槛太高。
望月从良
2023/12/04
2500
python 实现 AIGC 大语言模型中的概率论:生日相同问题的代码场景模拟
网络攻击解疑:密码学上的攻击
有不少密码学里的方案被用来加密在有线或者无线的通信协议上的传输数据。然而这些技术已被证实容易受到攻击,且加密的数据可能会被窃取。本文探讨了各种能保护网络基础设施的加强加密技术的方法,包括使用基于 FOSS (自由开源软件)方案的方法。
Tnecesoc
2018/05/21
2.6K2
两个有悖常识的概率题
1、一个家庭中有两个小孩,已知其中有一个是女孩,则这时另一个小孩是男孩的概率是多少?(假定生男孩和生女孩的概率是一样的)
kai666666
2020/10/23
2.9K0
斯坦福大学密码学-抗碰撞 06
基于CBC的MAC:两种变形:ECBC,CMAC。常与AES一起使用,在802.11i标准里,CBC-MAC被用于信息完整性。
Daffy
2020/11/04
2K0
文心一言 VS 讯飞星火 VS chatgpt (39)-- 算法导论5.4 3题
在生日悖论的分析中,要求各人生日彼此独立是非常重要的。这是因为,如果各人生日不是独立的,而是存在一定的相关性,那么就会影响到概率的计算,从而影响到生日悖论的分析结果。
福大大架构师每日一题
2023/06/21
1730
文心一言 VS 讯飞星火 VS chatgpt (39)-- 算法导论5.4 3题
读《图解密码技术》(二):认证
原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/reading/20160705 微信订阅号:keeganlee_me 写于2016-07-05
Keegan小钢
2018/08/10
1K0
读《图解密码技术》(二):认证
八个意想不到的数学事实
总有一些东西听上去违背常理,可却是事实。数学就可以带给你这样的惊喜,今天我们就来为大家列举几个用数学就能解决的既简单又让人意外的小问题。
Jean
2019/04/08
1.3K0
八个意想不到的数学事实
密码学系列之:blowfish对称密钥分组算法
Blowfish是由Bruce Schneier在1993年发明的对称密钥分组加密算法,类似的DES和AES都是分组加密算法,Blowfish是用来替代DES算法出现的,并且Blowfish是没有商用限制的,任何人都可以自由使用。
程序那些事
2021/06/21
6821
推荐阅读
相关推荐
密码学经典之生日悖论与生日攻击【详解】
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档