MAKECERT和重复公钥

时间:2018-03-07 13:27:41

标签: windows certificate public-key-encryption makecert

我希望这个问题有道理。但是,我要说我用MAKECERT.EXE创建一个证书:

makecert -r -sr LocalMachine -ss my -a sha256 -sky exchange -n "CN=Hello World"

现在让我说我在两台不同的(Windows)机器上运行它。从统计上看,两台不同机器上的证书具有相同公钥的可能性是多少?

如果这个问题没有意义,我会理解为什么它没有解释。

感谢。

1 个答案:

答案 0 :(得分:2)

  • makecert默认为1024位RSA密钥。
  • 默认为固定e = 65537。
  • 1024位RSA密钥有两个素数,每个长512位。
  • Prime Number Theorem表示该大小超过2 ^ 511 / ln(2 ^ 511)个素数,如果我们减去所有511个和更小的比特素数,我们剩下大约10个^ 151。
  • 因此,在两次运行中,1e151中两个素数相对较小的几率约为1。
  • 通过the birthday problem的公式运行,我们发现所有魔法确实发生在1e75标记周围。
    • 碰撞几率:4.5e74
    • 10%:1.5e75
    • 25%:2.4e75
    • 50%:3.7e75
    • 75%:5.3e75
    • 99%:9.6e75
  • 所有这些都是两个素数中的一个。如果我们考虑另一个(并且,没有失去一般性,假设我们总是声明p < q)那么我们得到:
    • 5e150 * 1e151〜= 5e301不同的1024位RSA值n
    • 1e150运行后1%的碰撞几率。
    • 3e150
    • 后10%的碰撞几率
    • 5e150
    • 后25%的碰撞几率
    • 8e150
    • 之后50%的碰撞几率
    • 1e151
    • 后75%的碰撞几率
    • 2e151
    • 之后99%的碰撞几率

每天所有~86000秒的每秒100万个密钥(1e6),每天获得8.6e10个密钥。要获得“百万分之一百分之一”的碰撞机会(1/1e8),您需要超过1e136天的计算时间。那是3e133年。目前,宇宙被认为是1.4e10岁。所以,你需要大约有2.3e123个宇宙才能获得很高的机会(给予或接受几个宇宙)。

顺便说一下,我的计算机每核心只能做大约100个1024位密钥(大约每个10毫秒),所以我假设你有大约10,000个密钥来解决这个问题。

除非我们在CSPRNG状态冲突和VM回滚中建模(导致CSPRNG状态冲突),否则答案是:实际上是不可能的。