跳轉到內容

密碼學/一次性密碼本

來自華夏公益教科書,開放的書籍,開放的世界

一次性密碼本 (OTP) 是唯一可能無法破解的加密方法。使用 OTP 加密的明文不能在沒有加密金鑰的情況下被檢索。但是,一次性密碼本密碼的使用者必須滿足幾個關鍵條件,否則密碼可能會被破解。

  • 金鑰必須是隨機的,並且由非確定性、不可重複的過程生成。任何由演算法生成的金鑰都將不起作用。OTP 的安全性依賴於金鑰的隨機性。不幸的是,金鑰的隨機性無法得到證明。
  • 金鑰絕不能重複使用。使用相同的金鑰加密不同的訊息,無論多麼微不足道,都會破壞密碼。
  • 金鑰不能落入敵人的手中。這可能看起來很明顯,但這指出了系統的一個弱點,即您必須能夠向密碼本的閱讀者傳輸大量資料。通常,一次性密碼本密碼金鑰是透過外交郵袋傳送的。

典型的一次性密碼本系統的工作原理如下:生成一個新的長隨機金鑰。將明文與金鑰進行異或運算以建立密文。要解密密文,將其與原始金鑰進行異或運算。因此,所呈現的系統是對稱互逆密碼。其他函式(例如,模 n 加法)可用於組合金鑰和明文以產生密文,儘管所得系統可能不是互逆密碼。

如果金鑰是隨機的並且從未重複使用,則 OTP 可以被證明是無法破解的。任何密文都可以透過使用適當的金鑰解密為任何相同長度的訊息。因此,實際的原始訊息無法僅從密文中確定,因為所有可能的明文都是等可能的。這是唯一已知證明此類證明的密碼系統。

OTP 的實現極其簡單。[1]

但是,存在一些侷限性。重複使用金鑰,系統就會變得非常脆弱;它可以用紙筆破解。嘗試使用某種演算法來生成金鑰來構建“一次性密碼本”,那麼您就沒有一次性密碼本,而是一個流密碼。有一些非常安全的流密碼,但那些不瞭解一次性密碼本的人可能無法設計出一個。不幸的是,將弱流密碼宣傳為無法破解的一次性密碼本的情況相當普遍。

此外,即使您擁有一個實現良好的 OTP 系統,並且您的金鑰得到了安全保管,也要考慮一個瞭解部分訊息明文的攻擊者。然後他可以恢復該部分金鑰並用它來加密自己的訊息。如果他可以傳遞自己的訊息而不是您的訊息,那麼您將陷入困境。

首先,為明文選擇一個 OTP

Preshared Random Bits = 1010010010101010111010010000101011110101001110100011
           Plain text = 110101010101010010100
   Length(Plain Text) = 21
              Key(21) = 101001001010101011101

該示例表明,明文並不總是與金鑰材料具有相同的長度。這可以透過以下方法解決

  • 在加密前將終止符附加到明文,並用隨機位終止密文。
  • 在明文前新增長度和序言終止符,並用隨機位終止。

此類訊號系統(以及可能的明文編碼方法)的設計必須確保這些終止符不會被誤認為明文。因此,對於此示例,假定明文已經包含端點/長度訊號。

對於越來越長的明文/金鑰對長度,互相關 越來越接近零。

Key(21)    = 101001001010101011101
Plaintext  = 110101010101010010100
bitwise    |||||||||||||||||||||
cyphertext = 011100011111111001001

對於越來越長的明文/密文對長度,互相關 也越來越接近零。

Preshared Random Bits = 1010010010101010111010010000101011110101001110100011
           cyphertext = 011100011111111001001
           bitwise    |||||||||||||||||||||
           Plain text = 110101010101010010100


精明的讀者可能會注意到,解密器在實際操作中需要知道明文的長度。這是透過將密文作為位元流解密(即在讀取時對每個位元進行異或運算)並在滿足附加到明文的訊號的明文結束規則集之前觀察流來完成的。

手工製作一次性密碼本

[編輯 | 編輯原始碼]
一套完整的英語 Scrabble 磁貼。有關其他語言,請參見Scrabble 字母分佈

一次性密碼本最初是在沒有計算機的情況下製作的,今天仍然可以做到這一點。這個過程可能很繁瑣,但如果做得正確並且密碼本只使用一次,結果就是無法破解的。

製作一次性密碼本需要兩個要素:一種隨機生成字母的方法和一種記錄結果兩個副本的方法。傳統上,後者的做法是使用w:打字機w:複寫紙。然後銷燬複寫紙和w:打字機色帶,因為通常可以從它們中恢復密碼本資料。隨著打字機變得越來越少,在兩張在辦公用品店可以買到的 w:無碳複寫紙 上工整地手寫字母,每組 5 個字母也是可以接受的。每張紙可以被賦予一個序列號或其他唯一的標記。

