Encryption
我使用混合加密和 AES-GCM 的協議是否安全?
我在嘗試了解如何實現 AES-GCM 時遇到了很多麻煩。
我的案例:A 人向我發送了一個帶有保證唯一名稱的文件。我想確保它來自 A 人,沒有人看到裡面的內容,而且它沒有被篡改。
我想我會做以下事情:
- 人 A 會給我一個離線的公鑰,只有他們擁有私鑰
- A 人將使用 AES-GCM 加密文件。然後他們將使用他們的私鑰加密 AES-GCM 密鑰+nonce+aad。然後他們會向我發送兩個文件:密碼和加密密鑰+nonce+aad 組合。
- 我會用他們的公鑰解密 key+nonce+aad,然後我會使用這些值解密 AES-GCM 密碼。
我想我會使用這些值:
- 鍵:隨機
- Nonce:文件名
- AAD:文件名
我知道這可能是一種糟糕的做事方式。這對我來說似乎過於復雜,但我不確定如何實現我的案例。我不知道這些是否是用於加密/解密的正確值,我不知道什麼應該保密,什麼不應該保密。
任何指導將不勝感激。如果有幫助,看起來 GSM 加密/解密將在 Python 中發生。
通常情況會這樣:
- A 生成一個隨機的 AES 密鑰並使用公鑰對其進行加密。
- A 使用 AES GCM 和該密鑰加密文件內容。如果密鑰只使用一次,Nonce 可以是隨機的,甚至可以為零。AAD 可以為空,除非需要對該文件進行其他身份驗證。
- A 發送加密密鑰、隨機數(如果有)和密文。
僅當您也需要加密文件名(最簡單:加密 tar 存檔)或需要對名稱進行身份驗證(將其包含在 AAD 中)時,文件名才重要。
您所描述的是公鑰加密的典型用途。它通常被稱為 KEM/DEM 或混合範式。KEM/DEM 保留為 Key Encapsulation Method、Data Encapsulation Method。
為了加密文件,他繪製了一個用於 AES 的隨機密鑰,他還繪製了一個隨機 IV 和一個隨機數,可能還有一個 AAD。他使用此數據在 AES-GCM 算法下加密文件,然後在您的公鑰下加密密鑰。他最終將加密密鑰和加密文件發送給您。
您使用您的私鑰解密與 AES-GCM 一起使用的密鑰,然後解密文件。
在您的問題中,您錯誤地使用了公鑰和私鑰。
還要確保發件人是人 A 而不是其他人,他應該使用他的(公共,私人)密鑰對簽署消息。其他方式沒有辦法證明加密文件實際上是由特定的人生成的。