請在此認證方案中打孔
伙計們,我正在大學學習加密課程。我們的教授要求我們嘗試設計一些能夠抵抗主動攻擊的認證方案。這只是一個課堂練習,讓我們對這個話題感興趣。它成功了,我一直在嘗試利用我們迄今為止所學到的東西想出一些東西。
這是我開發的身份驗證方案:
請通過它打孔並告訴我這些容易受到哪些攻擊?
PS - 符號說明:Ka+(Rb) 表示通過使用 Alice 的公鑰對 Bob 生成的 nonce 進行加密而生成的加密文本。這個文本由 Alice 使用她的私鑰 Ka- 解密並得到 Rb。Alice 然後用她的私鑰加密 Rb 並將其發送給 bob。然後誰使用 Alice 的公鑰解密消息並獲取文本。如果此文本與 Rb 相同,則 alice 已通過 Bob 的身份驗證
類似地,Ka-(Rb) 表示通過使用 alice 的私鑰對 Bob 生成的 nonce 進行加密而獲得的加密文本
PPS - 在你們建議 Man-In_middle 攻擊之前:這就是我認為它不起作用的原因:
該協議的描述包括“Alice 然後加密 $ R_B $ 用她的私鑰”。這沒有標準含義。評論已經澄清它使用的是“具有適當填充的 RSA 加密方案”,我認為加密是理所當然的 $ R_B $ 使用私鑰的一半 $ K_A $ , 表示 $ K_A^-(R_B) $ , 通過填充獲得 $ R_B $ 與加密一樣,然後應用 RSA 私鑰求冪 $ K_A $ . 這可以是一種有效的簽名形式(雖然 RSA 簽名和加密通常使用不同的填充,但可以定義一個適用於加密和簽名的安全填充)。
該協議對防止中間人攻擊沒有任何作用。在通常的定義中,查理的目標是:
- 在 Bob 面前冒充 Alice,或/和在 Bob 面前冒充 Alice;
- 能夠理解愛麗絲對鮑勃說的所有內容,或/和鮑勃說愛麗絲的所有內容;
- 能夠讓愛麗絲相信查理決定的東西來自鮑勃,或/和讓鮑勃相信查理決定的東西來自愛麗絲。
為了實現這些目標中的每一個,查理:
- 從愛麗絲接收“我是愛麗絲”,將其轉發給鮑勃;
- 從 Bob 接收“我是 Bob”,將其轉發給 Alice;
- 收到 $ K_A^+(R_B) $ 來自 Bob,將其轉發給 Alice;(我用第一張圖作為參考,下一步之前在哪裡)
- 收到 $ K_B^+(R_A) $ 來自愛麗絲,將其轉發給鮑勃;
- 收到 $ K_A^-(R_B) $ 來自 Alice,將其轉發給 Bob,並將 Alice 的公鑰應用到它並刪除任何填充,從而得到 $ R_B $ ;
- 收到 $ K_B^-(R_A) $ 來自 Bob,將其轉發給 Alice,並將 Bob 的公鑰應用到此並刪除任何填充,從而得到 $ R_A $ .
從那時起,查理使用為鮑勃定義的(未指定的)協議對愛麗絲採取行動,包括解密愛麗絲的消息,並將查理決定的任何東西轉發給愛麗絲,愛麗絲無法判斷它來自查理而不是鮑勃;並且使用為 Alice 定義的(未指定的)協議對 Bob 進行類似的操作。
查理達到了他所有的目標。Charlie 唯一不知道的是 $ K_A^+(R_B) $ 和 $ K_B^+(R_A) $ 如果那是隨機填充,但沒有跡象表明它有一些用途。
此外,如果由於某種原因查理想要選擇他自己的隨機數 $ R_C $ 如第二張圖所示,而不是使用 $ R_A $ 或者 $ R_B $ (可能是因為協議擴展為“認證後,執行在低 20 字節定義的動作” $ R $ 我發送的”),查理仍然可以實現這一點。為了使用鮑勃冒充愛麗絲 $ R_C $ 查理的選擇,而不是 $ R_A $ 由愛麗絲查理選擇
- 從愛麗絲接收“我是愛麗絲”,將其轉發給鮑勃;
- 從 Bob 接收“我是 Bob”,將其轉發給 Alice;
- 收到 $ K_A^+(R_B) $ 來自 Bob,將其轉發給 Alice;
- 收到 $ K_B^+(R_A) $ 來自愛麗絲,丟棄這個,計算 $ K_B^+(R_C) $ 並將其發送給 Bob;
- 收到 $ K_A^-(R_B) $ 來自 Alice,將其轉發給 Bob,並將 Alice 的公鑰應用到它並刪除任何填充,從而得到 $ R_B $ ;
- 終止與 Alice 的會話;
- 收到 $ K_B^-(R_A) $ 來自鮑勃,丟棄它。
從那時起,查理使用為愛麗絲定義的(未指定的)協議對鮑勃採取行動,包括解密鮑勃的消息,並將查理決定的任何東西轉發給鮑勃,鮑勃無法判斷它來自查理而不是愛麗絲。
感謝 mikeazo 發現錯誤,希望已修復。
在對目前答案的評論中,該協議通過添加以下內容進行了擴展:
Alice 向 Bob 發送一個用 Bobs 公鑰加密的 pre-master secret;然後他們都使用這個 premaster 來計算主密鑰..並使用那個密鑰進行通信”
該擴展協議仍然容易受到查理冒充愛麗絲對鮑勃的攻擊。查理的表現和第一次攻擊一樣,然後
- 終止與 Alice 的會話;
- 假裝是 Alice,向 Bob 發送一個用 Bobs 公鑰加密的 Charlie 選擇的 pre-master secret;
- 然後 Bob 和 Charlie 使用這個 premaster 來計算主密鑰。
事實上,協議之後的任何添加都不能防止中間人攻擊,除非它使用參與者的另一個公鑰,或者使用現有密鑰的另一個填充方案。
這是因為 Alice 的行為允許將她用作解密預言機:通過參與協議的任何擴展的開始,Alice 接受可以被濫用的步驟,相當於用她的私鑰解密任何東西,因為沒有定義其他用途對於她的私鑰,與 Alice 進行虛假連接嘗試與擁有 Alice 的私鑰一樣好。
可以加強協議,去掉不明確的“用私鑰加密”,如下。
我們考慮一個帶加密的非對稱加密方案 $ E_{Pub}(P)\mapsto C $ 和解密 $ D_{Priv}(C)\mapsto P $ . 我們假設有一個基礎設施來驗證公鑰的有效性。
參與實體 $ A $ ,當與(被指控的)實體通信時 $ B $
- 發送我是 $ A $ ,並收到我 $ B $ ;
- 檢查 $ B\ne A $ ;
- 獲得真實的公鑰 $ Pub_B $ 的 $ B $ (如何不是該協議的一部分;一種常見的技術是 $ Pub_B $ 與我一起發送 $ B $ 作為證書的一部分,根據主公鑰進行驗證);
- 隨機抽取一個秘密 $ R_A=R_{A0}||R_{A1}||R_{A2} $ 其中每個 $ R_{Aj} $ 是 256 位的;
- 加密 $ R_A $ 使用 $ Pub_B $ , 產生 $ C_A=E_{Pub_B}(R_A) $ ,發送它,並收到一個所謂的 $ C_B $ ;
- 破譯 $ C_B $ 使用 $ Priv_A $ , 產生 $ R_B=D_{Priv_A}(C_B) $ (或錯誤,中止協議);
- 休息 $ R_B=R_{B0}||R_{B1}||R_{B2} $ 進入 $ R_{B0} $ , $ R_{B1} $ , $ R_{B2} $ ;
- 發送 $ R_{B0} $ 並收到指控 $ \widehat{R_{A0}} $ ;
- 比較 $ R_{A0} $ 和 $ \widehat{R_{A0}} $ (不等式中止協議);
- 用途 $ R_{A1}\oplus R_{B2} $ 作為 AES-GCM 密鑰,用於從 $ A $ 到 $ B $ , 並使用 $ R_{A2}\oplus R_{B1} $ 作為 AES-GCM 密鑰,用於從 $ B $ 到 $ A $ .
僅在步驟 1、5、8 和 10 交換消息。在這些步驟中發送和接收消息的順序未指定,因此 $ A $ 和 $ B $ 在涉及消息交換的步驟之間無需等待對方即可繼續進行。第 2 步是必要的,否則反映 Alice 發送內容的對手將成功使 Alice 接受她在第 10 步發送的任何資訊。
這個協議比原來的要好。至少,被動竊聽者無法解碼在步驟 10 交換的資訊,這在原始協議中是可能的。然而**,這個方案仍然不能安全地抵禦中間人攻擊**,僅假設 $ E_{Pub}(P)\mapsto C $ 完全保密。特別是,當 $ E_{Pub} $ 加密明文的每一位 $ P $ 分別地; 對於任何深入研究協議設計的讀者來說,發現這種攻擊是一項絕對必要的練習。
什麼時候 $ E_{Pub}(P)\mapsto C $ 是PKCS#1中的 RSA 加密方案之一,或者當我們刪除步驟 7. 和 8. 時(製作 $ R_{A0} $ 和 $ R_{B0} $ 毫無意義),我想不出任何手段讓中間人攔截或更改在步驟 10 交換的明文的任何部分,前提是 $ A $ 和 $ B $ 根據協議行事,尤其是永遠不要披露或使用任何 $ R_A $ , $ R_B $ , $ R_{A1}\oplus R_{B2} $ , $ R_{A2}\oplus R_{B1} $ 除了按照指示。