MAKECERT 并复制 Public 键

MAKECERT and duplicate Public Keys

我希望这个问题是有道理的。但是假设我创建了一个带有 MAKECERT.EXE 的证书,如下所示:

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

现在假设我 运行 在两台不同的 (Windows) 机器上执行此操作。从统计上讲,两台不同机器上的证书具有相同 Public 密钥的可能性有多大?

如果这个问题没有意义,我将不胜感激解释为什么它没有。

谢谢。

  • makecert 默认为 1024 位 RSA 密钥。
  • 默认为固定的e=65537.
  • 一个 1024 位 RSA 密钥有两个素数,每个长 512 位。
  • Prime Number Theorem 表示有超过 2^511/ln(2^511) 个这样大小的素数,如果我们减去所有 511-and-smaller 位素数,我们是剩下大约 10^151.
  • 所以在两次运行中,两个素数中较小者相同的几率约为 1e151 中的 1。
  • 运行 通过 the birthday problem 的公式,我们看到所有的魔法都发生在 1e75 标记附近。
    • 1% 的碰撞几率:4.5e74
    • 10%: 1.5e75
    • 25%:2.4e75
    • 50%:3.7e75
    • 75%: 5.3e75
    • 99%: 9.6e75
  • 所有这些都是为了两个素数之一。如果我们考虑另一个因素(并且,without-loss-of-generality,假设我们总是声明 p < q),那么我们得到:
    • 5e150 * 1e151 ~= 5e301 RSA 的不同 1024 位值 n.
    • 运行 1e150 后碰撞几率为 1%。
    • 3e150
    • 后有 10% 的碰撞几率
    • 5e150
    • 后碰撞几率为 25%
    • 8e150
    • 后碰撞几率为 50%
    • 1e151
    • 后碰撞几率为 75%
    • 2e151
    • 后有 99% 的碰撞几率

以每秒 100 万个密钥 (1e6) 计算,每天大约 86000 秒,您每天会获得 8.6e10 个密钥。要获得 "millionth of a percent" 的碰撞机会 (1/1e8),您需要超过 1e136 天的计算时间。那是 3e133 年。目前,宇宙被认为有 1.4e10 岁。因此,您需要大约 2.3e123 个宇宙才能获得如此高的机会(给予或接受几个宇宙)。

顺便说一句,我的计算机每个 core-second 只能执行约 100 个 1024 位密钥(每个大约 10 毫秒),所以我假设您有大约 10,000 个密钥在解决这个问题。

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