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 状态冲突)中建模,否则答案是:实际上不可能。
我希望这个问题是有道理的。但是假设我创建了一个带有 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
- 1% 的碰撞几率:
- 所有这些都是为了两个素数之一。如果我们考虑另一个因素(并且,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 状态冲突)中建模,否则答案是:实际上不可能。