我正在研究需要加密大量数据的东西。
我知道这应该使用像 AES 这样的对称密钥加密系统而不是像 RSA 这样的公钥加密系统来完成,但我正在考虑使用 RSA 来完成,将数据分成更小的部分,然后用它们加密它们中的每一个相同的公钥。
除了性能考虑之外,这种方法是否安全?这种加密方式能轻易破解吗?
我正在研究需要加密大量数据的东西。
我知道这应该使用像 AES 这样的对称密钥加密系统而不是像 RSA 这样的公钥加密系统来完成,但我正在考虑使用 RSA 来完成,将数据分成更小的部分,然后用它们加密它们中的每一个相同的公钥。
除了性能考虑之外,这种方法是否安全?这种加密方式能轻易破解吗?
不,它不安全。
您实际上是在使用 RSA 作为分组密码,正如您已经指出的那样,您可能应该在这个地方使用对称密码。
此外,正如@Jamey 所指出的,这种相互独立地加密明文块/块的方案本质上类似于分组密码的电子密码本 ( ECB ) 操作模式。
如果不使用其他任何东西,您提出的方案至少容易受到两种攻击:
重放攻击,如果您没有在您的方案中包含任何其他信息以防止重用消息。例如,一个攻击者记录了 Alice 和一家银行之间的所有加密流,她从她的账户中提取了 100.00 美元。
在这种情况下,通过多次重放流,攻击者可以通过多次将流发送到银行来使 Alice 破产,这样就可以了。
确实,尝试想出自己的密码很有趣,但要获得正确的安全性却很困难。在没有完整性/身份验证的情况下更是如此。
注意:由于人们似乎错过了我原始帖子中“不使用其他任何东西”的部分,所以我的回答一直被否决。
我想我应该明确一点,以上是关于使用“纯 RSA”或“教科书 RSA”,其中不包括使用 RSA 密码的随机填充(“其他任何东西”)。
在实际应用中,“其他任何东西”是使用OAEP (一种用随机位简单填充原始消息的“更强大的形式” ),它包含在更新版本的PKCS#1标准中。
只要您使用经过公开审查的 API,就应该没问题。但通常,您只想用 RSA 公钥加密一个对称密钥(如 AES),然后用该对称密钥对每个消息片段进行块加密。
一般的建议是:如果你真的关心安全性,就不要发明新的密码系统;或者,如果必须,至少让严肃的密码学研究人员公开同行评审。
也就是说,我所拥有的最好的是,这听起来像是您将 RSA 视为一种分组密码,因此您可能想要使用标准分组密码模式。显而易见的事情是,仅使用相同的密钥分别加密每个块,这听起来等同于不安全的电子密码本 (ECB) 模式。也许您可以使用更好的模式之一,例如带有 RSA 的 CBC?
由于我们忽略了实际的性能问题,我将指出一个不同的实际考虑。RSA的输入m
必须在 0<= m
<范围内n
,其中n
是公钥参数之一。由于 的值n
必须是两个不同素数的乘积,它永远不可能是 2 的幂,因此将较大的消息分成适合 RSA 输入的块有点令人困惑。
此外,不要忘记填充您使用 RSA 加密的每条消息。
简而言之:不要为真正的项目做这件事,但这是一个巧妙的思想实验。:-)