---
# System prepended metadata

title: ch2 加密法
tags: [資安]

---

---
tags: 資安
---


# ch2 加密法

## Symmetric Encryption 對稱加密法
也稱為conventional encryption或single-key encryption，在公鑰加密之前被廣泛使用

**Simplified Model of Symmetric Encryption**
![對稱加密模型](https://i.imgur.com/JqywaOk.png)

Cryptography 密碼學
Cryptographic system/ cipher  密碼系統/密碼
Cryptanalysis 密碼分析，用來解密的手法
Cryptology = Cryptography+Cryptanalysis

### Secure Use of Conventional Encryption
要達到「安全的加密法」必須有夠強大的演算法，必須有兩種考量:
1. 讓想破解的人，即使能拿到明文、密文也推不出你的算法，即使他知道了你用甚麼演算法，也無法算出你的Key
2. 由於Key必須是傳送方和接收方都要有，因此傳送key的副本的方法也必須是安全的
→你不需要隱藏演算法，只要好好保護你的key
![Model of Symmetric Cryptosystem](https://i.imgur.com/CwztXK7.png)

### Cryptographic Systems
分為三個類型:
1. 將明文轉為密文的操作:
* Substitution 替換
* Transposition 換位
2. 用到的鑰匙數量
* Symmetric, conventional encryption
* Asymmetric, public-key encryption
3. 明文的處理方式
* Block cipher
* Stream cipher

### 攻擊常規加密方案的類型
1. Cryptanalysis 
利用演算法的性質與明文的特徵來推出Key 
e.g.:字母出現頻率

2. Brute-force attack 暴力法
將所有key的可能都用一次在密文上，推出可能的key
e.g.:
Caesar cipher:Try all 25 possible keys

最難攻擊的是→只有密文
但一般來說演算法要能防禦明文被知道的狀況下的攻擊
所以我們會假設攻擊者是知道演算法的模式下進行加密

### 加密方式的安全性
1. Unconditionally secure 無條件安全
只要攻擊者拿不到必要的訊息，不管攻擊者有多少時間都無法破解
>只有 one-time pad能達到無條件安全，但不實際

2. Computationally secure 計算安全
能達到讓解密時間的價值大於內容的價值 或 讓解密時間長到內容已經過期

### Caesar Cipher
原理:將字母位移

假設每個字母往後位移3個，演算法可以表示成:
$C = E(3, p) = (p + 3) mod (26)$
Ciphertext for C and Plainte4xt for P
所以解密的演算法就是
$p = D(k , C ) = (C - k ) mod 26$

### Monoalphabetic Cipher單表加密

將特定字母替換成另一個字母 Ex: E換成Z，F換成J
問題:容易用頻率分析破解，因字母出現頻率跟明文一樣


#### Playfair Cipher

建立一個5x5的表格裡面必須放一個自己選擇的keyword，剩下照順序填
Ex. Keyword:MONARCHY
![playfair matrix](https://i.imgur.com/9NTFAXB.png)

規則:
1. 將單字拆成每兩個字母一組，而如果有相同字母出現在同組，則將第二個字母用一個事先指定的字母替換 Ex: balloon → ba lx lo on
2. 如果同組的字母在同列或同行，則兩個字母都向後位移 Ex: ar→RM  mu→CM
3. 如果不同行也不同列，則以字母位置畫十字，兩個十字相交的部分就是替換的字母 Ex: hs→BP

* 總共有$26*26=676$種可能
雖然比單表加密複雜，但一樣容易被破解

#### Hill Cipher 
將明文的字母編碼後，產出一個Key矩陣，相乘後再mod26得到密文
這個矩陣K必須要有反矩陣
![](https://i.imgur.com/uahFfZh.png)


如果攻擊者只拿到密文會很難攻擊，但如果攻擊者拿到明文，則可以很輕易破解
$C = PK mod26$
$P = CK^-1 mod26$
$K = P^-1C mod26$
![](https://i.imgur.com/kvvAM0e.png)

### Vigenère Cipher
* Best known polyalphabetic substitution ciphers

1.給定一明文字串P，如:TAKE THAT HILL

2.給定一金鑰K，如:YANG

3.當明文與金鑰字母長度不同時，重複金鑰字母使其與明文長度相同，如: YANG YANG YANG

4.將明文字母與對應位置的金鑰字母相加得到密文C，Ci=Pi+Ki (mod26)

5.或者用相對位移方式來計算，如位置1明文為T，金鑰是Y，而Y是A移動24個位置的結果，則T也需相對移動24個位置，得到密文字母R，以此類推

  **注意** 字母A-Z ⇒ 數字0-25
  ![](https://i.imgur.com/0XqxkgS.png)
  
#### Vigenère Autokey System
Example:
key: <font color=red>deceptive</font>wearediscoveredsav
plaintext: wearediscoveredsaveyourself
ciphertext: ZICVTWQNGKZEIIGASXSTSLVVWLA

由於每次的金鑰不同，因此更難找到字母的頻率，但金鑰跟明文還是有著相同頻率
所以只要金鑰能跟明文一樣長 且 金鑰跟明文完全沒關係 就能防止分析攻擊

### Vernam Cipher
直接上圖片!
![](https://i.imgur.com/R7Hi2rk.png)
原理是用一個迴圈一直生產金鑰，但因為是用迴圈所以金鑰終究會重複，只要有夠多的密文一樣可以推敲出Key

### One-Time Pad

原理:
用隨機的金鑰且金鑰長度必須跟明文一樣長，每個金鑰都只用在一個訊息上，用完不能再用

由於金鑰的隨機性，因此密文頻率不會跟明文有任何關連，無法破解
但是需要大量產生金鑰→不方便
只有在需要超高隱密性的頻道用

## Transposition Techniques
Substitution:替換字母
Transposition:改變排列=permutation

### Rail Fence Cipher
以下列方式將字母重新排列
![](https://i.imgur.com/qJjBmra.png)like a train

### Row Transposition Cipher

把明文寫成一個方形，然後隨便給每一行編號，按照編號排序形成密文

### Multiple Transposition
單純打亂排列的密文內容跟明文一樣，很容易就能分析出來明文，所以如果是排很多次呢?
答案是:多做幾遍確實能增加分析的困難度，無論是排列加密還是替換加密都會，因此有了Rotor Machines

### Rotor Machines
在二戰時使用的加密機器，由打入的每個字母都會使轉盤轉一格，總共使用三個轉盤，每個轉速可能不一樣，因此至少得$26*26*26=17576$個字母後才會回到原本的編碼
![](https://i.imgur.com/KVmfVyr.png)

### Steganography
就是取文章每個單字的第一字，或是取每個t後面字之類的，也就是藏頭
嚴格來講不算加密法

[CH3 Block cipher and DES](https://hackmd.io/@Ired/ISch3N0t3)



