X3DH 密鑰協議協議的可否認性屬性
Signal 的X3DH 密鑰協議協議規範在第 4.5 節中聲明:
或者,將基於 DH 的相互認證(即 DH1 和 DH2)替換為來自身份密鑰的簽名可能很誘人。然而,這降低了可否認性,
$$ … $$
DH1
替換和DH2
使用簽名究竟如何減少可否認性?
我認為,使用簽名意味著類似於 STS 協議(https://en.wikipedia.org/wiki/Station-to-Station_protocol)。在 STS 中,為了相互認證,每一方都必鬚髮送一個臨時密鑰的簽名。因此,按照https://signal.org/docs/specifications/x3dh中使用的術語,Alice 應該簽署
EK_a || SPK_b
,Bob 應該簽署相同的協議。在 X3DH 中,由簽名提供的身份驗證被這樣一個事實所取代,即為了獲得密鑰 (
SK
),每一方都應該使用他的身份密鑰 (例如ID_a
) 和對方的臨時密鑰 (例如SPK_b
) 執行 DH 交換。因此,實際上,使用(在 STS 中)SPK_b
的私鑰簽名ID_a
被替換為僅執行 DHID_a
和SPK_b
(在 X3DH 中)。那麼,否認有什麼區別呢?非常簡單:簽名是通信和知道臨時密鑰的證據,因此知道
SK
. 雖然 DH 的執行不是證據,因為甚至不可能知道 Bob(或 Alice)執行 DH 並獲得SK
與否。如果 Alice 想要向某個法官證明 Bob 與她進行了通信,並且 Bob 知道一些SK
(因此 - 他可以創建或至少解密 Alice 提供的一些密碼文本來判斷),她無法證明這一點:很明顯Alice 可以用EK_a
她想要的任何密鑰來模擬 DH 。沒有證據表明 Bob 正在執行 DH,EK_a
甚至知道存在這樣的EK_a
.
簽名可由第三方驗證——任何知道公鑰的一方都可以驗證簽名消息,但這還不足以偽造它們。
如果 Alice 想說服 Charlie Bob 寫了一條消息並且 Alice 上有 Bob 的簽名,那麼 Charlie 可以使用 Bob 的公鑰驗證該簽名消息,而不會受到暴力威脅。
來自 DH 密鑰協議的秘密下的對稱驗證器無法被第三方驗證——任何能夠驗證消息驗證器的方也可以偽造它們。
如果 Alice 想說服 Charlie Bob 寫了一條消息並且消息上只有一個對稱的驗證器,那麼 Alice 不僅可以偽造驗證器,而且為了使 Charlie 能夠驗證驗證器,Alice 必須透露她自己的密鑰,或者在暴力威脅導致鮑勃暴露自己的身份。
因此,當 Bob 簽署了一條以後可能會違背他的利益的消息時,Alice 有一個簡單的方法來說服 Charlie,Bob 寫了這條消息——但是當 Bob 只提供了一個對稱的身份驗證器時,Charlie 無法判斷 Bob 是否真的發送了或者 Alice 是否偽造了它,這給了 Bob 一個簡單的方法來否認它。