我正在製作一個note taking web app,它可以在您輸入時連續保存筆記。我發送差異以防止通過電報發送太多數據,當筆記是純文本時,這可以正常工作。是否存在滾動塊加密算法?
但是,我添加了對加密筆記的支持,因此筆記只能以加密形式離開瀏覽器(因此筆記可以包含敏感信息,而不會有任何人不知道密碼的機會(這也永遠不會離開瀏覽器)閱讀他們,甚至沒有一個完全訪問數據庫)。但是,對筆記所做的所有更改目前都完全改變了加密文本,因此我必須在編輯過程中每隔一兩秒將整個筆記發送回服務器。
根據我最近閱讀的內容,我可以(但不應該)使用ECB block cipher加密模式,它將明文分成16個字節塊並獨立加密。這意味着如果編輯發生在最後(或者如果編輯添加或刪除了16個字節的倍數),diff就可以工作。但是在筆記中間發生的任何編輯都會影響筆記其餘部分的加密文本。
因此,當我昨晚躺在牀上時,我開始想知道是否存在一種「滾動塊」加密算法,根據周圍的字符對筆記的每個部分進行加密,以便更改/添加/刪除任何一個字符只會改變周圍的16個字節。希望這是有道理的。基本上,我需要一種加密算法,以便對明文進行細微更改對加密文本進行相當小的更改。
這樣的算法是否存在? (這是另一個可以與AES一起使用的分組密碼操作模式,而不是一個完整的新算法嗎?它的安全性如何與更正常的分組密碼模式相比較?)
我原本有這個作爲JavaScript的問題,因爲這是我最終想要的,但這可能要求多一點。
如果我正確地閱讀該頁面,像CFB這樣的模式仍會在明文中途導致編輯,從而導致從該點開始的加密文本不同,這不是我想要的。 – 2011-05-27 10:24:20
啊,我明白你在說什麼了。即使有獨立處理塊的方法,插入會影響所有後續塊的文本又如何呢?那麼有趣的問題。您可能需要考慮僅發送差異並重構瀏覽器中的最終狀態。這對於允許回滾歷史具有很好的附加好處,特別是如果您爲差異事件加蓋了時間戳。 – WhiteFang34 2011-05-27 10:40:45
'CTR'模式對此無能爲力,因爲您應該*永遠不會*重複使用CTR模式流的相同部分來加密不同的數據。 – caf 2011-05-27 12:38:11