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