Classical-Cipher

置換密碼的安全性

  • April 16, 2014

我想了解排列密碼的安全性。

我特別想了解以下具體設置:如果字母表是大號={0,1,…,255} $ L = {0,1,\dots , 255} $ 和σ1,σ2,…,σn $ \sigma_1, \sigma_2, \dots, \sigma_n $ 是排列大號 $ L $ ,那麼我們可以通過加密明文中的第一個字元來創建一個密碼σ1(σ2(…σn(一種1))) $ \sigma_1(\sigma_2(\dots \sigma_n(a_1))) $ . 然後我們可以(就像使用 Enigma 機器一樣)旋轉σ1 $ \sigma_1 $ . 例如,如果 σ1=(012…254255551407…3482)

$$ \sigma_1 = \pmatrix{0 & 1 & 2 & \dots & 254 & 255 \ 55 & 140 & 7 & \dots & 34 & 82} $$ 我們旋轉,這樣σ1 $ \sigma_1 $ 變得 (012…2542551407…8255)$$ \pmatrix{0 & 1 & 2 & \dots & 254 & 255 \ 140 & 7 & &\dots & 82 & 55} $$ 當我們旋轉σ1 $ \sigma_1 $ 我們旋轉 255 次σ2 $ \sigma_2 $ . 這意味著密鑰基本上由排列組成σ1,…,σn $ \sigma_1, \dots, \sigma_n $ .

我的一般問題是:這個密碼有多安全?我了解安全性將取決於n $ n $ ,所以如果這個問題太難回答,我可以假設n $ n $ 是“足夠大”。我也明白這將取決於一個人是否多次重複使用相同的密鑰,所以

另一個問題是:安全性如何取決於是否重用密鑰?

(足夠大的可以選擇n $ n $ 以便255n $ 255^n $ 大於密文的大小。)

( 我不是想推出自己的加密貨幣。我保證永遠不會將它用於任何嚴肅的事情,除了嘗試學習 $ {\tiny\text{ I am not trying to roll my own crypto. I promise never to use this for anything serious besides trying to learn}} $ )

這個密碼有多安全?

乍一看,不是很。它似乎容易受到純密文攻擊,例如,即使假設攻擊者最初只知道明文是“ASCII 英文”,他對(σ1,σ2,…,σn) $ (\sigma_1, \sigma_2, …, \sigma_n) $ 排列。

既然是學習,我就不詳述了。這是我開始的方式:

  • “ASCII 英語”大約是 20% 的空格;也就是說,20% 的明文是完全相同的字節值。
  • 在單代內(其中“代”表示“在連續 255 次內,我們僅移動σ1 $ \sigma_1 $ ),σ2(σ3(…σn(磷))…) $ \sigma_2(\sigma_3(…\sigma_n(P))…) $ 將是一個固定排列;因此,其結果將有 20% 的時間是相同的值。

我們如何使用它來嘗試重建σ1 $ \sigma_1 $ (最多循環移位)?我們如何關聯來自不同世代的數據(提示:如果我們只是假設σ2(σ3(…σn(磷))…) $ \sigma_2(\sigma_3(…\sigma_n(P))…) $ 不同世代的排列是獨立的)?一旦我們重建σ1 $ \sigma_1 $ ,我們怎樣才能立即恢復明文呢?

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