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