具有低熵消息的 Speck32
我正在使用 Speck 32 對一組非常低熵的位進行編碼(以便消息保持非常短)
它編碼兩個數字:
- w:16 位:但在大多數情況下,消息是僅有的 10-100 種可能性之一(約 3-7 位)
- v:8 位,但在大多數情況下,消息只有 4 位左右
在我目前的方案中,我對最後 8 位使用隨機(丟棄)內容。我的問題如下,假設消息集為數千(即攻擊者可以訪問約 4000 條加密消息):
- 即使熵很低,消息是否單獨安全(即某些消息的妥協不會破壞其他消息的安全性)?
- 對足夠大的消息集進行成功的猜測/統計會破壞密鑰嗎?
- 將最後 8 位用於 MAC 和/或 CRC 是一種誘惑,但我擔心這會使統計攻擊變得更好。這種恐懼有道理嗎?
如果我沒聽錯,您正在嘗試解決安全運輸的問題 $ w $ 和 $ v $ 值,在最小化密文大小的約束下。
所以,你正在做的是採取 $ w $ 和 $ v $ 值,隨機選擇 $ r $ 值,將它們連接成一個 32 位塊,然後通過 Speck32 發送該塊(使用一些未指定派生的密鑰),這就是你的密文。
通過該程序,我看到了這些可能的攻擊:
- 有人暴力破解密鑰;Speck32 有一個 64 位密鑰。雖然暴力破解密鑰超出了隨機黑客的能力,但它在一個堅定的大型組織的能力範圍內。如果您的威脅模型要求您在面對如此龐大的對手時保持安全,那還不夠好。
- 有人以另一種方式恢復密鑰。你沒有說你的密鑰是如何交換的,但是如果(例如)你有一個每個人都使用的全域密鑰,那麼如果有人闖入一個設備並抓住了密鑰,那麼他就擁有了每個人的密鑰。
- 尋找重複值。如果有人兩次看到相同的密文,那麼他就知道 $ w $ 和 $ v $ 值重複(和 $ r $ ,但他不在乎)。假如說 $ r $ 是隨機生成的,那麼您可能會在 16 次重複後看到重複 $ w, v $ 價值觀。
- 修改密文塊;如果攻擊者能夠修改密文,他可以將其修改為一個他沒有見過的值(這將導致解密 $ w, v $ 值是有效隨機的)。或者,他可以將其修改為他以前見過的密文(在這種情況下,解密的 $ w, v $ values 將是我們之前發送的內容。
所以,回答你的問題:
即使熵很低,消息是否單獨安全(即某些消息的妥協不會破壞其他消息的安全性)?
好吧,假設攻擊者無法進行密鑰恢復攻擊,那麼他能做的最好的事情就是尋找重複值。如果他確實看到了重複,並且他知道一種情況的價值,那麼他顯然知道另一種情況的價值。這並沒有告訴他任何其他密文。
對足夠大的消息集進行成功的猜測/統計會破壞密鑰嗎?
不,它對攻擊者沒有幫助。如果他有資源,他可以對少量消息進行暴力攻擊(假設他可以辨識出合理的 $ w, v $ 值);更多的密文對他沒有幫助。
將最後 8 位用於 MAC 和/或 CRC 是一種誘惑,但我擔心這會使統計攻擊變得更好。這種恐懼有道理嗎?
好吧,如果你在那裡有一個固定值(取決於 $ w, v $ ),這增加了重複密文的機率。另外,如果你去使用 $ r $ 作為身份驗證,我不會費心做 CRC 或 MAC $ w, v $ ; 那些已經被攪拌到密文中了。我會做的是要麼使用固定位(比如,0;那些很容易生成/驗證,並且不亞於 $ w, v $ ),或者如果您想添加一些針對複制/粘貼攻擊的保護,請製作 $ r $ 密文上下文的函式(例如消息序列號的函式),並讓解密器檢查它。現在,它不是很好(隨機更改仍然有 1/256 的機會被接受),但總比沒有好)。
最後的一些評論:
- 您需要擔心的一件事是密鑰分配;這通常是加密系統的致命弱點。如果您讓攻擊者更容易學習密鑰,那麼最好的加密系統也無濟於事
- 我可以建議您考慮使用 Speck48 嗎?它不僅允許更大的密鑰(使蠻力攻擊變得相當困難),而且允許 $ r $ 值大 16 位;如果您選擇 $ r $ 隨機,這意味著實際上不會發生重複的密文;如果您選擇 $ r $ 作為消息上下文的函式,這意味著更改將很有可能被檢測到。當然,這意味著您還有 16 位要傳輸;你需要決定這是否是一個可行的選擇。