如何創建預先確定的加密結果?
- 我希望我的加密結果是星條旗的歌詞。
- 例如,我要加密的原始文本是當地披薩店的菜單。
- 我知道我想要我的密碼是什麼。
如果我想要求特定的密碼進行解密,我該如何確定如何執行此操作?顯然,我不想要像 ROT 這樣簡單的東西。我想使用級聯密碼來實現這一點,比如 AES、Serpent 或 Twofish。
如果我們添加三個約束,那麼所問的內容是不可能的:
- 有一種解密方法,只給出加密結果和密碼,輸出原始文本。
- 加密/解密方法對特定輸入(本地披薩店的特定菜單)或所需輸出(星條旗的歌詞)不是高度特定的。
- 在“我希望我的加密結果是星條旗的歌詞”中,意思是完整的加密結果完全等於規定的數據渲染為星條旗的歌詞。
證明:假設在這三個約束條件下所要求的內容是可能的。使用相同的密碼,以相同的假設方法將菜單的變體加密到當地的比薩店,將規定的數據呈現為星條旗的歌詞。1的解密程序無法決定它應該輸出兩個菜單中的哪一個。
如果我們刪除任何這些約束,那麼所要求的就很容易了。
論據 1:考慮一個解密程序,它使用線上伺服器的幫助來檢索儲存在那裡的原始文本,使用所需的輸出作為密鑰。
論據 2:考慮一個程序,只要原始文本是本地披薩店的特定菜單,就將歌詞輸出到星條旗,否則作為普通加密程序執行;添加一些簡單的技術細節。
論證 3:考慮一個加密程序,它接受具有所需輸出的文本文件作為附加輸入;並輸出一個 PDF 或 JPEG 文件,該文件顯示所需輸出的文本,但在註釋欄位(不是由 PDF 或 JPEG 查看器呈現)中包含根據某些標準加密方法在密碼片語下加密原始文本的結果. 解密程序將首先提取註釋欄位,然後使用標準解密方法。我們可以通過將密碼片語替換為密碼片語的 SHA-256 雜湊,然後是 PDF 或 JPEG 輸出文件減去其註釋欄位來完善這種錯覺。
有無數種方法可以解決要求 3;有些人甚至使用了標準方法進行了詳細修改。例如,使用 AES-CBC,很容易專門選擇一個 IV,使得給定的 16 字節明文塊在給定密鑰下加密為給定的 16 字節密文塊,而無需更改解密程序。顯然, Angecryption中的想法就是這樣開始的。
熵參數限制了我們在滿足要求 1 和 2 的同時可以走多遠:無論我們在解決要求 3 方面有多聰明,密文都必須至少與我們可以無損壓縮的組合一樣大輸入和期望的輸出,減去密碼中的熵。
由於您標記了一次性墊,我會提到這很容易用 OTP 完成。只需選擇將明文字母映射到所需密文字母的密鑰字母即可。
作為一個簡單的例子,這是我使用 NSA 的 DIANA 互惠 OTP 系統用鉛筆和紙做的一個小例子。我跳過了空格以使其更容易。
密文:OHSAYCANYOUSEE
關鍵字:ZSPSXUKYILMTRD
這是我使用的表
要解密它,請查看轉換錶,在表的左側找到密鑰 ketter,然後在其對應的行中找到密文字母。它下面的字母是明文。對每個重複,您將獲得整個純文字消息。
如果您想使用特定的密碼片語,您可以使用該密碼片語作為填充來加密密鑰,前提是它的長度相同。解密將是
- 使用密碼片語作為密碼解密密鑰
- 使用密鑰解密消息
請注意,OTP 系統的安全保證需要隨機密鑰,因此如果您的密碼不是隨機的,它們將不適用,我也不相信這只是一個有趣的玩具,可以讓大多數臨時攻擊者遠離。