用於大型更改文件的 One Time Pad
我想知道如果我執行以下操作會對安全造成什麼影響。如果我有一個用 OTP 加密的大文件,並且只想更改明文中的幾個字節。如果我只為變化的字節生成一個新的 OTP,我會得到什麼安全漏洞,讓舊的 OTP 保持原樣並替換新的 OTP,並且每次我對明文進行更改時都這樣做。
要清楚:
- 明文 p;
- 一次性密碼
- 密文c
從…開始…
p = 1111 1111 1111 1111 o = 0001 0001 0001 0001 c = 1110 1110 1110 1110
更改明文…
p = 1111 1111 1111 __1010__
為最後 4 位 0101 生成新的 OTP,並將其替換為“舊”OTP……
o = 0001 0001 0001 __0101__ c = 1110 1110 1110 1111
這會導致什麼問題(如果有的話)?
我知道如果我想使用 OTP,我必須生成一個孔新焊盤。但是如果我有一個巨大的文件(多個 GB),如果我只想更改幾個字節,就很難生成這種大小的新填充。
到目前為止,我還沒有找到有關此主題的材料,並且分析針對某些密碼應用程序的攻擊是一項艱鉅的任務,但也許有人已經閱讀了有關該 OTP 應用程序以及為什麼不應該這樣做的文章。
如果您只使用特定的 OTP 塊來加密一個明文塊,則無法解密它。
但是,通過您的方法,任何查看文件多個版本的人都能夠分辨出哪些部分發生了變化。例如,如果文件包含使用者儲存的秘密消息,它會洩露每條添加的消息的長度。也許這是個問題,也許不是。取決於您的應用程序。
您在這里處於中間道路,主要問題是:您想隱藏什麼?攻擊者在更改之前/之後可以看到什麼?
最不安全的一個是:只需對密文上的位變化進行異或運算即可。資訊論性質仍然成立:如果攻擊者恰好有 $ 0.5 $ 猜測一個位的機會,並用 XOR 1 更改,他仍然有一個 $ 0.5 $ 猜對的機會。但是攻擊者將能夠看到你改變它的可能性 $ 1 $ .
你的方式是中間方式:如果密文位沒有改變( $ 0.5 $ 機會),攻擊者不會意識到該位被翻轉。
更改整個 OTP:好吧,攻擊者無法再知道哪些位被翻轉,但他知道發生了變化。
密文中什麼都不改變:不要改變密文中的位,只需保留它並翻轉明文和填充中的位。結果是攻擊者無法知道您更改了某些內容。
真正的問題是:你為什麼還要使用 OTP?除了資訊論的安全性之外,它還有非常可怕的特性。OTP 是一種理論工具,但對實際實踐幾乎沒有用處。幾個原因:它無法確保完整性,除非您使用一些重度擴展。如果攻擊者可以翻轉位,他會自動翻轉明文位。該方案只有在整個焊盤被安全保存並且不再使用時才是安全的。只要保存明文本身。然後是隨機性:只有真正的隨機性才能提供資訊理論上的安全性,這在所需數量上並不容易實現(多 GB 的真正隨機性……不會在任何普通電腦上發生)。
編輯:
尤其是因為您正在執行某種文件儲存:您在某處擁有墊子*,*並且您必須對其保密。它與明文本身一樣長。當您想要訪問文件時,您需要有一種訪問它的方法。為什麼不將明文保存在安全儲存中呢?