獲得轉調鍵的反轉
我是安全方面的新手,我對轉置密碼學的密鑰有一些疑問。
如果我獲得了轉置密碼的編碼密鑰,我如何獲得它的解碼密鑰?我嘗試使用Google搜尋,但找不到任何計算步驟。例如,在幾個與加密貨幣相關的網站上有這些漂亮的工具,當我進入時,
4 3 1 6 2 5
我會得到3 5 2 1 6 4
……但為什麼以及如何?
密鑰是通過反向執行加密步驟獲得的。
例如,讓我們用那個
4 3 1 6 2 5
密鑰加密單詞“United”。第一步是取第 4 個字母,一個“t”並使其成為第一個。在解密的時候,這個第一個密文字母必須再到第4位。
所以解密的第四步,必須看第一個位置是什麼——一個“t”——然後再把它放回第四位。事實上,我們在解密密鑰中看到“1”是它的第四個成員的值。
通過繼續這些步驟,您可以導出逆密鑰。
這是一個進行計算的小程式碼片段。
static int[] inverse_key( int[] key ) { int[] inverse_key = new int[ key.length ]; for ( int i = 0; i < key.length; i++ ) { inverse_key[ key[ i ] - 1 ] = i + 1; } return inverse_key; }
程式碼中的“-1”和“+1”是因為大多數程式語言中的數組都是從0開始的;它們與實際算法無關。
這更像是一種置換密碼而不是轉置密碼。
關於原則,如果你有你的鑰匙:
ENCRYPTION position -- key 1 4 2 3 3 1 4 6 5 2 6 5
因此,考慮到 6 個輸入塊 :
a b c d e f
,您將 :
a
進入第 4 個位置。
b
轉到第 3 位……以此類推。這將導致 :
c e b a f d
。現在,如果你想反轉這個變換,(
c e b a f d
$ \mapsto $a b c d e f
).然後你可以看到 :
c
轉到第三個位置。
e
排在第 5 位……以此類推……
這給了你:
Decryption position -- key 1 3 2 5 3 2 4 1 5 6 6 4
僅給定數字,如何生成解密密鑰?
- 反轉列
ENCRYPTION DECRYPTION position -- key => position -- key 1 4 4 1 2 3 3 2 3 1 1 3 4 6 6 4 5 2 2 5 6 5 5 6
- 重新排序解密部分的位置列表。
DECRYPTION DECRYPTION position -- key => position -- key 4 1 1 3 3 2 2 5 1 3 3 2 6 4 4 1 2 5 5 6 5 6 6 4
有點形式主義(缺乏):
你需要確保 $ \forall i, D(E(i)) = i $ 在哪裡 $ E $ 是加密和 $ D $ 解密。
讓我們考慮以下情況 $ i $ 是 $ 1 $ ,因此我們有 $ E(1)=3 $
讓我們替換之前的等式: $ D(E(1)) = 1 \iff D(3) = 1 $
因此在解密過程中 $ 3 \mapsto 1 $
通過這樣做與另一個 $ i $ 你可以構造你的解密密鑰。是的,反函式的建構方式與替換密碼類似。