異或隨機字節流是一種隱藏文件的安全方法嗎?
很久以前,我創建了一個非常簡單的程序,它使用 C 庫的 rand 方法生成字節以與文件的字節進行異或。這是一種使文件不可讀的可逆方法(只需再次執行它)。
在我的簡單實現中,我沒有更改種子,因此它總是創建相同的“隨機”流,但如果我將種子作為命令行參數給出,這是否是隱藏文件的合理方法?
這個問題與任何特定的偽隨機數生成器的優點無關,只是假設一個好的。關鍵是:它是否使用非常簡單的算法提供了聲音遮蔽?
用相同大小的隨機流對純文字進行異或運算是一種安全的加密方式。流密碼以這種方式工作。
您設計中的問題是隨機源。如果隨機流不具有人們期望的安全屬性,則係統是不安全的。在您的實現中,種子具有正常流密碼的密鑰(可能還有初始化值)的作用。
如果有人可以使用您的方法加密某些內容(或恢復一對明文/密文),他將能夠解密使用相同密鑰生成的每個過去/現在/未來加密。僅適用於比已知消息短的消息(但如果文件是英文文本,則可以猜測剩餘部分)。
如果這些東西足以掩蓋文件,很大程度上取決於您為誰掩蓋它。正如上一個問題所指出的,仍然有不少人對位和字節有足夠的了解。如果您的目標是不太精通技術的人,那麼基本上任何東西都足夠了(只要它在預設應用程序或文本編輯器中顯示不多,您就安全了)。
在這種情況下,種子可以看作是算法創建密鑰流的密鑰。現在你假設一個“好”的偽隨機數生成器(PRNG)。這是一種加密形式,因此我們會將其轉換為加密安全 PRNG 或 CSPRNG。如果 PRNG 不是 CSPRNG,我們可以檢索有關狀態的資訊並反轉該過程。如果種子太小(例如,小於 64 位或更小),那麼我們可能能夠在足夠的 CPU 時間的情況下對其進行暴力破解。
最後,如果你重複一個關鍵流,你就會迷失方向。文件包含已知明文(例如 JPEG 標頭)的可能性非常高。在這種情況下,密鑰流被洩露,任何其他資訊都可以直接解密。否則頻率分析和嬰兒床拖動將很快揭示具有相同結果的鍵流。任何加密貨幣學生都會有這樣的程序可供他們使用(這通常是第一個程式任務)。
基本上你在這裡發明了你自己的流密碼。使用一個眾所周知的(帶有隨機 IV 的 AES-CTR)可能比您遇到的所有麻煩*更容易。*或者乾脆使用 PGP 進行文件加密。