Protocol-Design
我應該使用失敗的解密來處理多個會話密鑰嗎?
我覺得這個問題足夠具體,可以獨立存在。假設我有一組客戶端,每個客戶端都有一個唯一的 ID,並且已經為每個客戶端建立了一對會話密鑰。
當客戶端從任何客戶端接收密文時,如果消息標有發送者的 ID 以便接收者知道使用哪個會話密鑰解密會更好嗎?
或者
不包括發件人的 ID,而是嘗試使用每個客戶端的會話密鑰解密,直到一個工作?
哪個更安全(假設客戶端之間的傳輸不安全)?
哪個性能更高?
哪個提供更好的可讀性/維護靈活性?
範例 1
- Alice 使用 Bob 的密鑰向 Bob 發送加密消息
- Bob 收到消息,並附加了一個發件人標識符
- Bob 使用 Alice 的密鑰解密並成功
- Bob 知道在這種情況下他不必擔心 Charlie 或 Eve
範例 2
- Alice 使用 Bob 的密鑰向 Bob 發送加密消息
- Bob 收到消息,但沒有附加發件人標識符
- Bob 嘗試使用 Charlie 的密鑰解密,但失敗了
- Bob 嘗試使用 Eve 的密鑰解密但失敗了
- Bob 嘗試使用 Alice 的密鑰解密並成功
- Bob 現在知道是 Alice 發送了消息,而不是 Charlie 和 Eve
請注意,您通常使用接收方的密鑰進行加密。如果我們假設對稱會話密鑰,那麼這不是問題,因為加密和解密是相同的。但是您的方案需要為每個組合至少一個共享密鑰,所以有 Bob-Alice、Bob-Charly、Bob-Eve 等的密鑰。
哪個更安全(假設客戶端之間的傳輸不安全)?
從消息保密的意義上說,它們都是安全的。當然,第二種方法會洩露發送者的 ID。這可能是一個問題,具體取決於協議和威脅模型。
如果沒有消息真實性,那麼第一個具有 ID 的消息更安全。否則,您可能會使用錯誤的密鑰接受消息。
哪個性能更高?
嘗試每個鍵當然性能較差。我希望任何人都能自己回答這個問題。
哪個提供更好的可讀性/維護靈活性?
同樣,您應該能夠自己回答這個問題。你想要一個確定性的協議;如果不需要搜尋正確的密鑰,則不要。