非对称与对称加密基准

信息安全 密码学
2021-08-30 10:36:32

我在 Crypto++ 的网站上找到了这些基准。 http://www.cryptopp.com/benchmarks.html

但老实说,我并不完全确定如何解释它们。

我真的在寻找一组基准或研究,以显示非对称加密比对称加密慢(并且计算成本更高)。

基本上,直接使它们相互对抗并显示不对称密码的性能较慢的东西。

任何人都可以将我链接到类似的东西吗?我的谷歌搜索被证明是徒劳的。

3个回答

事实上,非对称密码学比对称密码学慢的断言没有多大意义。他们不做同样的事情。非对称密码学能做什么,对称密码学不能做什么;不太直观,这也反过来起作用:对称密码学可以做到,非对称密码学不能做到。

非对称加密允许公开加密密钥,而不会泄露解密密钥;这是非对称加密相对于对称加密的明显优势,也是最初发明它的原因。

在另一个方向:非对称加密只处理有限大小的消息,并且固有地会产生非固定大小的开销。例如,使用 2048 位 RSA 密钥并遵循PKCS#1标准 ( RSAES-PKCS1-v1_5),输入消息的长度不能超过 245 字节,但会产生 256 字节的输出。目前尚不清楚应如何将较长的消息拆分为子消息,以便使用 RSA 单独处理;从表面上看,这看起来像块密码的“链接”问题,对于哪种操作模式已定义,允许批量处理输入数据。然而,分组密码很容易:它们可以处理良好的比特序列,并且加密的块与均匀随机性没有区别。同样的情况不适用于 RSA,其中加密的消息是整数模一个不是 2 的幂的大整数,这会导致偏差。这个链接 RSA 加密的问题没有得到充分研究,而且似乎没有明显安全的解决方案。

非对称加密的大小开销与其不对称性是相当的:由于加密密钥是公开的,每个人都可以尝试使用加密密钥加密数据。如果加密是确定性的,那么这允许对明文立即进行暴力攻击(攻击者尝试潜在的明文值,直到找到匹配项)。为了防止这种情况,加密必须是非确定性的,这反过来意味着大小增加(因为鸽子洞)。

原始结果是非对称加密不擅长批量加密。当要加密的数据大于算法的基本大小时,我们并不真正知道如何安全地进行加密,但我们有相当基本的理由相信它在网络带宽方面会很昂贵。


以上都不是关于计算成本的。为了在考虑计算成本的情况下进行有意义的比较,必须在确实需要在对称加密和非对称加密之间进行选择的环境中进行。基本上,这将是一种情况:

  • 您希望对消息m进行非对称加密。
  • 您可能希望使用所谓的“混合加密”:非对称加密来加密随机密钥K,然后使用对称加密算法处理数据。
  • 消息m可以直接用非对称加密算法处理。

第三个条件意味着m足够小,可以作为非对称加密算法的单次调用的输入,否则您将不知道如何处理它。在这种情况下,原始的非对称加密必然会获胜,因为选择是在“一种非对称加密”和“一种非对称加密加上一些对称加密的东西”之间。另一方面,如果m的大小可能超过一次调用加密算法可以处理的大小,那么你又回到了链接问题,任何关于性能的讨论充其量都为时过早:首先定义你想要什么要做,看看是否安全,然后(只有这样)我们才能谈论速度。


打个比方:你可以问哪辆车更快,在这辆车之间:

红色法拉利

还有那个:

渔船

如果你认为答案很明显,那就把你的法拉利开进湖里……

在我的头顶上:

  • 一个原始 RSA 消息最多可以与模数一样长。
  • 一条熟化的 RSA 消息需要填充以确保安全。RSA PKCS#1.5 填充需要(至少)11 个字节的填充。

我将假设 rsa2048。2048 位是 256 字节的原始数据。填充减 11 给出 245 字节可用。

CryptoPP 网站提供:

  • RSA 2048 签名 6.05 毫秒/操作
  • RSA 2048 验证 0.16 毫秒/操作

计算

  • RSA 2048 签名 6.05 毫秒/操作

    • (1000 毫秒/秒) / (6.08 毫秒/操作) == 164.47 操作/秒
    • 164.47 操作/秒 * 245 字节/操作 == 40,296 字节/秒
  • RSA 2048 验证 0.16 毫秒/操作

    • (1000 毫秒/秒) / (0.16 毫秒/操作) == 6,250 操作/秒
    • 6250 操作/秒 * 245 字节/操作 == 1,531,250 字节/秒

所以:大约 1.5 MByte/s 用于验证(/加密)。和 40kByte/s 用于签名(/解密)。

对于“AES/CTR(128 位密钥)”,CryptoPP 表列出了大约 100 MiB/s。

对称密码(甚至那些被描述为“分组密码”的密码)通常以类似流的方式使用,加密或解密任意长度的字节序列。因此,以 MB/s 为单位测量它们的速度是一件有用的事情。

非对称密码通常以块状方式使用,加密或解密一小段数据。无论是单个位、32 字节散列还是最大大小的块,此操作都需要相同的时间。因此,测量它们的操作/秒速度是一件有用的事情。

您可以通过找出它的最大块大小并乘以它的操作/秒速度来计算不对称密码的流式速度。由于非对称密码几乎从未以类似流的方式使用,因此这不是一件非常有用的事情。