是否可以在沒有伺服器的情況下實現信號協議?
我的問題是關於信號協議
$$ 1 $$. 是否可以在沒有伺服器的情況下安全地實現協議? (我對這個問題沒有特別的動機,除了更好地理解信號協議是如何工作的,我給伺服器什麼樣的信任,如果伺服器可以被黑客攻擊或者如果伺服器 <> 客戶端通信可以監控)。
想像一個有大白板(或黑板)的房間。這是我們的“伺服器”,但任何人都可以隨時進入房間並進行任何他們想要的修改。Alice 的目標是通過在板上寫消息來啟動與 Bob 的加密非同步對話。
我的理解是,XEdDSA/VXEdDSA 和協議的雙棘輪組件都不受董事會公開的影響。那是對的嗎?
這留下了協議的其他兩個組件。
X3DH
如 X3DH 第 4.7 節“伺服器信任”中所述
$$ 2 $$,以下屬性在使用伺服器時是正確的,並且在使用白板時仍然是正確的:
- 伺服器可能會通過拒絕傳遞消息而導致通信失敗(有人可以擦除電路板)。
- 伺服器可以拒絕提供預密鑰,或者有人可以耗盡預密鑰(從板上刪除它們),從而減少前向保密。
通過允許任何人訪問董事會可以進行哪些其他攻擊?
芝麻
如 Sesame 第 6.3 節“保護伺服器通信”中所述
$$ 3 $$:
如果攻擊者在對伺服器進行身份驗證時能夠冒充受害者設備,則攻擊者可以獲取發送到該設備的消息。攻擊者將無法解密這些消息,但會獲知發件人使用者 ID 和設備 ID。
這在白板上顯然是無法避免的,所以每個人都能看到誰在和誰交流。
Sesame 還依賴於伺服器 <> 客戶端通信被加密和驗證。從同一部分:
設備和伺服器之間的通信應該加密和認證。這限制了暴露給竊聽者的元數據數量,並使第三方攻擊者更難對設備到設備的通信進行主動或被動攻擊。
通過讓任何人訪問董事會,哪些攻擊成為可能?
結論
據我所知,唯一降低安全性的原因是任何人都可以監控誰在與誰交談。
還可以通過消除預密鑰來減少前向保密。這會完全消除前向保密嗎?
密碼可否認性如何受到影響?
是否曾經開發過任何類似的協議,它可以在完全不信任伺服器的情況下提供與信號協議相同的屬性(例如,您可以在我們的白板上真正做到這一點)?
謝謝,我希望你想得開心!
$$ 1 $$ https://www.signal.org/docs/ $$ 2 $$ https://www.signal.org/docs/specifications/x3dh/#server-trust $$ 3 $$ https://www.signal.org/docs/specifications/sesame/#protecting-server-communications
從白板範例擴展,因為它只是一個透明的中央伺服器。
這不是問題,儘管使用不同的模型,您只需要決定您關心哪些屬性。
- 如果沒有受信任的實體維護已驗證電話號碼與公鑰的查找,您將需要依賴另一種方法。我建議直接使用公鑰來有效地消除這一層,同時保持它的正交性,以便將來可能存在查找。
- 如果沒有受信任的儲存轉發服務,您將需要建立一個集合點,例如 DHT,或者包裝另一個對 Signal 一無所知的聊天協議。包裝另一個協議可以解決(1)機會主義問題,儘管服務(如 Signal)可能會返回它控制的密鑰,並且同樣受信任和集中。
- 如果您沒有儲存轉發服務,則簽名的預密鑰是多餘的。這不會降低前向保密性,但確實需要在發送消息之前進行 3DH 握手。所以沒有 0-RTT 半前向安全消息。
- 如果傳遞是同步且有序的,您可以簡化雙棘輪。
- 您可以使用 Tor 等匿名網路來隱藏誰在與誰交談。每個使用者都可以是他們自己的 ed25519.onion 服務。但如果是,那麼雙棘輪和 3DH 都是多餘的,我們有ricochet.im。
社交圖譜和否認性取決於上述選擇。即 ricochet.im 使用洋蔥路由隱藏社交圖;如果你想要更好,你需要一個混合網路。或者,如果您通過某些現有服務轉發消息,他們可以看到社交圖證明您進行了通信並永久記錄密文以驗證任何透露的密鑰和明文。
另一方面:您可能想看看matrix.org的libolm,這是一個不假設伺服器合作的雙棘輪實現。