緣起
從今天開始,新開一個系列,專門聊一聊經典的密碼算法。
首先聲明,這個系列談論的密碼不是現代的計算機使用的,基於數論、非對稱體制的各種密碼學,而是一些在實際歷史中或者一些解謎小說中出現的傳統的經典加密方法。有時候我們也將其中的一些所組成的稱爲古典密碼學。
現如今,雖然傳統加密方法在實際生活中用的不多,但是在很多推理小說中,密碼和暗號等要素還是有很多有趣的案例的。比如福爾摩斯系列中的《跳舞的小人》、愛倫坡的《金甲蟲》、江戶川亂步的《二分銅幣》等,在名偵探柯南中也有很多次出現破譯密碼和暗號的場景。密碼和暗號是推理小說中的一個很重要的要素,具有一定的趣味性,還能推動情節的發展。這些推理中的密碼和暗號通常都是和傳統加密方法以及傳統的密文分析方法(cryptanalysis)相關的。
由於對解謎類的推理小說的興趣,系統整理這些常見經典加密方式也是很久以前就已經提上日程。無奈事務繁多,一直拖到現在。
立個flag,準備寫的古典密碼算法如下:
- 凱撒移位
- 埃特巴什碼
- 維吉尼亞方陣
- 莫斯碼
- 柵欄易位
- 替換密碼
- 仿射密碼
- 培根密碼
- to be continued ...
今天第一篇,就從一個簡單的凱撒移位說起:
凱撒移位(Caesarian shift)密碼
凱撒移位,又稱爲Caesar cipher或者Caesarian cipher,或者直接稱爲shift cipher,即移位密碼。改密碼最早是由凱撒大帝發明的,用於軍事行動中的祕密通信。凱撒密碼非常簡單,也很容易破解,其原理方法如下:
對於一段文本,比如: i love cryptography。其中每個字母都是26個英文字母中的一個。那麼,我們要想對其加密,只需要將每個字母進行操作即可,也就是操作26個字母的字典。
凱撒移位就是將這26個字母的字典進行一個位移,得到密文字典,比如,將該字典向右移動3個位置,得到明文和密文字典的對應關係就是:
明文:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文:XYZABCDEFGHIJKLMNOPQRSTUVW
這樣一來,對於上述的信息:
ILOVECRYPTOGRAPHY
就被加密成了
LORYHFUBSWRJUDSKB
取不同的位移,就能得到不同的結果。
這時候我們可以發現,其實所有的字母其位移的大小都是一樣的,那麼這樣一來,字母之間的關係是不變的,同一個字母仍然被映射爲同一個字母。我們知道,英文中有很多固定的常見的詞,比如the、in、of等。通過分析密文中的多個字母搭配結構中常常出現的一些pattern,就能破譯凱撒密碼。當然前提是密文足夠長,具有統計意義。那麼密文不夠長怎麼辦呢?如果密文很短,將25中可能的位移遍歷一遍不就好啦!看看那個位移下試驗出來的明文是有意義的。
基於凱撒移位的這種“所有字母位移相同”的弊端,人們有發明了多表加密方法,這就是後面要講的維吉尼亞方陣。
有時候一點點的信念,可以走很長的路 ——音樂家 尼克凱夫