首先让我们回顾一些概念,以避免混淆。
非对称加密密钥具有结构,这是支持“非对称”事物所必需的。总是,破解正确定义和实施的非对称加密的最佳方法是尝试解开该内部结构。在 RSA 的情况下,公钥是一个大整数(模数)和一个(通常很短)指数的组合,“内部结构”是模数的素因数的知识。
不同的非对称加密算法将使用不同的结构元素,没有充分的理由说明不同的密钥类型会为给定长度提供相同的“强度”,特别是因为“长度”不是绝对属性。在 RSA 的情况下,长度是模数的大小;2048 位 RSA 密钥是模数介于 2 2047和 2 2048之间的 RSA 密钥。当编码为字节时,完整的RSA 密钥当然更大,因为您也必须将公共指数放在某个地方。
一般来说,在实践中可以遇到的主要非对称密码算法有:
基于整数分解的算法:公钥包含一个大的复合整数,并且知道该整数的素数因子允许恢复私钥。该类型的主要算法是RSA;该类别中的其他(使用较少的)算法包括 Rabin 的加密(和 Rabin-Williams 签名)和 Paillier 的非对称加密。
基于离散对数的算法:有一个众所周知的素数模p,还有一些整数g模p;私钥是某个整数x,公钥是g x mod p。该类别中最著名的算法包括 Diffie-Hellman(密钥交换)、El Gamal(非对称加密)和 DSA(签名)。
基于椭圆曲线的算法:这些算法实际上与离散对数算法相同,只是计算是在称为椭圆曲线的代数对象中完成的,而不是对素整数p取模。数学更复杂,但椭圆曲线似乎对给定大小的离散对数更具弹性,因此允许使用更短的元素(这反过来意味着更好的性能)。
基于晶格缩减的算法。此类别适用于NTRU。该算法尚未获得广泛认可(专利无济于事)。
分解整数,打破离散对数......需要使用一些需要大量 CPU和大量 RAM 的专用算法。我们通常喜欢通过尝试将攻击成本与暴力破解对称密钥的成本标准化来“比较优势”。对称密钥只是一堆比特;蛮力正在尝试所有可能的组合。
当然,这种简单的比较实际上是行不通的:
- 试用一个对称密钥的成本取决于所涉及的加密算法。并非所有这些都意味着相同的每个键的工作量。
- 对称密钥的蛮力根本不需要 RAM,并且可以并行化。例如,整数分解算法不能完全并行,并且需要大量 RAM(尤其是非并行部分)。
- 与对称密钥相反,非对称密钥通常寿命较长;例如,在您的情况下,您有一个RSA 密钥,并且会即时生成许多对称密钥。因此,非对称密钥的密钥破解机器的投资回报通常更高(破解一个非对称密钥往往会产生更多的权力)。
尽管如此,这并没有阻止各种机构估计各种非对称密钥的强度,例如说 RSA 2048 位密钥的强度与 112 位对称密钥大致相同。由于一些怪异且鲜为人知的原因,离散对数和整数分解似乎为相同的模数大小提供了相似的强度(严格来说,离散对数略强,使用当前已知的算法)。
有关这些估计的详细信息,请参阅此站点。
底线: RSA-2048 会很好。当您的系统被破坏时,它不会是通过预先破坏您的密钥;相反,它将通过您存储私钥的服务器受到损害,无论是因为普通的缓冲区溢出,备份磁带的粗心放错,还是心怀不满的员工的行为,道德都变幻莫测。