Randomness

隨機化(加密)數據以隱藏數據源的行為

  • March 22, 2016

我想傳輸少量數據,典型值。4 - 16 字節通過一個可以隨時被竊聽的通道。

行為,數據變化的方式,也應該受到保護。

我可以使用 XOR 和 4 - 16 字節的密鑰對它進行加密,如下所示:

c = m x k

這意味著c相同的相同m。在觀察密碼時,解密實際數據實際上並不有趣,因為密碼揭示了有關數據源的足夠資訊。

在觀察數據時 - 無論是否加密 - 它應該……

... NOT LOOK LIKE THIS:
t=0 12587200
t=1 12587200
t=2 12587200
t=3 97387419

... BUT LIKE THIS:
t=0 23443623
t=1 53453566
t=2 91372718
t=3 18347444

數據要麼

  • 線性增加(可變增量)或
  • 在很長一段時間內,圍繞一個相對固定的平均值變化或
  • 在很長一段時間內完全沒有變化或
  • 不費吹灰之力就可以猜到

我很清楚,由於數據可能不會或幾乎沒有變化,因此應該在加密之前對其進行隨機化。

約束

  • 默默無聞沒有安全性-竊聽者知道該算法

  • 數據可能是

    • 由源廣播(在定義的時間間隔內更新,在此時間段內,竊聽者可能會看到相同的數據)或
    • 被一位同行積極閱讀
  • 接收者/閱讀者可能會錯過消息更新,因此它應該能夠同步

  • 接收方可以接受消息失去

  • 雙方都不能依賴穩定且不可篡改的時基

  • CPU 功率和記憶體要求受到限制

  • 一段時間後可以看到數據和行為不機密

我看到了一個適合廣播和主動讀取的選項:將數據與源自雙方都知道的機密 IV 的偽隨機因子結合起來。然後使用同樣機密的密鑰對該組合進行加密。

它可能看起來像這樣:

T = 5 mins     # Update interval, e.g. 5 mins (unconfidential)
K = 0x1BC07410 # Key (confidential)
IV = 0xB9EF72E5 # LFSR seed (confidential)
r = 1000       # initial rounds (unconfidential)
R = 0          # LFSR round counter
n = IV         # pseudo noise from LFSR

def HIDE(m):
 n = LFSR(n)
 return m x n

def ENC(m):
 return m x K

# initialize once
while R < r:
 n = LFSR(n)
 R = R + 1

while True:
 R = R + 1
 m = READ_FOUR_BYTE_MESSAGE()
 Feed to broadcasting or store for retrieval: ( ENC(HIDE(m)), R )
 sleep(T)

我很清楚,竊聽者可能會通過 LFSR 暴力探測 IV 循環R時間,並用密碼對其進行異或,以知道消息在更新間隔之間沒有變化。

我的問題

  • 我是否錯過了其他攻擊媒介?
  • 有什麼可以提高安全性但增加 IV 和密鑰長度的嗎?
  • 請指導我應該學習哪些基礎知識

我假設您打算使用 LSFR 狀態對消息進行異或,而不是使用固定鍵。

即使在這種情況下,你沒有涉及的一個問題是,如果攻擊者知道/猜測兩個不同交易所之間的數據是相同的,他可以恢復 LSFR 狀態(並由此獲得一切)。

他要做的是對兩個密文進行異或 $ LFSR^k \oplus P $ 和 $ LFSR^{k+n} \oplus P $ ; 這給了他 $ LFSR^k \oplus LFSR^{k+n} $ ; 如果他知道有多大 $ n $ 是(您在兩條消息之間循環 LFSR 的次數),那麼恢復原始 LFSR 狀態是線性代數中的一個簡單練習。

設計這樣一個系統真的不是業餘愛好者的任務。想出一個具有上述微妙漏洞的系統太容易了。相反,我建議您使用由專家設計的系統。

我打算在這裡寫一些關於如何勾勒出這樣一個系統的建議;但是我意識到我對您的系統限制和所需的安全模型知之甚少。但是,有人需要這樣做,而您不是合適的人。

我不是在批評你;實際上,您的要求列表(“消息需要隨機化”、“隱晦不安全”、“沒有可靠的時間同步”、“可能發生消息失去”)表明您已經考慮過了。只是製作一個高效且安全的加密系統比看起來要難得多*。*

至於需要專家考慮的一些限制條件:

  • 你提到了潛在的竊聽者;您是否還需要擔心有人修改密文(也許希望對解密數據進行可預測的更改)?
  • 密文可以有多大?
  • 你說你在時間和記憶上都有限制;這些限制有多嚴格?記憶體是否受程序大小或數據大小的限制?如果你在 CPU 上,那是 8 位 CPU 還是 32 位 CPU?
  • 如果有人以某種方式恢復了密鑰,他們可以讀取所有數​​據;那樣你覺得可以嗎?

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