Encryption

用於節點間通信的乙太坊 RLPx 協議 - 加密中的缺陷

  • September 25, 2019

乙太坊使用RLPx/devp2p進行節點間通信。該協議使用橢圓曲線集成加密方案進行加密(請參閱參考資料

已知問題下,我發現了這一段:

RLPx 握手被認為是“破解加密”,因為 aes-secret 和 mac-secret 被重複用於讀取和寫入。RLPx 連接的兩端從相同的密鑰、nonce 和 IV 生成兩個 CTR 流。如果攻擊者知道一個明文,他們可以解密重用密鑰流的未知明文。

**問:**誰能解釋一下這意味著什麼,以及第三方如何利用它來觀察兩個節點之間的加密通信。

相關:https ://ethereum.stackexchange.com/questions/59549/geth-inter-node-communication-devp2p-rlpx-encryption

首先,點擊率模式。這是一種流模式,允許分組密碼(此處為 AES)作為流密碼工作。

給定 $ (k,IV) $ 在哪裡 $ k $ 是一個隨機加密密鑰,並且 $ IV $ 是一個初始化向量,CTR 模式是這樣工作的:

為了 $ i $ 消息 $ m_i $ (小於塊大小):

加密:計算 $ c_i=E_{k}(IV||i)\oplus m_i $ ;

解密:計算 $ m_i=E_{k}(IV||i)\oplus c_i $ ;

現在兩個流使用相同的密鑰和IV,所以如果明文 $ m_i $ 在一個流中被攻擊者知道(例如,這是一個像標題或其他東西的固定欄位),攻擊者可以恢復明文 $ m_i’ $ 在另一個流中。

流 1: $ c_i=E_{k}(IV||i)\oplus m_i $ ;

我知道 $ m_i $ ,所以我可以恢復這個塊的密鑰流:

$ E_{k}(IV||i)\oplus m_i\oplus m_i=E_{k}(IV||i) $

然後給出密文 $ c_i’ =E_{k}(IV||i)\oplus m_i’ $ 在另一條溪流中,我可以恢復 $ m_i’ $ 因為加密中使用的密鑰流是相同的:

$ E_{k}(IV||i)\oplus m_i’\oplus E_{k}(IV||i)=m_i’ $

引用自:https://crypto.stackexchange.com/questions/63047