Felix密碼的安全性
我剛找到這個鉛筆和紙密碼“Felix”,我想知道它有多安全?
編輯
來自http://web.archive.org/web/20110825142054/http://topcat.hypermart.net/papers/felix.txt
費利克斯紙筆密碼
一、概要
Felix 是一種“紙筆密碼”,為因果使用提供了相對較好的安全性。與現代編碼方案不同,現代編碼方案至少需要一台電腦才能發揮實際作用;Felix 只要求您遵循三個基本規則(如下所述)。如果您對密碼學感興趣,Felix 密碼是一個很好的起點。這種密碼通常可以在幾分鐘內被理解和應用,即使是兒童。很簡單,這意味著對於您和我這樣的普通人來說,它很容易實現。(i)
Felix 密碼是 Bifid 密碼的擴展形式,最初由 Felix Marie Delastelle 於 1901 年設計。本作品的作者對 Delastelle 先生在密碼學領域的成就表示敬意。(二/三)
二、嬰兒床
首先,通過隨機分散所有 26 個字母和 0-9 的十位數字,創建一個嬰兒床: (iv)
1 2 3 4 5 6 1 8 P 3 D 1 N 2 L T 4 O A H 3 7 K B C 5 Z 4 J U 6 W G M 5 X S V I R 2 6 9 E Y 0 F Q
您會注意到嬰兒床中的每個字元都由最左側列和最頂部行的座標表示。因此,字元
0
(零)位於 row6
和 column4
中。(五)三、編碼消息
從左到右,找到嬰兒床中資訊(圖 3.1)中的每個字元,並在資訊下方垂直寫出其座標(圖 3.2):
圖 3.1:
K N O W L E D G E I S P O W E R
圖 3.2:
3 1 2 4 2 6 1 4 6 5 5 1 2 4 6 5 2 6 4 4 1 2 4 5 2 4 2 2 4 4 2 5
接下來,將每個數字連接到右側的前一個數字(圖 3.3),並將每一行連接到上面的上一行(圖 3.4):
圖 3.3:
31 24 26 14 65 51 24 65 26 44 12 45 24 22 44 25
圖 3.4:
31 24 26 14 65 51 24 65 26 44 12 45 24 22 44 25
產生的數字串(圖 3.4),然後成對讀取,從左到右水平工作,創建第二個座標序列(圖 3.5),然後通過它們各自的座標從嬰兒床轉換回字元(圖 3.6) :
圖 3.5:
31 24 26 14 65 51 24 65 26 44 12 45 24 22 44 25
圖 3.6:
7 O H D F X O F H W P G O T W A
消息現在已完全編碼,可以發送了。(六)
四。解碼消息
要解碼消息,只需將過程顛倒過來……從左到右工作;將每個字元轉換為其對應的座標(圖 4.1),橫寫(圖 4.2):
圖 4.1:
7 O H D F X O F H W P G O T W A
圖 4.2:
31 24 26 14 65 51 24 65 26 44 12 45 24 22 44 25
接下來,將一串數字分成相等的兩行,將第二行放在第一行的下方(圖 4.3)。垂直讀取頂行中的數字以及底行中的數字,使用這些座標來定位嬰兒床中的字元並將每個字元寫在其相應座標下方(圖 4.4):
圖 4.3:
3 1 2 4 2 6 1 4 6 5 5 1 2 4 6 5 2 6 4 4 1 2 4 5 2 4 2 2 4 4 2 5
圖 4.4:
K N O W L E D G E I S P O W E R
該消息現在已完全解碼,並且清晰可讀。
五、總結
編碼:
- 將明文垂直轉換為座標
- 將前面的數字連接成一行
- 將座標水平轉換為密文
解碼(只需反轉過程):
- 將密文水平轉換為座標
- 將線分成兩個相等的部分(底部的第二半)
- 將座標垂直轉換回純文字
筆記
一世。密碼是以隱藏其內容的方式編寫的消息。編碼的消息變得不可讀。解碼後的消息變得清晰可讀。
ii. Felix Marie Delastelle (1840-1902) 是一位法國人,他最著名的是設計了包括雙歧密碼在內的多種多圖替換密碼系統。在職業軍人、外交官和學術界對該學科做出重大貢獻的時代,德拉斯特爾作為一名業餘密碼學家是不尋常的。
iii. Felix 密碼基於 Bifid 密碼,但重新設計了更大的 6x6 嬰兒床,而不是更有限的 5x5 嬰兒床 Bifid 使用。Bifid 密碼僅引用 25 個字元(通常將“I”和“J”組合在一起),而 Felix 密碼使用英文字母表的所有 26 個字母,以及所有 0 到 9 的十個數字。
iv. 嬰兒床(不包括座標)是一個 36 個字元的 6x6 網格。使用此密碼時,請務必創建自己的私人嬰兒床。本文件中使用的嬰兒床將被任何數量的人閱讀…
v. 座標(總是先按行讀取,然後按列讀取)固定在最左邊的列和最上面的行。行(水平軸)和列(垂直軸)的交點從嬰兒床產生單個字元。標註座標時,它們不必是本文件中顯示的數字,但是,所有標籤在行內和列內必須是唯一的。
六。要對給定消息進行編碼/解碼,發送者和接收者都需要同一嬰兒床的副本及其座標。但請記住,切勿將嬰兒床的詳細資訊透露給信任方以外的任何人。
關於
版權所有 2007 Top Cat/Michael S. Sanders。版權所有。本文件可自由轉載,但未經作者同意不得更改。
topcat.hypermart.net
eof
密碼詳細資訊
密碼類型
Felix 密碼可以分解為兩種算法:替換密碼和字元對置換。如果我們垂直而不是水平地閱讀圖 3.3 中的數字對,我們將獲得替換。由於排列是固定的,它沒有密碼價值。因此,我們將只分析替換密碼。
塊大小
替換密碼具有密文中的每一對字元僅依賴於明文中對應的字元對的性質。這意味著密碼的塊大小是兩個字元(位)。 $ \log(36^2)\approx10.3 $
操作模式
密碼以完全相同的方式轉換每對字元,即操作模式是電子密碼本(ECB)。
密鑰大小
你一共可以建造不同的鍵(表),但分配給每一行和對應列的符號是任意的,只要它們匹配。因此,我們可以以任何可能的方式對分配的數字重新排序——或者交換行和,然後交換列和以獲得等效鍵。 $ 36! $ $ 1,2,3,4,5,6 $ [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] $ i $ $ j $ $ i $ $ j $
這意味著有效密鑰大小為位。 $ \log(\frac{36!}{6!})\approx128.6 $
弱點
歐洲央行模式
一個直接的問題是給定的字元對總是被轉換成相同的字元對。
如果明文的一部分是已知的(例如,它以開頭),那麼您已經知道密文的哪些字元對對應和。 $ HELLO $ $ HE $ $ LL $
對合
替換密碼是一種對合,這意味著加密和解密是完全相同的功能。
在我們的例子中,明文對應的密文是。也就是說,明文對應的密文是。 $ LL $ $ T8 $ $ T8 $ $ LL $
固定點
替換密碼具有不尋常數量的固定點(轉換為相同字元對的字元對)。
字元對是一個不動點當且僅當的行重合。這意味著對於每個,有 6 個使得是一個不動點,總共給出 216 個不動點,這是所有可能的字元對 $ \alpha\beta $ [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] $ \alpha $ $ \beta $ $ \alpha $ $ \beta $ $ \alpha\beta $ [數學處理錯誤] $ \frac{1}{6} $
由於很容易確定密文中的哪些字元對不是固定點(如果語言已知),這可能足以猜測明文的部分內容。
小塊大小
由於塊大小較小,因此可以進行簡單的選擇明文攻擊。
對明文進行加密就足以解密任何密文。不需要重建密鑰表。 $ AA\ AB\ AC\ \dots BA\ BB\ BC\ \dots $
已知明文攻擊
由於密碼的以下弱點,可能會發生已知明文攻擊:
- 每對已知的不同字元都會洩露一些關於密鑰的資訊。
例如,被轉換為。這意味著和共享一行,和共享一列。 $ KN $ $ 7H $ [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] $ K $ $ 7 $ $ N $ $ H $
如果字元對是一個固定點(例如,被轉換為),如前所述,我們可以推斷出的行重合。 $ OW $ $ OW $ [數學處理錯誤] [數學處理錯誤] $ O $ $ W $
- 反轉的字元對會提供更多關於明文的資訊。
例如,轉換為,而轉換為。這意味著字元和(以及字元和)是對角相對的,即一個人的行與另一個人的列重合。 $ RE $ $ 2S $ $ ER $ $ FA $ [數學處理錯誤] $ 2 $ $ F $ $ S $ [數學處理錯誤] $ A $
- 重複的字母會洩露更多關於密鑰的資訊。
例如,被轉換為。這意味著和都位於鍵的對角線上。 $ LL $ $ T8 $ [數學處理錯誤] [數學處理錯誤] $ T $ $ 8 $
由於已知明文的每一位都會稍微削弱密鑰,因此在已知足夠的明文的情況下,電腦可以測試所有可能的密鑰,直到找到正確解密密文的密鑰。
假設有人使用您的範例中的密鑰向您發送消息,其對應的密文如下:
HE LL OI LL SE CU RE KN OW LE DG EI SP OW ER HE T8 AW T8 2T CU 2S 7H OW HP DG FO XT OW FA
我們了解到以下情況是正確的:
On the diagonal: T,8 Characters that share a row: A,O E,F H,L,T K,7 R,S,X,2 Characters that share a column: A,R E,P,S,T H,N I,O,W L,8 Column of the first is row of the second: C,U D,G H,E O,W Diagonally opposed: A,S F,2
由於等效鍵,我們可以將和的位置固定在對角線上的任意位置。這確定了的位置(的行,的列),的行(我們可以修復列)和的列(2個可能的位置,因為如果它不是列,我們可以修復行的),這反過來又確定了的位置(行由確定,列由確定)。[Math Processing Error][Math Processing Error][Math Processing Error][Math Processing Error] $ T $ $ 8 $ $ L $ $ T $ $ 8 $ $ H $ $ N $ $ H $ [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] $ E $ $ H $ $ T $
$ F $ 位於同一行。由於和彼此對角相對,不能位於對角線上,的位置將確定的位置。由於位於的列,的位置也將確定和(對角線相對)和(列)的位置。 $ E $ [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] $ F $ $ 2 $ $ F $ $ F $ $ 2 $ $ S $ [數學處理錯誤] [數學處理錯誤] $ 2 $ $ T $ $ F $ [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] $ S $ $ A $ $ R $ $ S $ $ A $
- 如果和在同一行,我們可以固定的列。 $ E $ $ N $ $ F $
- 否則,可能位於的行重合的列或其餘兩列中的任何其他列(我們可以修復它)。但是如果的列上,和將位於的行上,因此,將與對角。由於這不是真的,因此、、、和有 2 個可能的位置。 $ E $ [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] $ 8 $ $ N $ $ F $ $ 8 $ $ 2 $ $ S $ $ 8 $ [數學處理錯誤] [數學處理錯誤] $ S $ $ L $ $ F $ $ 2 $ $ S $ $ A $ $ R $
到目前為止,我們只有 3 個不同的部分鍵:
[數學處理錯誤]$$ \left.\begin{array}{ccccccc} &\alpha&\beta&\gamma&\delta&\varepsilon&\zeta\\alpha&T&L&H&A\\beta&&8\\gamma&E&N&&F\\delta&S&&2&R\\varepsilon\\zeta& \end{array}\right| \left|\begin{array}{ccccccc} &\alpha&\beta&\gamma&\delta&\varepsilon&\zeta\\alpha&T&L&H&A\\beta&&8\\gamma&E&&&F\\delta&S&N&2&R\\varepsilon\\zeta& \end{array}\right| \left|\begin{array}{ccccccc} &\alpha&\beta&\gamma&\delta&\varepsilon&\zeta\\alpha&T&L&H&&A\\beta&&8\\gamma&E&&&&F\\delta&&N\\varepsilon&S&&2&&R\\zeta& \end{array}\right. $$ 由於位於同一列的成對角線,和位於同一行。這確定了在前兩種情況下的位置,並在最後一種情況下為留下 2 個可能的位置。由於位於同一列,並且的列重合,因此這確定了的位置。到目前為止,我們只剩下 4 個不同的部分鍵。 $ A $ $ S $ $ T $ [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] $ A $ $ O $ $ T $ $ O $ $ O $ $ W $ $ O $ $ W $ $ O $ $ W $
有 2 個不同的可能位置;在剩下的 3 個部分鍵中,有 3 個。到目前為止,這給我們留下了 11 個不同的部分鍵。[Math Processing Error] $ X $
有 3 個不同的位置有4個不同的位置。種方式分配了 20 個字元(所有使用的字元,除了、、、、和) 。[Math Processing Error][Math Processing Error] $ P $ $ I $ $ C $ $ D $ [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] [數學處理錯誤] $ G $ $ K $ $ U $ $ 7 $ $ 132 $
(所有剩餘的)留下了 16 個可能的位置,(最多14 個,對於最多12 個,最多 6 個,總共小於可能的方式來分配剩餘的 6 個字元。請注意,如果我們知道更多明文,這個數字會變得更小。 $ K $ $ 7 $ $ K $ $ C $ $ U $ $ D $ $ G $ $ 483,840 $
這給出了總共少於種不同方式來分配所有使用的字元1,這意味著對所有這些可能的鍵的暴力攻擊只需要嘗試少於鍵。電腦很快就能做到這一點。 $ 63,866,880 $ $ 2^{26} $
請注意,我們僅使用 13 個不同的字元對就實現了這種攻擊,即位的明文,這僅略大於有效密鑰大小。 $ \log(36^{26})\approx134.4 $
選擇明文攻擊
使用與已知明文攻擊相同的想法,可以執行選擇明文攻擊,只需進行可忽略的工作並加密不超過 35 個字元對 (位明文) 並且可能只有 29 個字元對(位的明文)。 $ \log(36^{70})\approx361.9 $ $ \log(36^{58})\approx299.9 $
對應於例如()的密文完全確定了和在對角線上的位置的函式中的位置。 $ AA $ $ TR $ $ A $ $ T $ $ R $
因此,加密(35 個字元對)足以重建密鑰表(的位置是唯一剩下的一個)。如果我們已經知道字元位於對角線上,那麼加密是不必要的。如果對角線的字元在任何關聯對被加密之前已知,我們將只加密 29 個字元對。 $ AA\ BB\ CC\ \dots\ 88 $ $ 9 $ $ \alpha $ $ \alpha\alpha $
由於等效鍵,對角線的元素可以隨意固定,重建表很簡單。
1未使用字元的位置不影響解密。如果在以後的消息中使用它們,則嘗試全部個可能的排列。 $ 10! = 3,628,800 < 2^{22} $