GnuPG - 為 AES 提供加密密鑰,而不是從密碼中派生
我想用 AES256 加密文件並提供我自己的 32 字節用於加密,而不是讓 GPG 從密碼中派生它。
我找不到這樣的選項,但我正在考慮一種可能的解決方法。
根據此消息:
https://lists.gnupg.org/pipermail/gnupg-devel/2018-June/033795.html
密碼片語的另一種用途是僅對稱加密(命令 -c),但在大多數案例中,密碼片語來自另一個應用程序或數據庫,而不是手動輸入。在這種情況下,我認為最好使用 –s2k-mode=0 以及完整的熵密碼
我的理解是否正確,我可以將 256 位密鑰作為密碼傳遞給 GPG 並設置一些選項,例如: –s2k-mode=0 –s2k-count=0 以盡可能接近通過的目標我自己的 AES 密鑰?(我想仍然需要進行一些轉換,以便 PGP 可以確保密鑰的 AES256 格式正確)
是否有任何額外的選項可以使輸出鍵盡可能簡單?像這樣使用它有什麼安全隱患嗎?
這對於 OpenPGP 是不可能的。使用隨機密鑰將數據加密在對稱加密的數據包(或更常見的是使用 MDC 的相關數據包)中,然後將該密鑰儲存在對稱密鑰加密的會話密鑰包中。後者需要指定 S2K 算法,並且沒有原始會話密鑰輸入。實際上,需要某種密碼。
GnuPG 和大多數其他程序都希望密碼不包含隨機換行符和 NUL 字節,因此,最簡單的方法是對 32 字節字元串進行十六進製或 base64 編碼並使用它。您可以
--s2k-mode=0
根據需要使用,密碼片語將簡單地使用合適的散列算法進行散列,這就是簡單的 S2K。
--s2k-mode=1
請注意,目前的 OpenPGP 網際網路草案根本禁止使用簡單的S2K ,並且至少需要加鹽的 S2K ( GnuPG 可能會停止接受--s2k-mode=0
.