密码学/置换密码
置换密码通过以某种确定的方式重新排列明文来编码消息。在数学上,它可以被描述为应用某种双射函数。接收者使用相反的重新排列方式解码消息,将顺序恢复到正确状态。在数学上,这意味着使用原始编码函数的逆函数。
例如,要加密句子 "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"。
发送者和接收者必须就格栅的初始方向、旋转格栅的方向、使用格栅上空格的顺序以及从纸张上读取密文字符的顺序达成一致。