密钥大小是传统的。我的意思是,没有通用的、数学上接受的“密钥大小”概念可以匹配所有算法。对于对称算法,通常具有给定长度n的位序列的密钥,这样所有可能的长度为n的序列(其中有2 n个)都是可接受的密钥;在这种情况下,密码学家倾向于谈论n作为“密钥大小”。这里已经有麻烦了,DES 有 64 位密钥,其中只有 56 位被使用,所以 DES 可以说是使用 56 位密钥。同样,3DES 使用 192 位密钥,实际上是 168 位密钥;并且,为了进一步混淆,有一种已知算法(理论上)在努力2 112中破坏了 3DES,因此有时说 3DES 具有“112 位”安全级别。另一个麻烦的算法是 RC2,它有一个额外的“有效密钥大小”参数,可以将 RC2 对暴力破解的抵抗力降低到可配置的值,即使密钥更长。
对于非对称密码学,事情更加复杂,因为公钥和私钥不再是“只是位序列”。例如,一个 RSA 公钥由两个整数组成,模数和公共指数。传统上使用模数的大小作为“RSA 密钥大小”,即使不可能将整个 RSA 公钥放入该大小的位序列中(因为公共指数没有空间) .
对于 Diffie-Hellman,标准是ANSI X9.42。该标准始终避免提及“密钥大小”。相反,它总是谈论“ p的大小”和“ q的大小”。两种尺寸对于安全性都很重要,但不在同一范围内。也就是说,DH 使用以大素数p为模的数字和生成器g工作。生成器g “生成”整数模p的子组:如果考虑连续值1,g,g 2,g 3 ...模p,你会在某个时候回到1 。g的阶是最小整数k > > 0使得g k = 1 mod p。数学告诉我们k必然除以p-1。使用这些符号:
如果以g为底的离散对数模p被破坏,则 DH 可能被破坏。有些算法的成本取决于p的大小,因此您希望p足够大以使这些算法过于昂贵。该类型最著名的算法是通用数域筛和当前记录的变体,因为“随机”模p是 530 位(可以制作特殊形式的模p,这使得离散对数更容易,但是随机素数将以压倒性的概率避免这种情况)。
离散对数也可以在一段时间内被打破,这取决于使用的指数大小和k的阶数。如果在 Diffie-Hellman 中,一方在t个连续值的范围内选择其私有指数,并且k的最大素因子( g的阶)是q,那么该类型的算法将在一段时间内破坏 DH取决于q和t中的最小值。这些是“通用”算法,其运行时间与q的平方根(或t,如果它更小)成正比。
所以基本上你有三种尺寸:
- DH 私钥生成的t大小:每个参与方生成 1..t-1范围内的随机 DH 私钥。
- q的大小,它是生成器g的k阶的最大素因子。
- 模数p的大小。
在某些协议中,q是显式生成的,因此具有已知的大小,然后生成p使得p-1是q的倍数。然后选择g以精确地具有顺序q ( g q = 1 mod p )。在这些协议中,我们设置t = q:q是已知的,系统生成1..q-1范围内的私钥。
在一些其他协议中,p被生成为所谓的“安全素数”,即,(p-1)/2也是素数。在这种情况下,p = 2q+1。对于这些协议,DH 私钥将在较小的t范围内生成,通常为 160 到 256 位。
在其他一些协议中,q根本不知道,只是假设它足够大。这是SSL/TLS的情况(对于 DHE 密码套件,Server Key Exchange
消息包含p和g但不包含q,因此客户端不知道q)。同样,使用范围t。
我们想要一些n的n位安全性,这意味着破坏算法应该具有平均成本2 n操作。要达到这样的安全级别,q的大小和t的大小至少应为2n位,但p必须大得多。给出数字,一般估计如果你寻找n = 112(112 位安全性,这是你用 3DES 进行对称加密得到的),那么你需要q和t至少为 224 位,但p应该至少为 2048 位。
总结:当谈到 DH 时,像 1024 或 3072 这样的“大”尺寸通常意味着“ p的大小”,而像 160 或 256 这样的“小”尺寸通常意味着“ q的大小”或“ t的大小” . “尺寸”没有标准,实际上该标准并没有定义唯一的一刀切尺寸。
在您的维基百科引用中,“3072 位”是p的大小(模数)。值y是 DH 公钥,在1..p-1范围内,因此也是 3072 位(或稍小)。私有指数x在1..t-1范围内选择,该范围也可能与 3072 位一样大(甚至更大),但更小的范围(例如)256 位对于安全性来说是完全可以接受的。
正如@Polynomial 所说,请参阅此站点以比较密钥大小。