有人告诉我非对称加密要求对消息进行加密,使其长度小于密钥长度。
为什么?

我知道混合加密,它使用对称加密来解决这个问题。
但是我仍然想知道为什么公钥密码学需要数据短于密钥长度。

评论

欢迎使用Crypto.SE。我鼓励您阅读常见问题解答。特别是,我们希望您在发布问题之前先完成作业。这个特定的问题一定在这个网站上已经问过十遍了。您尝试搜索了吗?另外,尝试查看“相关”栏中的问题。例如,列表中的第三位是crypto.stackexchange.com/q/586/351,它似乎可以令人满意地回答您的问题。

感谢您的回答,但它不能直接回答我的问题:为什么它的数据必须小于键的长度。我知道,与对称加密相比,它需要占用大量CPU,但这不是我要的答案,除非您间接告诉我由于CPU使用率,它需要的数据长度小于密钥长度。

抱歉,我不确定您所说的“它”是什么意思。您是否在问,为什么公钥加密需要对小于其密钥长度的数据进行加密?如果是这样,您应该修改您的问题,因为那根本不是我从您的问题中得到的。

“为什么非对称密码学需要比键长短的数据”是我明确的问题。

@K_X:我现在在我先前回答的扩展中解决这个问题。

#1 楼

为什么实际上从不使用非对称密码来直接加密大量数据的主要原因有两个:

1)密码的大小:对称加密不会(渐近地)增加密码的大小,而是不对称加密呢。如果我们以具有1024位密钥和160位SHA-1哈希的PKCS#1v2中的RSAES-OAEP为例,则1024位密码最多可以传达688位有用信息。因此,以这种方式加密的数据将花费49%的存储空间,或花费更多时间在给定链接上移动。

2)性能:在具有硬件AES支持,加密或解密速度的现代CPU上超过2000兆字节/秒(每个内核);在上述方案中,解密1024位密码的速度可能为每秒4000个(可比CPU的每个线程),因此吞吐量为0.4兆字节/秒,慢了5000倍;而且,这也是用电量的比率。随着安全性的提高,该比率往往会变得更糟。尽管有更有效的方案,但可以肯定地说,至少在解密方面,对称方案比非对称方案要快几个数量级,并且耗电更少(某些非对称方案,包括具有较低公共指数的RSA,在解密方面要快得多)。加密方面要比解密方面要好,并且可以接近某些对称密码的吞吐量。)


添加:非对称密码术不需要“需要小于其密钥长度的数据”。例如,通过固定模数$ n $的高阶位并将$ e $设置为固定值,可以将RSA方案中的公钥减少到大约一半的密码/模数大小,从而使密码几乎将公钥大小加倍。私钥可以进一步压缩,最终压缩为PRNG的种子。

但是...实际上,我们不需要使用这些技巧就可以使数据看起来小于键的大小。这是因为使用混合加密很简单。我们选择一个随机的对称密钥,使用公共密钥对该密钥进行加密,然后使用对称密钥对数据进行加密。通过这种方法,我们可以使用任何公钥加密方法处理任意大小的数据。

但是,任何公钥加密方案都必然会增加其加密的数据的大小:如果不加密,则任何给定的明文都将只有一个密文,因此对手可以仅通过加密该值(使用公钥)并与密文进行比较,即可测试明文是否为某个值。公钥加密方案通常会将加密字的大小增加$ k $位,以抵抗这种攻击,强度为$ 2 ^ k $加密。

评论


$ \ begingroup $
抱歉,但那些AES-NI数字太可笑了,而且是虚假的。在具有适当操作模式的实际实现中,最新处理器最高可实现800-900MB / s的每核吞吐量。您的观点仍然存在,但请记住,营销基准并不能代表现实生活的表现。
$ \ endgroup $
–托马斯
2012年12月20日上午8:30

$ \ begingroup $
@Thomas:我同意真实的实现往往比“营销基准”慢2-3倍。这在很大程度上是因为真正的实现很少在关键数据路径上使用汇编语言,为了简化和可移植性而牺牲了性能。至少我正在将两个“营销基准”相互比较,并且我认为我的比率5000并没有膨胀。
$ \ endgroup $
–fgrieu♦
2012-12-21 10:59



$ \ begingroup $
不,该比率很好,但我只是指出,您引用的速度通常仅在汇编时以零个函数调用或参数在非常紧密的循环中硬编码所有内容时才能获得。在任何实际的应用程序中,这在逻辑上根本都不可行-您需要代码具有模块化和灵活性,以便可以轻松地重用。 OpenSSL使用了经过优化的AES-NI实现,并且在超频的i5上,AES-128-CBC以每核720MB / s的速度运行(openssl速度为-evp aes-128-cbc)。
$ \ endgroup $
–托马斯
2012-12-21 11:12



$ \ begingroup $
非超频i7-8565U上每个内核1562MB / s(openssl速度-evp aes-128-cbc)
$ \ endgroup $
– maoizm
20年1月5日,19:35

#2 楼

对称加密通常比非对称加密更快。这是对大量数据使用对称加密的基本原因。两种方法之间的时间差将随着数据量的增加而线性增加。

来自Wikipedia的公钥密码计算成本:

计算成本
迄今为止,已知的公钥算法与具有明显等效安全性的大多数对称密钥算法相比,在计算上成本较高。差异因素是通常使用很大的键。这对其实际使用具有重要意义。出于效率方面的考虑,大多数都在混合密码系统中使用–在这样的密码系统中,一方会生成一个共享的秘密密钥(“会话密钥”),然后由每个接收者的公共密钥对这个简短得多的会话密钥进行加密。然后,每个接收者都使用相应的私钥来解密会话密钥。一旦所有各方都获得了会话密钥,他们就可以使用更快的对称算法来加密和解密消息。在许多这样的方案中,会话密钥对于每个消息交换都是唯一的,是为每个消息伪随机选择的。

评论


$ \ begingroup $
更不用说,使用2,048位密钥的非对称加密不一定比使用256位密钥的对称加密更“安全”。
$ \ endgroup $
–斯蒂芬·托瑟(Stephen Touset)
2012-12-19 22:28