zoukankan      html  css  js  c++  java
  • 生日碰撞的证明

    鉴于近几日学习密码学生日碰撞用得太多,故整理一下证明,加深一下理解。

    问题:假设有$m$个人,一年有$N$天($m < N$),用$P(m,N)$表示这$m$个人中至少有两个人生日相同的概率。

    证明:

    $egin{array}{l}
    overline {P(m,N)} = 1 - P(m,N) = frac{{{{(N)}_m}}}{{{N^m}}} = frac{{N(N - 1)...(N - m + 1)}}{{{N^m}}}\
    = frac{N}{N}(1 - frac{1}{N})(1 - frac{2}{N})...(1 - frac{{m - 1}}{N})\
    ge 1 - frac{{1 + 2 + 3 + ...(m - 1)}}{N} = 1 - frac{{m(m - 1)}}{{2N}}
    end{array}$

    所以有,$P(m,N) le frac{{m(m - 1)}}{{2N}}$

    又因为:$frac{N}{N}(1 - frac{1}{N})(1 - frac{2}{N})...(1 - frac{{m - 1}}{N}) = prodlimits_{i = 1}^{m - 1} {(1 - frac{i}{N}) le prodlimits_{i = 1}^{m - 1} {{e^{ - frac{i}{N}}}} } $

    所以有,$P(m,N) ge prodlimits_{i = 1}^{m - 1} {{e^{ - frac{i}{N}}}}  = 1 - {e^{frac{{ - m(m - 1)}}{{2N}}}}$

     此时,我们令$varepsilon $为最小的概率, 则有$varepsilon  = 1 - {e^{frac{{ - m(m - 1)}}{{2N}}}}$

    变换可得,$2Nln (1 - varepsilon ) =  - m(m - 1)$

    即$m approx sqrt {2Nln frac{1}{{1 - varepsilon }}} $

    当$varepsilon  = frac{1}{2}$时,$m approx 1.1774sqrt N $

    当$N = 365$,$m = 23$

    也就是说,大约$sqrt N$ 个球投入$N$个篮子里,就可保证$1$个篮子里出现两个球(发生碰撞)的概率为$frac{1}{2}$

    生日攻击:

    1、简介:

    生日攻击是利用概率论中的生日问题,找到冲突的$Hash$值,伪造报文,使身份验证算法失效。

    2、场景说明:

    $A$要对一个合同文件进行签名,然后把合同文件和签名一起发送给接收者。 

    签名的方法:计算文件的$Hash$值($m$位),然后使用$A$的私钥对这个$Hash$值进行加密。

    接收者使用$A$的公钥进行解密,然后比较$Hash$值,这样他就能确认: 接收到的合同文件是$A$发送的,并且合同文件未被修改过。

    攻击者$B$想要伪造一份假合同文件,然后发送给接收者,并使接收者仍然相信: 接收到的合同文件是$A$发送的,并且合同文件未被修改过。

    3、攻击方法:

    B先准备 ${2^{frac{m}{2}}}$个有效合同文件(集合X),每个文件包含与原合同文件相同的意思。
    B再准备 ${2^{frac{m}{2}}}$个伪造合同文件(集合Y),每个文件也都是希望的伪造合同的意思。

    然后比较集合X和集合Y,找到Hash值相同的两个文件,分别是有效合同和伪造合同。

    B成功的概率会大于$0.5$,如果没有找到匹配的文件,就准备更多的有效文件和伪造文件,直到找到一对匹配的文件。

    > 注:如果使用$64$位$Hash$值,那么只需要${2^{32}}$个不同文件,这无法防住现代计算机系统。

    B把找到的有效合同文件提供A,A看了一下,没什么问题,就做了签名,然后发送给接收者。

    在接收者收到消息之前,B截获了这个消息,然后使用伪造合同替换有效合同,再把伪造合同和原签名一起发送给接收者。

    因为伪造合同与有效合同的$Hash$值相同,所以它们产生相同的签名。
    这样,即使B不知道A的私钥,他也能成功!

    4、防范方法:

    - 使用安全的hash算法
    - 加盐
    - 改动文件

    5、总结:

    -生日攻击可以使碰撞攻击($x$和$y$都不确定)的复杂度降到$O({2^{frac{n}{2}}})$的复杂度

    -生日攻击仅与$hash$长度有关,所以为了抵御生日攻击,必须加大$hash$串的长度。

  • 相关阅读:
    Cassandra
    POST和GET方法
    webx流程
    Cassandra的内部数据存储结构
    Session和Cookie
    昆爷又发了4篇siggraph2010,牛A...榜样和目标...
    真正开博了
    ebook搜索,I can! cool!
    (转)计算机图形学的学习
    3D图形学习的现在和将来(转)
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/7687409.html
Copyright © 2011-2022 走看看