我正在使用RSA进行加密和解密。我听说它容易受到攻击。是吗?它的安全性如何?
答案 0 :(得分:29)
对RSA的通常攻击涉及分解大量数字,这是两个非常大的素数的乘积。这背后的一般想法是找到素数是相当容易的,并且将它们相乘以得到单个大数也很容易,但是如果你只从那么大的数字开始,找到因子是相当很难。
当他们是一家独立公司时,RSA数据安全公司也遇到了一个因素挑战。 IIRC,最后几个奖项由RSA DSI自己的团队赢得。这些是使用General Number Field Sieve(GNFS)完成的。典型的实现使用大量工作站几个月左右来构建“因子库”。然后(困难的部分)你将它提供给一台具有庞大的 RAM量的机器(以太字节为起点)并让它紧缩几周以获得这些因素。
关键在于指出对RSA的最常见攻击具有非常高的初始成本(即,像Cray超级计算机这样的东西)甚至开始。但是,老实说,我不相信任何当前存在的机器可以容纳足够的RAM甚至开始攻击像1024位RSA密钥(更不用说2048甚至4096位密钥的一些偏执狂类型坚持使用)。
当然,还有其他的保理方法不需要大型机器,但它们的效率足够低,即使在最好的情况下,你也会考虑多年的工作来打破一个相当小的关键RSA标准 - 例如512位。
实际上,在设计使用它的系统时,RSA本身的安全性通常是您最不关心的问题。事实上,几乎所有合理的现代加密算法都是如此。当某些东西被破坏时,它实际上从来没有真正打破所涉及的基本算法 - 它是通过发现密钥如何分布的弱点,“社会工程”攻击等等。
虽然(正如我所说)这种加密方式通常都是如此,但与大多数其他加密相比,RSA更加一致。这仅仅是因为RSA的正常使用情况相对复杂。特别是, not 通常希望使用RSA来加密大量原始数据流。 RSA足够慢,您通常不希望使用它来加密大量数据。相反,您通常将RSA与某些对称密钥(也称为私钥)加密算法(如AES)结合使用。
将两者结合使用时,首先要获取要向其发送某些数据的人的公钥。然后生成一个正确大小的随机数,用作您选择的对称算法的密钥。您使用RSA加密随机数并将其发送到目标。然后使用该数字作为对称算法的密钥,并使用该对称算法加密实际数据。
这意味着在实际使用中,RSA有一些弱点,不一定适用于大多数对称加密算法。仅举一个明显的例子,如果用于选择对称算法的“随机”密钥的方法实际上并不是完全随机的,攻击者可能能够找到密钥并解密数据,而根本不攻击RSA加密本身(是的,这是真实的,公开发布的软件中真正漏洞的根源。)
另请注意,我上面描述的内容几乎是RSA通常最常用的方式。真正的系统通常会变得相当复杂,以提供诸如“完美的前向保密” 1 之类的东西。这样一个系统中的RSA仍然是完全正常的RSA,但使用它的系统的其余部分仍然相当复杂。
总结:如果您要使用RSA加密,RSA本身的安全性可能是您最不关心的问题。从“RSA”到“安全通信系统”的路线有点类似于希腊神话和基督教圣经的扭曲组合:一个有错误转弯的迷宫,每个都会导致一个看起来完全像你想去 - 但是任何错误的转变都会让你陷入永恒的折磨和痛苦之中。
1.不,我现在不打算对此进行描述,但我确定在Crypto.SE上搜索它会产生一些相关结果。但是,我应该补充一点,尽管RSA可以在提供PFS的系统中使用,但在实践中它是相当不寻常的。 功能
答案 1 :(得分:7)
假设RSA对您的所有实际需求都是安全的。
但当然这取决于你在做什么,你是怎么做的以及你想要防守的对象。
如果你想保证你的连接,你坚持使用通常推荐的东西,RSA足够安全。
如果你想在国家安全局的鼻子下进行秘密行动,那么你已经输了,因为你必须提出这样的问题。
PS:你可能想看看StackExchange上的IT-Security网站这样的东西..
答案 2 :(得分:5)
正确实施(即,如果您使用现有的库为您执行此操作),您的数据通道是安全的。但是,请记住,加密点只是使数据通道不成为整个系统中最薄弱的环节。 RSA会这样做,但您仍然需要担心系统的其他部分以及它们的安全性。