为什么在RSA /加密中使用“大质数”?

时间:2012-08-06 16:12:23

标签: encryption rsa public-key

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

我被告知,良好的RSA加密应该依赖于300位小数的素数,但为什么呢?谁想出这个号码?打破这种加密需要多长时间(关于不同机器的统计数据)。

我试过Google,但找不到我想要的东西。任何人吗?

感谢

3 个答案:

答案 0 :(得分:11)

非对称加密的关键是具有非对称功能,允许解密由非对称密钥加密的消息,而不允许找到另一个密钥。在RSA中,使用的函数基于素数的因子分解,但它不是唯一的选项(例如Elliptic curve是另一个选项)。

因此,基本上您需要两个素数来生成RSA密钥对。如果您能够分解公钥并找到这些素数,那么您将能够找到私钥。 RSA的整体安全性基于以下事实:大型复合数字分解不容易,这就是密钥长度高度改变RSA算法稳健性的原因。

每年都会有很多价格合理的计算器将大质数分解的竞赛。分解RSA密钥的最后一步是in 2009 by factorizing 768 bits 密钥。这就是为什么现在应该使用至少2048位密钥。

像往常一样,Wikipedia是对RSA的一个很好的参考。

答案 1 :(得分:9)

所有公钥算法都基于trapdoor functions,即以一种方式“容易”计算的数学结构,但除非你还有一些额外的信息(用作私钥),否则“难”反转)在这一点上反过来变得“容易”。

“简单”和“硬”只是定性形容词,总是在computational complexity方面更正式地定义。 “硬”通常指的是在多项式时间 O(n x 中无法解决某些固定的 x 且其中的计算n 是输入数据。

在RSA的情况下,“简单”函数是模幂运算 C = M e mod N 其中因子 N 保守秘密“硬”问题是找到C的 e - 根(即 M )。当然,“硬”并不意味着总是很难,但(直观地)将 N 的大小增加一定因素会使复杂性大大增加因素。

建议的模数大小(2048位,或617位十进制数)与当前计算能力的可用性有关,因此如果您坚持使用它们,您可以确保它对攻击者来说非常昂贵打破它。有关详细信息,我应该将您推荐给a brilliant answer on cryptography.SE(go和upvote: - ))。

最后,为了有一个陷门,构建 N 以便成为一个复合数。理论上,为了提高性能,N可能有两个以上的因素,但一般的安全规则是所有因素必须平衡并且大小大致相同。这意味着,如果您有 K 因子, N B 位长,则每个因子大致 B / K 比特多头。

要解决的问题与integer factorization problem不同。这两者的相关之处在于,如果您设法考虑 N ,则可以通过重新生成生成密钥的一方来计算私钥。通常,使用的指数 e 非常小(3);不能排除有一天somebody设计一个算法来计算 e -th而不用 N

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

答案 2 :(得分:-2)

RSA使用单向数学函数的思想,因此如果你有密钥就很容易加密和解密,但是如果没有密钥则很难解密(因为需要大量的CPU周期)才能解密钥匙。甚至在他们考虑使用素数之前,数学家就确定了对单向函数的需求。

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