歷史上,用於手動一次性密碼本的金鑰材料以許多小頁紙的形式進行分發。每頁通常有一系列 5 位陣列,每個數字都是從 0 到 9 中隨機選擇的。[2][3][4][5][6][7][8][9]

一套一次性密碼本包含兩個相同的密碼本。一些作者將這兩個密碼本稱為“兩個相同的原件”,以強調金鑰材料永遠不應被複制。[10]

傳統上,雙向通訊需要兩套密碼本(共 4 本):一個人得到一套的“IN”密碼本,以及另一套的“OUT”密碼本。[11]

每頁通常包含 50 組 5 個隨機十進位制數字 0...9,足以容納一條普通訊息,以及一個唯一的 5 位數“頁碼”。[11][12]

使用轉換表將明文訊息的字母轉換為數字,以及將解碼訊息的數字轉換回字母。[5] 可能最簡單的轉換表是 A=01,B=02,... Z=26,但歷史上通常使用某種跨越棋盤,例如 CT-37c,[13] CT-37w,CT-46,[14] 等等。[15]

一次性密碼本的關鍵材料有時被寫成 50 組 5 個隨機字母 A...Z。[12][16] 鍵以字母形式編寫的密碼本有時被稱為字母一次性密碼本 (LOP)[17][18] 或一次性字母密碼本 (OTLP)。[11]

密碼機(包括一次性密碼本系統)的關鍵材料通常用二進位制程式碼打孔在長而窄的紙帶上——一種“一次性紙帶”OTT。[10][12][19]

字母瓷磚

[edit | edit source]

在羅馬字母表中生成隨機字母的最簡單方法是獲得 26 個相同的物體,每個物體上標記不同的字母。遊戲 w:Scrabble 的瓷磚就可以使用,只要選擇每個字母只有一個即可。製作姓名吊墜手鍊的套件是另一個選擇。您也可以用記號筆在 26 個相同的硬幣上寫下字母。將這些物體放在一個盒子或杯子裡,用力搖晃,然後取出一件物體並記錄下它的字母。將物體放回盒子裡,重複這個過程。

10 面骰子

[edit | edit source]

製作一次性密碼本的另一種方法是使用 w:十面骰子。您可以透過同時擲幾個十面骰子並記錄每擲一次的十進位制數字組來生成隨機數字組——每次擲骰子一個十進位制數字。[11] 這種方法比使用 Scrabble 瓷磚生成隨機程式碼組快得多。明文訊息被轉換為數值,A = 01,B = 02,以此類推。使用 非進位加法,將結果數值透過新增一次性密碼本中的數字進行加密。然後,您可以直接傳輸這些數字組,或者使用跨越棋盤將這些數字轉換回字母並傳輸結果。

6 面骰子

[edit | edit source]

製作一次性密碼本的另一種方法是使用 6 面骰子。[20]

可以使用 6 面骰子生成隨機十進位制數字(以建立傳統的十進位制一次性密碼本)。[11]

如果將訊息轉換為兩位數的 六進位制數字,那麼普通的 六面骰子 可以用來在一次性密碼本中生成隨機數字。密碼本中的數字將對明文訊息中的數字進行模 6 加法運算(同樣沒有進位),並從密文中進行模 6 減法運算以解密。例如

將訊息轉換為六進位制的表格
PT 0 1 2 3 4 5 6 7 8 9
CT 00 01 02 03 04 05 10 11 12 13
PT A B C D E F G H I J K L M
CT 14 15 20 21 22 23 24 25 30 31 32 33 34
PT N O P Q R S T U V W X Y Z
CT 35 40 41 42 43 44 45 50 51 52 53 54 55
將訊息轉換為六進位制的表格
左位
x0 x1 x2 x3 x4 x5
0x 0 1 2 3 4 5
1x 6 7 8 9 A B
2x C D E F G H
3x I J K L M N
4x O P Q R S T
5x U V W X Y Z

使用此表,“Wikipedia” 將轉換為 52 30 32 30 41 22 21 30 14。如果密碼本數字為 42 26 21 35 32 34 22 62 43,則密文將為 34 50 53 05 13 50 43 32 51。(請注意,6 模 6 等於 0)。

金鑰交換

[edit | edit source]

為了使用此演算法,每一方都必須擁有相同的隨機金鑰。這通常需要雙方親自見面或使用可信的信使。有時會提出其他方法,例如讓雙方都擁有能夠生成相同半隨機數字的相同裝置,但是這些方法本質上是 w:流密碼,並不受一次性密碼本安全證明的保護。

進一步閱讀

[edit | edit source]


  • "視覺密碼學" 通常使用一次性密碼本。可以使用特殊的偏振濾光片排列來實現 XOR 操作。
  • "什麼是視覺密碼學" 使用二進位制一次性密碼本。可以使用特殊的點模式來實現 XOR 操作。
華夏公益教科書