使用公钥加密大文件

11

我需要使用公钥加密一个100KB的文件。我阅读了一些帖子声称直接使用公钥加密大文件不实用,首选方法是使用对称密钥加密文件,然后再使用公钥加密此对称密钥。

看起来一个朴素的解决方案是将大文件分成几部分,然后使用相同的公钥加密每个部分。我的问题是,这种解决方案是否可行,以及为什么?

5个回答

6
您提到的混合方法(生成随机对称密钥,使用该密钥加密数据,并仅使用非对称密钥加密密钥)具有巨大的性能优势。
您也可以“将大文件分成小块,并使用相同的公钥加密每个块”,这样做没有问题,但速度要慢得多。

3
分割文件是个不好的主意,参见http://en.wikipedia.org/wiki/Watermarking_attack。 - TBH
@TBH:是的,想想看,人们可以轻易地发现重复的块等等。另一方面,通过添加一些随机填充可以克服这个问题。我仍然认为主要区别仅在于性能。 - Thilo
从性能角度来看,您可以做的最好的事情是交换AES(或Serpent)加密密钥,并使用对称密钥加密这些数据。 - TBH

3
如果我理解正确,您想使用别人的公钥加密文件,以便由他们的私钥解密?
使用对称加密并仅使用公钥密码学来处理(对称)密钥的优点在于性能:对称加密的计算资源要少得多(折衷方案:您必须保持密钥保密——这就是第二个非对称步骤的用途)。
拆分文件会增加管理开销(您如何确保有多少块?您是否已经传输了所有块?),并且不会增加任何安全性。相反,还会降低安全性。

保持共享密钥的机密性是通过为每个消息随机生成一个新密钥,将其传输到接收方的公钥加密,然后丢弃它来解决的。 - Thilo
1
另一种选择是将两者结合起来。 步骤1:创建任何随机密钥,例如64个字符的字符串(512位)。 步骤2:使用步骤1中的密钥对文件进行对称加密。 步骤3:使用任何非对称加密(公钥)加密密钥。 步骤4:将步骤3的结果添加到加密文件的末尾。解密:步骤1:读取并删除文件的最后XXX位。 步骤2:使用您的私钥解密步骤1中的数据。 步骤3:使用步骤2的结果解密文件的密钥。 - Floyd
是的,我澄清了回复 - 我是在一般情况下谈论保密密钥,这就是公钥步骤的作用。 - chryss

2

非对称加密速度较慢,最常用的方法是使用非对称加密随机生成的对称密钥,然后使用该对称密钥加密数据。此外,最好使用公认的协议/标准来实现此目的(例如OpenPGP)。


而且GnuPG也是 - GnuPG是OpenPGP标准的实现之一。还有其他商业实现,可能更灵活和可用。 - Nickolay Olshevsky

1

除了对称密钥加密的速度提升外,还有另一个可能的好处:通过首先使用随机生成的安全对称密钥加密消息,然后将对称密钥加密为多个接收者的公共非对称密钥中的每一个,而无需重新加密整个消息。


1

将文件分割成较小的部分,然后使用某些非对称密码加密它们与加密过程的运行时成本无关。最佳实践是使用一个相对强大的密钥使用良好的对称密码来加密数据,然后使用非对称密码(使用您的公钥)加密用于对称加密的秘密密钥。


1
如果性能不是考虑因素,为什么混合加密是最佳实践? - Thilo
我的意思是,如果您拆分文件并再次使用非对称加密,性能不会提高。在混合方法中,您可以利用对称密码算法加密大量数据的优势,因为与非对称密码算法相比,对称密码算法相对更具时间效率。假设您的秘密密钥为256位/32字节,则只需使用非对称密码算法加密32字节的数据。这种方法比使用非对称密码算法加密整个文件更好。 - Ahmet Ardal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接