为什么在 RSA/加密中使用"large prime numbers"?



我已经学会了公钥加密的理论,但我错过了与物理世界的联系。

有人告诉我,好的RSA加密应该依赖于300个十进制数字的质数,但为什么呢? 谁想出了这个数字?破解这种加密需要多长时间(关于不同机器的统计信息)。

试过谷歌,但找不到我想要的东西。 有人吗?

谢谢

非对称密码学的密钥是具有非对称功能,该功能允许解密由非对称密钥加密的消息,而不允许找到另一个密钥。在RSA中,使用的函数基于素数的因式分解,但它不是唯一的选择(椭圆曲线是另一个例如)。

因此,基本上您需要两个质数来生成RSA密钥对。如果您能够分解公钥并找到这些质数,您将能够找到私钥。RSA的整个安全性基于这样一个事实,即不容易分解大型合数,这就是为什么密钥的长度会高度改变RSA算法的鲁棒性。

每年都有比赛用计算器分解大素数,价格合理。分解RSA密钥的最后一步是在2009年通过分解768位密钥来完成的。这就是为什么现在至少应该使用 2048 位密钥的原因。

像往常一样,维基百科是RSA的一个很好的参考。

所有公钥算法都基于陷门函数,即以一种方式"容易"计算的数学结构,但"很难"逆转,除非你还有一些额外的信息(用作私钥),此时反向也变得"容易"。

"

容易"和"难"只是定性的形容词,总是根据计算复杂性进行更正式的定义。"困难"通常是指对于某些固定的x,在多项式时间O(nx内无法解决的计算,其中n是输入数据。

在RSA的情况下,"简单"函数是模幂C = Me mod N,其中N的因子是保密的。"困难"的问题是找到 C 的第 e 个根(即 M)。当然,"硬"并不意味着它总是硬的,而是(直观地)将 N 的大小增加一个特定的因子会使复杂性增加一个更大的因素。

推荐的模数大小(2048 位或 617 位十进制数字)与当前计算能力的可用性有关,因此如果您坚持使用它们,您可以放心,攻击者打破它将非常昂贵。有关更多详细信息,我应该向您推荐一个关于 cryptography.SE 的精彩答案(去投票:-))。

最后,为了有一个活板门,N被构建成一个合数。理论上,为了提高性能,N 可能具有 2 个以上的因子,但一般安全规则是所有因子必须平衡并且大小大致相同。这意味着,如果你有 K 个因子,并且 N 是 B 位长,则每个因子大致是 B/K 位长。

但是,要解决的此问题与整数分解问题不同。这两者是相关的,因为如果您设法分解 N,您可以通过重新执行生成密钥的一方所做的事情来计算私钥。通常,使用的指数 e 非常小 (3);不能排除有一天有人设计了一种算法来计算 e-th,而无需分解 N

编辑:更正了2048位RSA密钥模数的小数位数。

RSA使用单向数学函数的思想,因此如果你有密钥,很容易加密和解密,但如果你没有密钥,很难(因为它需要很多很多的CPU周期)。甚至在他们想到使用素数之前,数学家就确定了单因素函数的必要性。

他们想到的第一种方法是,如果你的"密钥"是一个质数,而你的消息是另一个数字,那么你可以通过将两者相乘来加密。有钥匙的人可以很容易地划分出素数并得到消息,但对于没有素数的人来说,弄清楚素数键是很困难的。

最新更新