隨機化(加密)數據以隱藏數據源的行為
我想傳輸少量數據,典型值。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?
- 如果有人以某種方式恢復了密鑰,他們可以讀取所有數據;那樣你覺得可以嗎?