如何檢測協議是否容易受到試圖模仿的重放攻擊?
我很難找出如何檢測協議是否容易受到 Eves 的重放攻擊冒充 Alice/Bob 的影響!我這裡有一個例子:
$$ \begin{array}{lclcl} \mathsf A & \to & \mathsf B & : & \mathtt{Hello} \ \mathsf B & \to & \mathsf A & : & B, K_{ab}{B} \ \mathsf A & \to & \mathsf B & : & A, K_{ab}{A} \ \end{array} $$ 通過添加以下步驟,我認為這很容易受到 Eve 冒充 Bob 的影響: $$ \begin{array}{lclcl} \mathsf A & \to & \mathsf B & : & \mathtt{Hello} \ \mathsf B & \to & \mathsf E(\mathsf A) & : & B, K_{ab}{B} \ \end{array} $$ 現在夏娃有明文 $ B $ 和密文 $ B $ ( $ K_{ab}{B} $ ),取決於她現在使用的密碼 $ K_{ab} $ 她可以用它在 Alice 面前冒充 Bob。 $$ \begin{array}{lclcl} \mathsf E(\mathsf B) & \to & \mathsf A & : & A, K_{ab}{A} \ \end{array} $$
但是當我查看以下協議時:
$$ \begin{array}{lclcl} \mathsf A & \to & \mathsf B & : & A, K_{ab}{N_a} \ \mathsf B & \to & \mathsf A & : & B, N_a, K_{ab}{N_b} \ \mathsf A & \to & \mathsf B & : & A, B, N_a, N_b, K_{ab}{N_a, N_b} \ \end{array} $$ 我完全迷路了。Eve 可以利用的協議中是否存在某種我沒有看到的特徵漏洞?如果這是一個愚蠢的問題,我很抱歉,但我是新手。
編者註:
- $ \mathsf A $ (分別。 $ \mathsf B $ ) 是實體 Alice (resp. Bob), $ A $ 和 $ B $ 是他們各自的身份。
- $ \mathsf E(\mathsf A) $ 表示實體 Eve 冒充愛麗絲。
- $ K_{ab}{A} $ 意味著加密 $ A $ 在密鑰下使用對稱密碼 $ K_{ab} $ 由 Alice 和 Bob 共享,但 Eve 最初不知道。
- $ N_a $ 表示Alice 選擇的隨機數。
- $ X, Y\dots $ 表示兩個或多個消息的可逆連接;如果消息的長度是固定的,則可能是簡單的串聯,或者在串聯的消息中
,
替換 every\
by\\
then every,
by之後與 as 分隔符\,
串聯。
在純粹的重放攻擊中,Eve 作為協議的真正參與者相對於對方。因此,被動地竊聽了協議:
$$ \begin{array}{lclcll} \mathsf A&\to&\mathsf B&:&\mathtt{Hello}&\ \ \mathsf{[1]}\ \mathsf B&\to&\mathsf A&:&B,K_{ab}{B}&\ \ \mathsf{[2]}\ \mathsf A&\to&\mathsf B&:&A,K_{ab}{A}&\ \ \mathsf{[3]}\ \end{array} $$ 夏娃向鮑勃冒充愛麗絲可以是: $$ \begin{array}{lclcll} \mathsf E(\mathsf A)&\to&\mathsf B&:&\mathtt{Hello}&\ \ \mathsf{[1a]}\ \mathsf B&\to&\mathsf E(\mathsf A)&:&B,K_{ab}{B}&\ \ \mathsf{[2a]}\ \mathsf E(\mathsf A)&\to&\mathsf B&:&A,K_{ab}{A}&\ \ \mathsf{[3a]}\ \end{array} $$ 在哪裡 $ \mathsf{[3a]} $ Eve 只是重播了她從中獲得的價值 $ \mathsf{[3]} $ , 從而通過 Bob 在 step 的隱式測試 $ \mathsf{[3a]} $ 收到的 $ K_{ab}{A} $ 在消息的第二部分解密為 $ A $ 在第一部分中,Bob(錯誤地)假設是對方的身份。 而 Eve 在 Alice 面前冒充 Bob 可以是:
$$ \begin{array}{lclcll} \mathsf A&\to&\mathsf E(\mathsf B)&:&\mathtt{Hello}&\ \ \mathsf{[1b]}\ \mathsf E(\mathsf B)&\to&\mathsf A&:&B,K_{ab}{B}&\ \ \mathsf{[2b]}\ \mathsf A&\to&\mathsf E(\mathsf B)&:&A,K_{ab}{A}&\ \ \mathsf{[3b]}\ \end{array} $$ 在哪裡 $ \mathsf{[2b]} $ Eve 只是重播了她從中獲得的價值 $ \mathsf{[2]} $ ,因此通過了 Alice 在 step 的隱式測試 $ \mathsf{[2b]} $ 收到的 $ K_{ab}{B} $ 在消息的第二部分解密為 $ B $ 在第一部分中,Alice(錯誤地)假設是對方的身份。 這不涉及查找密鑰 $ K_{ab} $ 從明文 $ B $ 和密文 $ K_{ab}{B} $ ,這將破解密碼,這在重放攻擊中被認為是不可能的。
防止純重放攻擊的一種方法是使用nonce,這樣就不會接受剛剛重放的消息。本協議就是這種情況(問題的第二個沒有 $ K_{ab}{N_a,N_b} $ 在最後一步)
$$ \begin{array}{lclcll} \mathsf A&\to&\mathsf B&:&A,K_{ab}{N_a}&\ \ \mathsf{[1]}\ \mathsf B&\to&\mathsf A&:&B,N_a,K_{ab}{N_b}&\ \ \mathsf{[2]}\ \mathsf A&\to&\mathsf B&:&A,B,N_a,N_b&\ \ \mathsf{[3]}\ \end{array} $$ 愛麗絲是一個隨機數 $ N_a $ , 發送它加密為 $ K_{ab}{N_a} $ 作為…的一部分 $ \mathsf{[1]} $ , Bob 提取,解密產生 $ N_a $ 他作為其中的一部分發送 $ \mathsf{[2]} $ ,允許 Alice 提取並對照她選擇的 nonce 檢查它;這向 Alice 證明了某個實體能夠使用 $ K_{ab} $ 參與了交換;如果 Alice 可以排除這個實體是她自己(例如,通過在給定時間不執行多個協議實例),那麼涉及的實體必須是 Bob(因為沒有其他實體共享 $ K_{ab} $ 並且它僅用作密碼的密鑰),因此該協議不受 Bob 冒充 Alice 以 Alice 的角色執行協議的情況。
此外,鮑勃選擇了 $ N_b $ 在 $ \mathsf{[2]} $ , 發送它加密為 $ K_{ab}{N_n} $ 作為…的一部分 $ \mathsf{[2]} $ ,愛麗絲提取,解密產生 $ N_b $ 她作為其中的一部分發送的 $ \mathsf{[3]} $ ,允許 Bob 提取並對照他選擇的隨機數進行檢查;這向 Bob 證明了某個實體能夠使用 $ K_{ab} $ 參與了交換;如果 Bob 可以排除這個實體是他自己,那麼那一定是 Alice,因此該協議不會冒充 Alice 到 Bob 以 Bob 的角色執行協議。
請注意,當 Bob 是允許多個並發連接的伺服器時,Eve 可以將 Alice 冒充給 Bob。攻擊過程如下:
$$ \begin{array}{lclcll} \mathsf E(\mathsf A)&\to&\mathsf B&:&A,K_{ab}{N_a}&\ \ \mathsf{[1a]}\ \mathsf B&\to&\mathsf E(\mathsf A)&:&B,N_a,K_{ab}{N_b}&\ \ \mathsf{[2a]}\ \mathsf E(\mathsf A)&\to&\mathsf B&:&A,K_{ab}{N_b}&\ \ \mathsf{[1a’]}\ \mathsf B&\to&\mathsf E(\mathsf A)&:&B,N_b,K_{ab}{N’_b}&\ \ \mathsf{[2a’]}\ \mathsf E(\mathsf A)&\to&\mathsf B&:&A,B,N_a,N_b&\ \ \mathsf{[3a]}\ \end{array} $$ 在哪裡
- 在 $ \mathsf{[1a]} $ , Eve 給出了任何合理的 $ K_{ab}{N_a} $ 即使她實際上並不知道匹配 $ {N_a} $ ; 例如可以是 $ {N_a} $ 從以前的會話中擷取,或(對於許多密碼)相同大小的任何隨機位串)。
- 在 $ \mathsf{[2a]} $ , Bob 只是做它的工作;夏娃沒有做愛麗絲會做的檢查 $ N_a $ .
- 在 $ \mathsf{[1a’]} $ , Eve 模仿開始另一個同時連接嘗試,但偷偷地提供 $ K_{ab}{N_b} $ 的 $ \mathsf{[2a]} $ 公約將提供的地方 $ K_{ab}{N’_a} $
- 在 $ \mathsf{[2a’]} $ , Bob 只是做它的工作,並相應地返回 $ N_b $ 他選擇並發送加密的 $ \mathsf{[2a]} $ ; 夏娃再次沒有檢查。
- 在 $ \mathsf{[3a]} $ , Eve 使用 $ N_b $ 由 Bob 在步驟中方便地提供 $ \mathsf{[2a’]} $ , 而 Bob 對此進行的檢查 $ N_b $ 通過。
以上通過展示顯式攻擊證明了該協議是易受攻擊的。是否是重放攻擊是一個品味問題。假設是:問題詢問這是如何檢測到的。答案是:因為 $ \mathsf{[1]} $ 和 $ \mathsf{[2]} $ 可以被濫用以使 Bob 成為密鑰下的解密預言機 $ K_{ab} $ (即允許解密任何消息的東西),並且在答案的這一部分考慮的協議中,解密消息的能力是向 Bob 驗證 Alice 的能力。
作為防止上述攻擊的嘗試(可能:出於教學原因),問題的協議
$$ \begin{array}{lclcll} \mathsf A&\to&\mathsf B&:&A,K_{ab}{N_a}&\ \ \mathsf{[1]}\ \mathsf B&\to&\mathsf A&:&B,N_a,K_{ab}{N_b}&\ \ \mathsf{[2]}\ \mathsf A&\to&\mathsf B&:&A,B,N_a,N_b,K_{ab}{N_a,N_b}&\ \ \mathsf{[3]}\ \end{array} $$ 有一個步驟 $ \mathsf{[3]} $ 這樣愛麗絲形成 $ N_a,N_b $ 並將其加密為 $ K_{ab}{N_a,N_b} $ , Bob 破譯並核對 $ N_a $ 他從 $ K_{ab}{N_a} $ 作為步驟的一部分收到 $ \mathsf{[1]} $ ,並且反對 $ N_b $ 他選擇了。這不是一個好主意:因為 Alice 沒有做額外的檢查,而是額外使用 $ K_{ab} $ ,這只會讓她更容易被冒充 Bob。並且該協議仍然容易受到 Alice 對 Bob 的冒充。證明這一點留給讀者作為練習,但以下內容可能有助於檢測:
- 某些公共功能的密碼是不被禁止的 $ F $ 是這樣的 $ F(X,Y,K{X},K{Y}) $ 總是破譯相同 $ K{X,Y} $ ,並且從一個安全分組密碼中,很容易構造一個具有該屬性的CPA 安全密碼,並且匹配 $ F $ (包括,忽略其輸入 $ X $ 和 $ Y $ ).
- 即使我們限制為沒有該屬性的 CPA 安全密碼,有些密碼是可延展的(例如CTR 模式下的分組密碼),這允許 Eve 充分利用被動竊聽步驟 $ \mathsf{[3]} $ .