Protocol-Design

我應該使用失敗的解密來處理多個會話密鑰嗎?

  • July 17, 2018

我覺得這個問題足夠具體,可以獨立存在。假設我有一組客戶端,每個客戶端都有一個唯一的 ID,並且已經為每個客戶端建立了一對會話密鑰。

當客戶端從任何客戶端接收密文時,如果消息標有發送者的 ID 以便接收者知道使用哪個會話密鑰解密會更好嗎?

或者

不包括發件人的 ID,而是嘗試使用每個客戶端的會話密鑰解密,直到一個工作?

哪個更安全(假設客戶端之間的傳輸不安全)?

哪個性能更高?

哪個提供更好的可讀性/維護靈活性?

範例 1

  1. Alice 使用 Bob 的密鑰向 Bob 發送加密消息
  2. Bob 收到消息,並附加了一個發件人標識符
  3. Bob 使用 Alice 的密鑰解密並成功
  4. Bob 知道在這種情況下他不必擔心 Charlie 或 Eve

範例 2

  1. Alice 使用 Bob 的密鑰向 Bob 發送加密消息
  2. Bob 收到消息,但沒有附加發件人標識符
  3. Bob 嘗試使用 Charlie 的密鑰解密,但失敗了
  4. Bob 嘗試使用 Eve 的密鑰解密但失敗了
  5. Bob 嘗試使用 Alice 的密鑰解密並成功
  6. Bob 現在知道是 Alice 發送了消息,而不是 Charlie 和 Eve

請注意,您通常使用接收方的密鑰進行加密。如果我們假設對稱會話密鑰,那麼這不是問題,因為加密和解密是相同的。但是您的方案需要為每個組合至少一個共享密鑰,所以有 Bob-Alice、Bob-Charly、Bob-Eve 等的密鑰。

哪個更安全(假設客戶端之間的傳輸不安全)?

從消息保密的意義上說,它們都是安全的。當然,第二種方法會洩露發送者的 ID。這可能是一個問題,具體取決於協議和威脅模型。

如果沒有消息真實性,那麼第一個具有 ID 的消息更安全。否則,您可能會使用錯誤的密鑰接受消息。

哪個性能更高?

嘗試每個鍵當然性能較差。我希望任何人都能自己回答這個問題。

哪個提供更好的可讀性/維護靈活性?

同樣,您應該能夠自己回答這個問題。你想要一個確定性的協議;如果不需要搜尋正確的密鑰,則不要。

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