4

我正在研究需要加密大量数据的东西。

我知道这应该使用像 AES 这样的对称密钥加密系统而不是像 RSA 这样的公钥加密系统来完成,但我正在考虑使用 RSA 来完成,将数据分成更小的部分,然后用它们加密它们中的每一个相同的公钥。

除了性能考虑之外,这种方法是否安全?这种加密方式能轻易破解吗?

4

3 回答 3

4

不,它不安全。

您实际上是在使用 RSA 作为分组密码,正如您已经指出的那样,您可能应该在这个地方使用对称密码。

此外,正如@Jamey 所指出的,这种相互独立地加密明文块/块的方案本质上类似于分组密码的电子密码本 ( ECB ) 操作模式。

如果不使用其他任何东西,您提出的方案至少容易受到两种攻击:

  • 重放攻击,如果您没有在您的方案中包含任何其他信息以防止重用消息。例如,一个攻击者记录了 Alice 和一家银行之间的所有加密流,她从她的账户中提取了 100.00 美元。

    在这种情况下,通过多次重放流,攻击者可以通过多次将流发送到银行来使 Alice 破产,这样就可以了。

  • 选择明文攻击,因为块是独立的,在这种情况下攻击者的优势将是 1(尽可能高)。

确实,尝试想出自己的密码很有趣,但要获得正确的安全性却很困难。在没有完整性/身份验证的情况下更是如此。


注意:由于人们似乎错过了我原始帖子中“不使用其他任何东西”的部分,所以我的回答一直被否决。

我想我应该明确一点,以上是关于使用“纯 RSA”或“教科书 RSA”,其中不包括使用 RSA 密码的随机填充(“其他任何东西”)。

在实际应用中,“其他任何东西”是使用OAEP (一种用随机位简单填充原始消息的“更强大的形式” ),它包含在更新版本的PKCS#1标准中。

于 2012-11-13T09:14:42.813 回答
0

只要您使用经过公开审查的 API,就应该没问题。但通常,您只想用 RSA 公钥加密一个对称密钥(如 AES),然后用该对称密钥对每个消息片段进行块加密。

于 2012-11-13T08:39:26.667 回答
0

一般的建议是:如果你真的关心安全性,就不要发明新的密码系统;或者,如果必须,至少让严肃的密码学研究人员公开同行评审。

也就是说,我所拥有的最好的是,这听起来像是您将 RSA 视为一种分组密码,因此您可能想要使用标准分组密码模式。显而易见的事情是,仅使用相同的密钥分别加密每个块,这听起来等同于不安全的电子密码本 (ECB) 模式。也许您可以使用更好的模式之一,例如带有 RSA 的 CBC?

由于我们忽略了实际的性能问题,我将指出一个不同的实际考虑。RSA的输入m必须在 0<= m<范围内n,其中n是公钥参数之一。由于 的值n必须是两个不同素数的乘积,它永远不可能是 2 的幂,因此将较大的消息分成适合 RSA 输入的块有点令人困惑。

此外,不要忘记填充您使用 RSA 加密的每条消息。

简而言之:不要为真正的项目做这件事,但这是一个巧妙的思想实验。:-)

于 2012-11-13T08:05:44.623 回答