2010-08-16 231 views
8

我需要使用公鑰加密100KB文件。我一直在閱讀一些文章,聲稱使用公鑰直接加密大文件是不現實的,而且首選方法是使用對稱密鑰對文件進行加密,然後使用公鑰對該對稱密鑰進行加密。 看來,一個天真的解決方案是將大文件分解成碎片並使用相同的公鑰對它們中的每一個進行加密。我的問題是這個解決方案是否和爲什麼是錯誤的?使用公鑰加密大文件

回答

2

如果我理解你的權利,你要的文件,別人的公共密鑰加密,通過他們私鑰來解密?

使用對稱加密並且只使用公鑰密碼體制(對稱)密鑰的優點是性能:對稱密碼體系在計算上的資源密集程度要低得多(權衡:你必須保留密鑰的祕密 - 這就是第二,不對稱的步驟是什麼)。

分解文件會增加管理開銷(您如何確定將會有多少塊?您已將它們全部傳輸?),並且不會增加任何安全性。反之。

+0

保持共享密鑰的祕密是通過隨機爲每個消息生成一個新消息來解決的,將消息發送給接收者public-key-encrypted並將其丟棄。 – Thilo 2010-08-16 08:10:22

+1

另一種方法是將兩者結合起來。 步驟1:創建任何Randome-Key,例如64字符串(512位) 步驟2:使用步驟1中的密鑰對文件進行對稱加密步驟3:使用任何非對稱加密(公鑰) 步驟4:將步驟3的結果添加到加密文件的末尾。 要解密: 第1步:閱讀和刪除最後一個XXX位形成文件 第2步:用你的私鑰 第3步解密從步驟1中的數據:解密用誰的步驟的結果的關鍵文件2 – Floyd 2010-08-16 08:14:29

+0

是的,我澄清了這個回答 - 我一般講的是保持關鍵祕密,這就是公鑰關鍵步驟。 – chryss 2010-08-16 09:04:12

3

您提到的混合方法(生成一個隨機對稱密鑰,用它來加密數據,並且只對密鑰進行非對稱加密)具有巨大的性能優勢。

您可以「將大文件分解成碎片並使用相同的公鑰對它們中的每一個進行加密」,但沒有什麼問題,但速度更慢。

+3

分裂文件是個壞主意,http://en.wikipedia.org/wiki/Watermarking_attack – TBH 2010-08-16 08:48:36

+0

@TBH:是的,想一想,人們可以很容易地發現重複塊等。另一方面,這個問題可以通過拋出一些隨機填充來克服。我仍然認爲主要區別僅在於表現。 – Thilo 2010-08-16 09:30:24

+0

從性能角度來看,您可以做的最好的事情是交換AES(或蛇)加密密鑰,並使用對稱密鑰加密這些數據。 – TBH 2010-08-16 10:54:55

1

將文件拆分成小塊,然後用一些非對稱密碼對它們進行加密與加密過程的運行時成本無關。最佳做法是使用相對較強的密鑰以良好的對稱密碼加密數據,並使用非對稱密碼(使用您的公鑰)對對稱加密中使用的密鑰進行加密。

+1

如果不考慮性能,混合加密爲什麼是最佳實踐? – Thilo 2010-08-16 09:31:01

+0

我的意思是,如果您拆分文件並再次使用非對稱加密,性能不會提高。在混合方法中,您可以利用對稱密碼來加密大數據,因爲與非對稱密碼相比,對稱密碼相對更省時。並且說您的密鑰是256位/ 32字節,您只需使用非對稱密碼來加密32字節的數據。這種方法比用非對稱密碼加密整個文件要好。 – 2010-08-16 11:24:18

0

非對稱加密過於緩慢,最常用的方法是使用不對稱加密隨機對稱密鑰,並使用該對稱密鑰加密數據。 而且,最好的方法是使用衆所周知的協議/標準(例如OpenPGP)。

+0

You ment GnuPG? – TBH 2010-08-24 12:03:25

+0

也是GnuPG - GnuPG是OpenPGP標準的實現之一。還有其他商業實現,可以更靈活和更實用。 – 2010-08-24 13:00:17

0

除了對稱密鑰加密的速度提升之外,還有另一個可能的好處:首先使用隨機安全生成的對稱密鑰對消息進行加密,然後可以爲多個收件人加密對稱密鑰,每個收件人自己加密一次公共非對稱密鑰,而不必重新加密整個消息。