是否可以使用對稱加密用兩個不同的密鑰來加密檔案?

是否可以使用對稱加密用兩個不同的密鑰來加密檔案?

GPG/PGP 和其他公鑰加密允許使用多個接收者的公鑰進行加密。

是否可以僅使用對稱加密來做到這一點?換句話說,是否可以使用兩個不同的金鑰對稱地加密一個檔案?

我的問題的原因是不對稱加密會產生龐大的檔案。如果我要向智慧型手機發送公鑰加密訊息,那麼它就太大了。特別是如果它對多個收件人進行了加密。一個「Hello」可能需要 2 頁的文字。另一方面,對稱加密非常嚴格。

答案1

當然。只需使用隨機密鑰加密文件,然後使用兩個不同的對稱密鑰加密該隨機密鑰。

答案2

目前的 PGP 版本和所有 GnuPG (GPG) 都實作了 OpenPGP 標準。下面我將僅使用術語 OpenPGP。

OpenPGP 同時使用公鑰和對稱金鑰加密:加密文件時,會產生一些隨機對稱金鑰並使用公鑰進行加密。接收者將使用他的私鑰對對稱加密(分組密碼)金鑰進行加密。由於只有對稱金鑰使用公鑰進行加密,因此開銷很小(這是 David Schwartz 提出的,並且已經由 OpenPGP 實作)。

當然,在兩種情況下,與加密資料相比,此開銷可能會變得很大:

  • 數據量極少;如果這是一個問題,您將必須選擇某種帶有預先共用金鑰(對稱金鑰)的加密方法
  • 收件人眾多;因為必須對每個分組密碼進行加密。如果這是一個問題,您將必須在所有收件人之間共用秘密(私鑰)。

您無法繞過使用對稱加密並將秘密移交給每個接收者(或對私有 OpenPGP 金鑰執行相同操作)。如果你希望每個人都有自己的秘密,那麼其他人就無法解密他的資料版本;所以你必須向每個人發送該資料的另一個版本。

答案3

我實際上正在尋求解決同樣的問題。 gpg 的問題在於你需要攜帶太多的包袱 - 金鑰儲存等。

我寫了一個工具來做到這一點:https://github.com/galets/AmetryCrypt。您需要 mono 才能在 Linux 上運行它,但否則它可以正常工作,並且不需要您將加密金鑰儲存在單獨的檔案中。

相關內容