古代密碼
凱薩密碼
- 加密
每一個英文字母都往後推n個。
程式實作轉換:
- 解密
反推回去即可
- 暴力破解
窮舉: 慢慢推來得出字母偏移幾個數
modulo:
因為凱薩密碼要讓字母永遠在編碼26之內,
假如z變成b(26+2) mod 26 = 2。
簡單替換密碼
字母用其他字母做替換,凱撒加密可以說是簡單替換的一種變形
- 加密
每個字母選定一個替換字母且不重複,對著明文一一替換
- 解密
約定好的替換表中將每個字母替換回來
- 破解
以字母出現頻率分析,
明文越長越容易破解,破譯的速度會越來越快。
- 密鑰空間:
所有可能的密鑰收集起來的集合,共 26! 種可能
Enigma
德軍用來加密軍事消息的算法
- 加密通信
接收跟發送端都需要有一台Enigma機器並且共同擁有密鑰。
將明文輸入機器後為密文,接收端把密文輸入後解密成明文
- 構造
發送者對著明文按按鍵,代表某個字母的燈泡會亮起來 => 加密
接收者對著密文按按鍵,代表某個字母的燈泡會亮起來 => 解密
- 加密詳細步驟
- 設定 Enigma:
找當天的每日密碼
依據每日密碼接線、調整轉子
- 加密通信密碼:
發送者想一個 3 個字母的通訊密碼並輸入到 Enigma 兩次(輸入兩次可以撿查通訊過程有沒有出錯)=加密後的通訊密碼
- 重新設定 Enigma:
根據原本的通訊密碼再設定 Enigma
3个字母實際代表了3個轉子的初始位置。每個轉子的上面都印有字母,根據字母來設置轉子的初始位置。
- 加密消息
輸入明文轉成密文
- 傳送消息
將密文和加密過後的通訊密碼發送出去給接收者
==圖片以nacht當範例加密==
根據步驟,發送者選擇通信密碼:psv,輸入兩次後得到psvpsv的密文ATCDVT。重新設定機器把轉子挪到psv上,鍵盤輸入明文:nacht,得到KXNWP。最後傳送出去ATCDVTKXNWP。
- 設定 Enigma:
找當天的每日密碼
依據每日密碼接線、調整轉子
- 解密通訊密碼:
根據收到的消息拆分為通訊密碼和密文(ATCDVT KXNWP)
把通訊密碼(psvpsv)拿去解密得到原本的通訊密碼
- 重新設定 Enigma:
- 解密消息:
鍵盤輸入密文解密得到明文。
- Enigma弱點
因為密碼是人設定的加上密碼固定要輸入兩次,還要小心保存每日密碼本防止外洩,所以弱點也蠻多的。
參考資料
https://hackmd.io/@starPt/ByUf1sdRr