One time pad - 純文字和 OTP 之間的長度差異如何處理?
由於必須事先商定 OTP,因此它們可能比明文更長。那麼在這種情況下,加密是如何完成的呢?OTP 是在加密之前被截斷為相同長度的明文還是使用了某種填充 - 它是如何工作的?
我說的是 Alice 和 Bob 交換一本 One Time Pads 的案例。Pad 的每一頁都用於一次明文加密。因此,每個頁面的長度都是固定的,並且總是比它加密的明文長。那麼如何處理長度差異呢?
根據 Dan Boneh 的書,洩露明文長度的方案不能滿足完美安全性的定義。如果我們只使用與明文長度相同的部分 OTP,那麼我們本質上就是在洩漏明文的長度,因為密文與明文的長度相同。那麼這是如何處理的呢?我正在尋找有關如何處理的權威來源?是通過填充嗎?如果是這樣,填充是如何完成的?
在 OTP 中,一方隨機生成一個統一的密鑰,將其寫入一捲紙、一本書、CD 或 USB 中。他們親自與可靠的人將其傳輸到另一端。
OTP 密鑰流顯然是一個長期使用的長流,即可以隨著時間的推移加密許多消息而無需再次使用任何比特。如果存在預定大小以實現完美保密,則必須將長流分成塊。
- OTP 隱藏消息的最大可能長度;
一次性密文是“資訊理論上安全的”,因為密文沒有向密碼分析者提供有關原始消息的資訊(除了消息的最大可能長度)。
讓雙方事先商定消息的最大長度,比如說 $ t $ .
讓密鑰流表示為 $ k_i $ 並且要加密的消息是 $ m $ 有長度 $ \ell $ . 然後使用第一個執行加密 $ \ell $ 消息的一部分。剩下的部分是填充的,這裡
10..0
使用位填充,因為即使用手也很容易應用。$$ \begin{align} c_i &= k_i \oplus m_i , \quad\text{for } 0\leq i < \ell\ c_{\ell} &= k_1 \oplus 1\ c_i &= k_i , \quad\quad\quad;; \text{for } \ell < i < t\ \end{align} $$
One time pad - 純文字和 OTP 之間的長度差異如何處理?
我們有兩個案例;
- OTP 密鑰流更短:在這種情況下,不應重複使用密鑰流發送。否則,會發生兩次(或多次)使用便箋簿,並且 OTP 不再具有資訊安全性並且可能被破壞。
- 一個人如何攻擊一個兩次鍵盤(即一次性鍵盤與密鑰重用)?
- 利用一次性鍵盤鍵重用?可以將消息分成幾部分。但是,這可能會洩漏有關消息長度大於 $ t $ 如果對手觀察到消息流量和兩個連續的消息發送異常。
- OTP 密鑰流更長:
10..
如上的填充。10..0 填充(位填充)
填充只是添加
1
到消息中,然後添加盡可能多的0
s 來填充消息大小,可能沒有。只考慮 16 位長度的固定消息;message1 = 1010110 wiht padded 1010110100000000 message2 = 101011101100101 wiht padded 1010111011001011
unpadding(刪除填充)從消息的末尾開始,如果有的話,刪除尾隨的零,然後是一個 1。
請注意,要使用固定消息,消息的長度必須比固定大小小一位。否則,無法確定填充消息
1010111011001011
是message2: 101011101100101
或1010111011001011
。其他填充物
位填充適用於位,還有其他填充適用於二進制情況;
- ANSI X9.23:基於塊的填充,最後一個塊中剩餘的字節被填充,
00
最後加上填充的長度。- ISO 10126:與上面相同,而不是
00
添加隨機字節- PKCS#5 和 PKCS#7 :只能支持小於 256 字節的消息大小。
- ISO/IEC 7816-4:與位填充相同,
80
添加字節,然後將剩餘字節設置為00
歷史填充:
簡而言之,目前沒有。
- 目前,第一個描述者是 1882 年的 Frank Miller。OTP 由 Gilbert Vernam 在 1919 年獲得專利(美國專利 1,310,719),該專利不包括任何填充。
- 維諾納項目也沒有提到
- 香農也沒有定義