Modular-Arithmetic

One-Time Pad:大於字母大小的模數大小如何消除完美的保密性?

  • October 5, 2019

如果我的明文字母表是 {0,1,2} 有三個字元,我明白為什麼我不能使用小於 3 的模數(解密不起作用)。

我的密鑰有 100 個不同的值,{0,1,2 …..99}。所以密鑰長度不是問題。

我不明白為什麼我不能使用大於三的模數。為什麼我不能使用大於 3 的模數?

我問是因為模數也限制了密文中看到的上限值。

因此,如果我的模數 = 我的明文空間,我的字母表的大小很容易被攻擊者知道。

那麼,在我的範例中,明文空間 = 3,為什麼不使用 mod10 數學而不是 mod3 數學呢?如果我使用 mod10 數學,我的密文值可以是 0 到 9 之間的任何值,而不僅僅是 0 到 2。

這對我來說似乎是一個優勢,因為密文揭示了模數,因此揭示了我可能的字母大小的上限,但沒有揭示直到該邊界的確切字母大小。

因此,除非使用大於字母大小的模數以某種方式失去“完美保密”,否則我應該始終使用不等於我的明文大小但高於該值的模數。

我正在尋找我推理中的硬缺陷(為什麼我不能這樣做)或弱點(為什麼我不應該這樣做)。

編輯 9 月 13 日,以澄清問題:

我的字母表只有三個字元:{0,1,2}。我可以發送給我的同志的唯一秘密資訊只能由這三個字元的組合組成。

物理(印刷)一次性便箋本包含 100,000 個字元,它是真正隨機生成的。它由大寫字母(26 個值)、小寫字母(26 個值)和數字 0 到 9(10 個值)組成。因此,我的鍵空間是 62 個字元,由數值 {0,1,2……59,60,61} 表示。

所以物理墊有 100,000 個字元長,值從 0 到 61,真正隨機生成。

所以:

我知道如果我使用模數數學,我的模數必須至少等於我的字母大小。就我而言,我的字母大小是三個字元,所以我的明文空間是 3。所以,我必須至少使用 mod 3,而不是更少(如果我使用的模數小於字母大小,解密將不起作用,因為無論鍵,我的字母表的最後一個字元將始終解碼為與我的字母表的第一個字元相同)。

所以我的問題是,為什麼不使用 mod 10 而不是 mod 3?

因為:如果我使用等於我的明文大小的模數,那麼我的密文的最高可能值將始終等於我的明文/字母大小。

所以你看,我的密文可以揭示我的字母大小的上限。

但是如果我(任意)使用 mod 30,那麼我的密文(超時,數百條消息之後)可以顯示比我的實際字母大小高得多的上限,在模數為 30 的情況下,密文可以顯示最大值30 個。因此攻擊者無法知道我的字母表只有 3 個字元長;他能知道的最好的事情是我的字母表最多可以有 30 個字元。

這個想法是字母大小是值得隱藏的關鍵資訊。

如果密文顯示字母大小,這對密碼分析者來說是一個優勢。

我希望這個編輯能讓我的問題更清楚。


當將一次性密本描述為電腦密時,如果使用模組化數學,系統很容易被破解,因為在任何情況下,密文都會顯示模數。當它自己的密文揭示了它的模數時,它怎麼能繼續被呈現為計算安全呢?當一次性密文使用模數運算時,密文會顯示模數,從而為對手的攻擊打開一個向量(因為對手知道模數)。一旦知道了模數(通過觀察密文),破解系統就變得微不足道了。

您提出的是更大的密鑰空間,因此密文字母表比明文字母表更大。這很好,很容易證明為什麼這很好。

假設明文字母表、密鑰空間和密文字母表大小相同 $ n $ : 一個正常的OTP。在這種情況下,除了字母表和明文大小之外,不會洩露任何有關明文的資訊。如果所有消息只包含第一個,這也是正確的 $ x $ 字母表的字元。如果攻擊者甚至可以區分這個事實,那麼它就不是 OTP。但是只有第一個消息 $ x $ 字元與使用純文字字母表沒有區別 $ x $ 人物。

密鑰空間確實需要與模數一樣大。試想一下,您有一條僅包含字母“a”的純文字消息。那麼很明顯,如果密鑰空間小於模數,甚至無法達到某些密文字元。如果密鑰空間大於模數,那麼除非密鑰空間是模數的倍數,否則您對密文有偏見。如果它是一個倍數,那麼你有等效的鍵值。


知道大小或模數會威脅機密性是一種誤解。消息的大小和字母的大小都不需要保密。只有加密值的內容需要保護。如果您想保持明文的字母或大小未知,那麼您需要在一次性填充之外採取措施,例如通過在字母中添加更多符號或預先填充明文。

有三個相關的數字:明文字母的大小 $ p $ , 鍵字母的大小 $ k $ 和模數 $ m $ . 還有密文字母表的大小,但根據定義,它等於模數。

讓我們用一些明確的例子來說明這一點。


在你的例子中 $ p = 3 $ , $ k = 62 $ 你正在考慮 $ m = 3 $ 和 $ m = 10 $ . 這兩個都是不安全的。要了解原因,讓我們簡化為 $ p=3 $ , $ k=5 $ 和 $ m = 3 $ ,所以選項就更少了。可能的密文不太可能:

$ 0 $ 將加密為 $ k \bmod 3 $ ,即 $ 0 $ 如果 $ k=0 $ 或者 $ 3 $ , $ 1 $ 如果 $ k=1 $ 或者 $ 4 $ 和 $ 2 $ 當且僅當 $ k=3 $ .

所以 $ 2 $ 如果您要加密明文零,則不太可能是密文。同樣,如果您仔細研究這些選項,您會發現每個密文值不太可能對應一個明文值。這意味著對手看到密文 $ 2 $ 知道明文更有可能是 $ 1 $ 或者 $ 2 $ ,所以你缺乏完美的保密性。

價值 $ k=62, m=3 $ 和 $ k=62, m=10 $ 同樣不安全,因為密鑰不是模數的倍數。如果 $ k = lm $ , 在哪裡 $ l $ 是一個整數,那麼它是安全的,但有效的密鑰字母大小只是 $ m $ . 例如與 $ k=6, m=3 $ 密鑰是否無關緊要 $ 1 $ 或者 $ 4 $ – 對於任何明文,您都會得到相同的結果。

所以只有使用才有意義 $ k=m $ .


現在最初的問題是關於模數是否可以大於明文字母表,答案是肯定的,就像 Maarten Bodewes 已經解釋的那樣。什麼時候 $ k=m $ 即使您只使用較小的明文,密文也同樣可能。

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