密碼學/置換密碼
置換密碼透過以某種確定的方式重新排列明文來編碼訊息。在數學上,它可以被描述為應用某種雙射函式。接收者使用相反的重新排列方式解碼訊息,將順序恢復到正確狀態。在數學上,這意味著使用原始編碼函式的逆函式。
例如,要加密句子 "A simple kind of transposition cipher writes the message into a rectangle by rows and reads it out by columns," 我們可以使用以下矩形
Asimplekin doftranspo sitionciph erwritesth emessagein toarectang lebyrowsan dreadsitou tbycolumns
然後加密後的文字將是 "Adsee tldts oirmo erbif tweab eymti rsrya cproi serdo lanta cosle ncegt wiuks iseas tmipp tinao nnohh ngnus."
這種密碼通常透過像列置換一樣排列行和列來複雜化。
標準的列置換包括將金鑰寫為列標題,然後將訊息逐行寫到這些標題下方(用空字元填充任何空位),最後,以標題的字母順序讀取各列。例如,假設我們有一個金鑰 'ZEBRAS' 和一條訊息 'WE ARE DISCOVERED. FLEE AT ONCE'。我們從以下開始
| Z | E | B | R | A | S |
| W | E | A | R | E | D |
| I | S | C | O | V | E |
| R | E | D | F | L | E |
| E | A | T | O | N | C |
| E | Q | K | J | E | U |
然後以以下方式讀取
EVLNE ACDTK ESEAQ ROFOJ DEECU WIREE
為了解密,接收者必須透過將訊息長度除以金鑰長度來計算出列長度。然後他可以再次將訊息寫成列,然後透過重新排列關鍵詞來重新排列列。
單個列置換可以透過猜測可能的列長度,將訊息寫成列(但順序錯誤,因為金鑰未知),然後尋找可能的異位詞來攻擊。因此,為了使其更強大,經常使用雙重置換。這僅僅是對同一個訊息應用兩次列置換,使用兩個不同的金鑰,這兩個金鑰的長度不同(最好是互質的)。雙重置換通常被認為是特工在困難的野外條件下可以可靠操作的最複雜的密碼。它至少在第二次世界大戰期間仍在實際使用(例如詩歌程式碼)。
另一種型別的置換密碼使用格柵。這是一個帶有孔的方形紙板,當格柵旋轉到四個位置中的每一個位置時,方格中的每個單元格只在一個位置出現。只有方格中字元位置數量為偶數的格柵才能滿足此要求。將盡可能多的訊息寫到格柵中,然後將其旋轉到另一個位置,並寫入更多訊息。移除紙板後,就會顯示出密文。
下圖顯示了使用 4x4 格柵編碼的訊息 "JIM ATTACKS AT DAWN"。
頂行顯示了紙板格柵,底行顯示了格柵在編碼的五個階段下方的紙張。
- 紙張上的空白格柵。
- 在空白處寫入前四個字母。
- 格柵旋轉一個位置,寫入第二組字母。
- 格柵旋轉兩個位置,寫入第三組字母。
- 格柵旋轉三個位置,寫入第四組字母。
在訊息中的字母都寫完後,可以從紙張上讀取密文:"JKDT STAA AIWM NCAT"。
傳送者和接收者必須就格柵的初始方向、旋轉格柵的方向、使用格柵上空格的順序以及從紙張上讀取密文字元的順序達成一致。
