昨天學了一部分古典密碼,今天來學其他常見的古典密碼吧~
Rail-fence 是一種換位式加密,把訊息依照W的形狀排,再依照行來讀取。
舉例:明文是 HELLOWORLD
,用 3 層的 Rail-fence 排法如下:
H...O...L
.E.L.W.R.D
..L...O..
把每一行依序讀出來 → 最後密文就是:HOLELWRDLO
解密的時候,就要把字重新分配回去「W字形」位置。
這種密碼在題目裡常常會給一段亂掉的文字,要你嘗試不同的「層數」去解。
Columnar Transposition 算是換位加密的一種變形,跟剛剛的 Transposition Trial 很像,但這次是把明文寫進表格裡,然後依照「欄位順序」讀取。
舉例:明文是 HELLOWORLD
,我們選擇關鍵字 HACK
(代表有四欄),先把字母依序填入表格:
H A C K
3 1 2 4
-------
H E L L
O W O R
L D _ _
(多餘的空格用空值填充或留空或由字元代替(例如:_))
接下來依照關鍵字的順序來讀:1 → 2 → 3 → 4
得到密文:EWDLO_HOLLR_
解密的時候依照相同的欄位順序,先切分密文再把它重新填回表格,就能還原出明文
通常題目會給你一段奇怪的英文密文,解題方式就是嘗試不同的「欄數」或「關鍵字排序」,直到能拼回正常句子為止。
Hill cipher 是一種比較數學化的古典密碼
步驟:
把明文字母轉成數字(A=0, B=1, …, Z=25)
選一個n*n的矩陣作為金鑰,例如:
| 3 3 |
| 2 5 |
每次取 n 個字母組成向量,然後跟金鑰矩陣相乘(取 mod 26)得到新的向量。
把新向量再轉回字母,就是加密結果。
例如明文:HI
(H=7, I=8)
| 3 3 | | 7 | | 45 | | 19 | → T
| 2 5 | x | 8 | = | 54 | = | 2 | → C
所以 HI
→ TC
解密就需要用到「矩陣的逆矩陣 (mod 26)」。
Hill cipher 在題目中通常會給你一段亂碼加上提示是矩陣加密,要用 Python 來做矩陣運算才能解。
了解這些之後應該會有個困惑,那我要怎麼一眼看出來他們是甚麼加密呢
這時候如果題目給了很長的密文的話,我們就可以用——
只要是「替代式加密」的古典密碼(像 Caesar、Hill cipher),因為字母被換掉但字頻還保留下來,所以可以用字頻分析來破解。
在英文裡,E
是最常見的字母,其次是 T
、A
、O
…
只要密文夠長,就可以用「字頻分析」來猜測哪些密文字母對應到哪些明文字母,進而解密。
這也是為什麼古典密碼在現代幾乎不可能用來保護訊息,但在 CTF 裡,它們還是很經典的出題方向
字頻分析線上工具: https://quipqiup.com/
以上就是一些常見的古典密碼學,明天會講一點RSA的知識!
想看更多,歡迎明天再來ㄛ~