如果许多密钥,RSA会遭受冲突的困扰是在同一时刻生成的?是否知道可能的密钥数量?我知道RSA是基于质数,而小数将被拒绝。我确定某个数字/位数以上的值会被拒绝,因为软件可能无法支持这些大值?
因此:碰撞前有多少个RSA密钥?而且,如果您尝试同时制造很多,那会给您带来很大碰撞机会吗?
#1 楼
对于实际的密钥大小和良好的随机数生成器,永远不要发生RSA密钥冲突。假定使用1024位RSA密钥;从中派生的素数约为512位。如果我们假设每500个512位数字是一个质数,并且假设设置了512位数字中的最高有效位,我们仍然会得到大约$ 2 ^ {500} $或$ 10 ^ {150} $个不同的质数。如果将生日问题应用到这些数字,那么您将期望RSA密钥在每个$ 2 ^ {250} $或$ 10 ^ {75} $密钥生成中具有相同的质数。相同的RSA密钥更加罕见。
它足够大,在实践中永远不会发生。不幸的是,造成碰撞的不良PRNG确实会发生,但是您无法将其转化为概率。
我忽略了计算中的一些小因素,这些小因素不会对结果产生重大影响。
GUID冲突的可能性更高。 V6 GUID是随机的,除了6个保留位。因此,有$ 2 ^ {122} $个不同的V4 GUID。如果您创建了一个庞大但可实现的GUID,而您拥有专门用于创建随机GUID的庞大系统,则可能会发生冲突。在普通大小的系统中,不太可能发生冲突,因为GUID只是整个安全系统的一部分。
理论上,创建无关紧要只要您为PRNG注入足够的熵,就可以同时使用多个RSA密钥对。但是,如果种子播种不好-这样除了系统时间外没有太多熵-那么同时随机抽取可能会成为问题。 C#中最常见的与随机性相关的问题之一是,为什么快速连续创建的两个
System.Random
实例返回相同的序列。如果用于RSA密钥对创建的随机序列相同,则RSA密钥对也将相同。评论
$ \ begingroup $
而且,在意外碰撞成为问题之前很久,故意碰撞就已经成为问题。因此,不仅在正常使用中不大可能发生冲突,而且恶意攻击者在尝试创建冲突时也必须无法创建冲突。有意做某事比偶然地做事容易得多,因此偶然的碰撞不仅要出于实际目的是不可能的,而且要有很多数量级是不可能的。
$ \ endgroup $
– David Schwartz
2012年5月6日23:59
#2 楼
如果某人生成与其他人相同的RSA密钥对,
则...某人将具有与某人相同的RSA密钥对。
当某人生成密钥对时,他/她如何确定没有人生成此密钥对?
他/她可以完全相同的方式生成任何唯一值。
证明:让唯一值作为密钥对,或者让秘密密钥作为空字符串,让公共密钥作为唯一值。
请参阅GUID和UUID。
#3 楼
这两个问题的答案都在于理解熵,以及如何收集熵以创建密钥。 (当然,该实现在没有错误的情况下做得如何。)每个操作系统都会创建并维护一个熵池,在生成密钥的过程中会从中吸收熵(也称为“随机性”)。同样,就您请求的密钥位数而言,用于计算密钥的质数越大,需要将其作为攻击因素。这就是为什么最好坚持使用2048位RSA(相对于DSA的限制为1024)。因此,更具体地回答您的问题:如果您假设没有人犯错,对算法进行编码,那么最有可能不会生成重复密钥的第一项是,操作系统正在对自身不同部分的大量状态进行采样,以创建随机数(熵)来创建密钥。
尽可能看一下RSA公共模数的唯一性。 $ 2 ^ {2026} $看起来很大吗?
如果您真的想理解,这套讲义(PDF)解释了如何使用OS熵池中的随机数来计算RSA素数$ p $和$ q $是公钥/私钥对的一部分,需要考虑这些因素以攻击算法。普渡大学讲座的12.3.1节介绍了“在RSA密码术中选择素数$ p $和$ q $的计算步骤”。
评论
$ \ begingroup $
更相关的是2 ** 2024.5看起来很大吗? $ \; $
$ \ endgroup $
–user991
2014年7月29日在22:30
评论
如果一切正确完成的可能性很小(即使用了一个好的随机数生成器)。不幸的是,这是在实践中发生的。另请参见本文中的Debian OpenSSL RNG错误,该错误详细介绍了实践中发现的其他问题。密码学是关于“极不可能”进行攻击的。考虑一下AES128-攻击者只需一次猜测就可以正确地以概率$ 2 ^ {-128} $进行猜测。碰撞RSA密钥的可能性比使用完全随机质数的可能性要小得多。
@CodesInChaos:$ \; \; $另一方面,除了3个质数的1024位RSA之外,我不知道有什么方法可以提供数学证明“碰撞RSA密钥的可能性远小于RSA密钥”如果您使用“质数兼容至少一个$ \:e \ in \ {3,\ hspace {-0.03 in} 5,\ hspace {-0.04 in} 17 \} \:$或与$ \:e = 257 \ :$特别是随机选择的其他方式。 $ \; \; \; \; \; $