---
# System prepended metadata

title: Crypto
tags: [Enlightened, NISRA, '2021']

---

# Crypto


:::danger
請愛惜共筆，勿進行惡意刪減
:::

:::warning
[NISRA CTF](https://class.enlightened.nisra.net/)
**此為本堂課上課用的教材**
**請大家於課前先下載**
- [for學員](https://drive.google.com/drive/folders/1liPpCvpAYr2U_Y6CF5DI4ssHBX8BwZ1Q)
:::

**羅納德·李維斯特："密碼學是關於如何在敵人存在的環境中通訊"**

:::spoiler Table of Content
[TOC]
:::

## 名詞介紹

- 明文 Plaintext
    - 加密前的原始訊息 (可閱讀)
- 密文 Ciphertext
    - 加密後的訊息 (無法閱讀)
- 加密 Encrypt
	- 把明文轉成密文的程序
- 解密 Decrypt
	- 把密文轉成明文的程序
- 金鑰/密鑰 Key
    - 加解密時使用的「鑰匙」

## 柯克霍夫原則

1883年 柯克霍夫提出六個原則
兩個比較重要的：
1. 即使用**數學**可被破解 但在**實際程度**上應該無法破解
2. 即使**加密方式公開**
   只要**密鑰安全**
   仍然不能破譯

## 密碼學分類
```graphviz
graph{
    古典密碼學 -- {移項式加密 替換式加密}
    替換式加密 -- {單表加密 多表加密}
}
```

## 移項式加密

- Def : 位置改變，內容不變

### 藏頭詩/藏頭新聞

* 移動資訊位置來呈現內容

### 密碼棒 Scytale (柵欄加密 Rail fence cipher)

![](https://i.imgur.com/XsIqP9H.png)

* 由夾帶訊息的皮革繞在一個木棒上組成
* 古希臘 斯巴達人用在軍事上
* 解密方式:使用相同尺寸的棒子將密文上面解讀

:::spoiler Example

`KILLKINGTOMORROWMIDNIGHT`
$\downarrow$

```
KILLKING   147...
TOMORROW   258...
MIDNIGHT   369...
```

$\downarrow$
`KTMIOILMDLONKRIIRGNOHGMT`

:::

### Lab 01

- 密文: `MSTIYTAPFSLHICEERYCR`
- Hint:
	- 長寬 4 x 5 的加密棒加密

### 中國式密碼

![](https://i.imgur.com/LsmhuZB.png)


## 替換式加密

- Def : 位置不變，內容改變

### 凱薩密碼

- 一種替換加密技術
- 一個明文字元加密成一個密文字元
- 例如偏移量為2
	- 所有字母A被替換成C、B被替換成D，以此類推
	
	  ```
	  ABCDEFGHIJKLMNOPQRSTUVWXYZ
	  ↓↓↓↓↓↓↓↓(向下對照)↓↓↓↓↓↓↓↓↓
	  XYZABCDEFGHIJKLMNOPQRSTUVWXYZ
	  ```

#### 密碼盤

![](https://i.imgur.com/uXhkaAa.png)

內圈：明文
外圈：密文

### LAB 02

- 密文: `JLUWNCWY`
- 已知密文是被'U'凱薩加密的，則明文為?

### 阿特巴希密碼

- 將字母表整個扭轉：
  第一個字母 "A" 與最後一個 "Z" 替換
  第二個 "B" 與倒數第二個 "Y" 替換

  ```
  ABCDEFGHIJKLMNOPQRSTUVWXYZ
  ↓↓↓↓↓↓↓↓(向下對照)↓↓↓↓↓↓↓↓↓
  ZYXWVUTSRQPONMLKJIHGFEDCBA
  ```

### 簡易替換密碼<br>^替換表^

![](https://i.imgur.com/gwCqVha.png)

- 傳統上會先把一個關鍵詞寫在字母表最前面
  再刪去重複字母
- 英文字母替換表最多有26！種
  可以對替換表進行偏移~(凱撒密碼)~或翻轉~(阿特巴希密碼)~

:::spoiler 聊天室嗨起來

> 註解請進編輯模式
> [name=馬後炮404][time=Sat, Aug 14, 2021 11:23 PM]

> 注音符號也可以吧
> [name=zhengtingliu0104]
> 注音加密本身不就很強了(X
> [name=404]
> 只有台灣人解得出來(?
> [name=zhengtingliu0104]
> xu4bj65k4u;4
<!-- 例如這樣 -->
> [name=404]
> ji3g4au4a83 
<!-- 我是密碼 -->
> [name=LAVI]
> yjo4fu;62k7ru8 au4fu6g6g4j;4ru4fu, 5j4up 187
<!-- 最強的加密其實是忘記切注音吧 -->
> [name=s910246] 
> 5k4g4s83eiji6m3u06
<!-- 這是哪國語言 -->
> [name=zhengtingliu0104]
> 精靈族語
> [name=yuhaodai920404]
> 要穿越異世界了嗎(X
> [name=李若榛]
> ㄓㄨㄥ ㄍㄨㄛˊ ㄖㄣˊ ㄎㄢˋ ㄅㄨˋ ㄉㄨㄥˇ
> [name=forensic7306]

:::

### 波雷費密碼 Playfair cipher 

1. 明文預處理
	1. 將明文分成兩個字元一組。
	2. 若一組內的字母相同，將"X"插入兩字母之間，重新分組。
	3. 若最後一組剩下一個字，也加入"X"
2. 生成簡易密碼
	- 選取一個關鍵字，然後製作一個簡易替換密碼
3. 建立5*5的表格
   `P L A Y F I R B C D E G H K M N O Q S T U V W X Z`
   $\downarrow$
   ```
   P L A Y F
   I R B C D
   E G H K M
   N O Q S T
   U V W X Z
   ```
4. 加密
    1. 若兩個字元不在同一直行或同一橫列:
    	* 在矩陣中找出另外兩個字母，使這四個字母成為一個長方形的四個角。
    2. 若兩個字元在同一橫行:
        * 取這兩個字母右方的字母（若字母在最右方則取最左方的字母）。
    3. 若兩個字元在同一直列:
        * 取這兩個字母下方的字母（若字母在最下方則取最上方的字母）。
	:::spoiler Example
	已預處裡明文：`WE LC OM ET ON IS RA EN LI GH TE NE DX`
	5 * 5表格：
	```
	P L A Y F
	I R B C D
	E G H K M
	N O Q S T
	U V W X Z
	```
	`WE`：![](https://i.imgur.com/QZSXjh0.png)
	`LC`：![](https://i.imgur.com/kvjTBzy.png)
	`ON`：![](https://i.imgur.com/m94cA3a.png)
	`EN`：![](https://i.imgur.com/qibvXRh.png)
	:::

### LAB 03

### 四方密碼

> 波雷費密碼 ***PRO***
- 四方密碼共有4個5X5的表格
  以每排兩個表格進行排列
- 單位表格
  ![](https://i.imgur.com/w8lkOgR.png)
- 生成表格：
  ![](https://i.imgur.com/Wq0mG4C.png)
  左上右下為單位表格
  右上左下選兩個單字
  用波雷費的方式建表
	- 假設明文為 `VENI VIDI VICI`
	  ![](https://i.imgur.com/ofsyiRH.png)
	  ![](https://i.imgur.com/g9SVIif.png)
	  解密跟波雷費類似

## 編碼

- 不會修改資料內容
- 沒有任何加密的效果
- 單純就是換個方式來表達資料

> 換句非人話說==
> [name=yu0412015]

### 摩斯編碼

![](https://i.imgur.com/MdSsn5q.png)

## 單表加密攻擊：字頻分析

- 大部分語言中
  字母或字符使用的頻率並不是平均的
- 以英文為例
  母音 `A, E, I, O, U` 的使用頻率更高
- 單表加密只替換字元
  頻率不變

> 吳鮭魚
> [name=CHA]

### 維吉尼亞密碼

- 很多層凱薩密碼
- 凱撒密碼轉一次密碼盤
  維吉尼亞一個字轉一次

### 多表加密攻擊

![](https://i.imgur.com/SKqOLSW.png)

- **I**ndex **o**f **c**oincidence（巧合指數）
  白話版：文字的BMI
- IoC ↑：加工啦哪次不加
  IoC ↓：天然A尚好
    - **完全隨機** → IoC 逼近 1 (下限)
    - 字母 ↑ IoC 上限 ↑

#### 一次性密碼本

- 規則
    - 關鍵字**完全隨機**
    - **長度**：關鍵字 = 明文
    - 只能用一次
- 缺點
    - 實用性差

![](https://i.imgur.com/P1HMBnA.png =200x200)

### Enigma

- 鍵盤 + 接線板 + 轉子 + 反射器 + 燈盤
- 五個轉子選三個
  $P^5_3$ 種排序
	- 一個轉子就是一個替換表
	- **多**個轉子還是**一個**替換表
- 反射器
  還是一個替換表(半表)
  ex. `A`->`Y`，那就代表 `Y`->`A`

* 維吉尼亞密碼
  但密鑰長度為 26^3^

- 加密 & 解密
	- 加、解密者須規定好
		1. 使用的的轉子
		2. 轉子擺放順序
		3. **每個**轉子的起始位置
		4. 接線板的設置
	- 加密者
		- 打明文記密文
	- 解密者
		- 打密文記明文
	> Enigma 每一個狀態都是一個替換表~（一個電路）~
	> 解密順著原路返回即可

![](http://programmermagazine.github.io/mag/ymag201504/633px-Enigma-action.svg.png)

###### tags: `Enlightened` `NISRA` `2021`
<style>
.navbar-brand::after { content: " × NISRA"; }
</style>