Aes

如何阻止攻擊者重複相同的密文?

  • September 9, 2017

我有這種情況,PC 通過 RS-232 連接到控制工業機械的某個硬體模組。

硬體應該接收打開或關閉這些機器的命令,並且可能需要在一分鐘內多次發送相同的命令。現在,我對密碼學非常陌生,所以我將使用已經存在的庫對這個硬體進行程式,該庫支持 ECB 和 CBC 模式下的 AES-128、AES-192 和 AES-256。

我面臨的問題是,潛在的攻擊者可以很容易地獲得對傳輸線的訪問權,只需探測它以查找正在發送的消息,然後使用此資訊發送可能危及工業機械的命令。

假設 PC 使用 AES-256 使用硬體模組知道的密鑰來加密類似“MACHINE1 ON”的消息。由於命令始終相同,在 ECB 模式下使用 AES 將產生相同的密文,這意味著攻擊者只需重複相同的密文即可啟動機器。

現在,CBC 加密使用 IV 來隨機化密文,但問題是,PC 和硬體模組如何知道 IV?如果 PC 生成一個真正隨機的 IV 並用它加密命令,那麼硬體模組沒有它就無法解密消息。

所以它認為也許 PC 應該將 IV 傳輸到硬體,使用 ECB 模式,然後傳輸使用該 IV 加密的命令,但我們又回到了原點,因為攻擊者可以重複密文,而硬體將接受它(這被認為是重放攻擊嗎?)。

我已經閱讀了一些關於 MAC 以及它如何允許驗證發件人是否未更改的資訊,但它如何應用於這種情況?它甚至會有所幫助嗎?如果不是,在這種情況下可以使用什麼技術?

請記住,發送到硬體模組的消息種類很少。硬體模組還能夠生成真正的隨機數,並以簡單的“OK”或“Invalid command”消息回復命令。這些也應該被加密,以確保攻擊者獲得盡可能少的資訊。

編輯:

我還讀到有時,IV在加密文本的開頭髮送,以便接收端知道前N個字節對應於IV並且可以解密消息。這不是也容易受到同樣的重放攻擊嗎?

實現某種“握手”不是更好嗎,其中硬體是生成IV並將其發送到PC的硬體,PC以確定性的方式修改IV,然後使用修改後的消息發送消息四?然後,每次 PC 需要發送命令時,該過程都會重複,只要硬體不會兩次生成相同的 IV,那麼一切都是安全的,對嗎?

如果這個問題到處都是,我很抱歉,我對文字學很困惑,我被要求實現一些我幾乎不知道它是如何工作的東西。任何幫助將非常感激。

您的問題似乎將 IV 和反重放保護的想法混為一談;實際上,他們彼此之間沒有任何關係。

IV(在 CBC 模式下)是加密器隨機選擇的值;它可以與密文一起發送(因為我們不在乎攻擊者是否知道它)。它的存在使得如果我們決定發送兩次相同的消息(或發送兩個相似的消息),密文看起來完全不相關(因此攻擊者不會獲得任何資訊)。它對反重放沒有幫助;但是,它從未被設計為。


至於反重放(拒絕相同的消息),有兩種標準方法可以解決它。

  • 第一種方法是讓接收者記住它已經收到了哪些消息。這可能比您想像的要容易;如果發送者包含一個序列號(它在每次發送消息時遞增),接收者只需檢查是否看到了最後一個序列號;如果它沒有增加,它可以拒絕該消息。現在,這可能有一個問題,對您來說,它無法正常工作;當任一系統重新啟動時,雙方如何知道使用哪個序列號?當我們使用這種策略時,我們在最初協商密鑰時將序列號重置為已知值;聽起來您正在使用配置的密鑰,所以這不起作用。
  • 另一種策略是挑戰/響應協議;我們讓接收者發送一個值(可以是隨機的);然後發送者將該值包含在加密消息中,然後接收者檢查消息中的值是否與它發出的值匹配。在您的情況下,它可能如下所示:

PC:“我想給你發個命令”

設備:“好的,使用值 0x314159”

PC:“打開 MACHINE1;值 0x314159;回复值 0x271828”

設備:“OK,命令已接受;值 0x271828”

請注意,前兩條消息實際上並不需要加密;攻擊者無法從他們身上學到任何有用的東西。

我包含了回复值(由 PC 選擇),以便攻擊者無法模擬設備接受命令,而實際上它沒有。


第三個問題是“如何確保攻擊者無法通過修改消息獲得任何收益”。顯然,可以更改任意消息的攻擊者可以禁止任何通信(通過簡單地干擾 RS-232 信號);密碼學不能解決這個問題;它可以做的最好的事情就是確保攻擊者可以完成的所有事情。

您提到了 MAC(消息驗證碼);這是這個問題的正確解決方案。對於每條加密消息,您將計算 MAC(這是消息和密鑰的函式);您將此值與加密消息和 IV 一起發送。當設備收到它時,它還會計算 MAC,並將計算的值與加密消息中的值進行比較。如果兩個值相同,就知道消息沒有被修改。

沒有這個,攻擊者就有可能修改加密的消息;例如,他可能能夠將加密的“打開機器 1”消息修改為加密的“打開機器 2”消息。讓我震驚的是,避免這種可能性是值得做的。

有了您擁有的資源,最簡單的 MAC 將是 CBC-MAC。要實現這一點,您將獲取您的消息(包括 IV),如果您支持可變長度消息,則添加消息長度,然後要求您的 CBC 硬體使用固定的 IV(全 0 的工作)和不同的 AES 對其進行加密比您用於執行實際消息加密的密鑰。然後,您獲取密文,並丟棄除最後 16 個字節之外的所有內容;那是你的MAC。

接收方會做同樣的事情;他們將接收到的消息(不包括 MAC),可能會添加長度,並要求他們的硬體使用相同的固定 IV 對其進行加密(是的,加密,而不是解密),並且只查看最後 16 個字節生成的密文,並將其與接收到的消息中包含的 MAC 進行比較。

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