One-Time-Pad

One time pad - 純文字和 OTP 之間的長度差異如何處理?

  • November 6, 2020

由於必須事先商定 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 之間的長度差異如何處理?

我們有兩個案例;

  1. OTP 密鑰流更短:在這種情況下,不應重複使用密鑰流發送。否則,會發生兩次(或多次)使用便箋簿,並且 OTP 不再具有資訊安全性並且可能被破壞。
  1. OTP 密鑰流更長:10..如上的填充。

10..0 填充(位填充

填充只是添加1到消息中,然後添加盡可能多的0s 來填充消息大小,可能沒有。只考慮 16 位長度的固定消息;

message1 = 1010110          wiht padded 1010110100000000
message2 = 101011101100101  wiht padded 1010111011001011

unpadding(刪除填充)從消息的末尾開始,如果有的話,刪除尾隨的零,然後是一個 1。

請注意,要使用固定消息,消息的長度必須比固定大小小一位。否則,無法確定填充消息1010111011001011message2: 1010111011001011010111011001011

其他填充物

位填充適用於位,還有其他填充適用於二進制情況;

  • 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),該專利不包括任何填充。
  • 維諾納項目也沒有提到
  • 香農也沒有定義

引用自:https://crypto.stackexchange.com/questions/85942