Encryption

使用公鑰認證在 OpenPGP 中實現前向保密

  • July 20, 2015

我正在嘗試考慮實施加密文件共享系統的可行性,該系統既提供前向保密又允許公鑰驗證。我堅持這兩個要求之間的婚姻,希望有人可以幫助我。

為了提供前向保密,我認為應該為每個文件傳輸請求生成一個新的隨機密鑰對,而不是兩個使用者提前共享長期公鑰。這樣,如果特定文件共享的私鑰以某種方式被洩露,它只會洩露該文件,而不是該使用者發送的所有文件。

但是,為每個文件共享創建一個新的密鑰對會引入公鑰驗證問題。傳統上來說,公鑰的指紋應該親自驗證,並在密鑰對的整個生命週期內保持驗證。如果為每個文件共享生成一個新的密鑰對,那麼這意味著每個新的公鑰都需要親自驗證,這是不可行的。

是否可以為每個文件共享使用唯一的密鑰對來實現前向保密,同時還可以安全地驗證公鑰是否僅從正確的使用者發送一次?

請注意,該系統用於非同步文件傳輸,這意味著加密數據將暫時上傳到雲端,直到接收者下載。但是,文件共享請求將包含一個強製到期日期。

我將描述您擁有的兩個選項。可能還有更多我不知道的。

第一種是使用長期簽名密鑰來簽署公共 diffie-hellman 密鑰。將一堆這些上傳到雲端。然後,當有人想與您共享文件時,他們:

  1. 下載您的“下一個”簽名公共 diffie-hellman 密鑰
  2. 使用 OpenPGP 驗證簽名,如果失敗則中止
  3. 生成他們自己的新公共 diffie-hellman 密鑰
  4. 使用您的“下一個”密鑰生成共享密鑰(使用他們的私有 diffie-hellman 密鑰),用它加密文件(您實際上也可以為此使用 OpenPGP,這將是加密的對稱密鑰)
  5. 用他們的長期秘密簽署他們的新公共 diffie-hellman 密鑰(使用 OpenPGP)
  6. 上傳他們簽名的臨時公共 diffie-hellman 密鑰、描述他們使用的臨時公共密鑰的索引以及加密消息
  7. 刪除他們的新公共 diffie-hellman 密鑰等。

當您稍後來下載文件時,您:

  1. 下載他們在 #5 中上傳的所有內容
  2. 使用 OpenPGP 檢查數字簽名,如果失敗則中止
  3. 使用給定索引的臨時私鑰來計算共享密鑰
  4. 解密文件
  5. 刪除您的臨時私鑰、他們簽名的臨時公鑰等。

這基本上就是Open Whisper Systems對加密文本消息所做的事情。

您的另一個選擇是丟棄 OpenPGP 並執行A Forward-Secure Public-Key Encryption Scheme中描述並在此答案中討論的內容*。

*好的,這個答案確實提到了我的第一個建議,因為它是一個“微不足道(因此很糟糕)的解決方案”。我添加了更多細節和 Open Whisper Systems 的連結。既然 Open Whisper Systems 正在這樣做,它不會太糟糕,對吧?

引用自:https://crypto.stackexchange.com/questions/27034