---
# System prepended metadata

title: 'Crypto [Learning] - Basic Concepts'
tags: [Crypto]

---

# Crypto [Learning] - Basic Concepts

>  [name=D]

## 資安的基本需求 
### CIA
- ==機密性 Confidentiality==
	- 資料隱私的保護，未經授權者無法存取(讀取、瀏覽、列印)
- ==完整性 Integrity==
	- 資料內容的完整，未經授權者無法更改(新增、更正、更新、刪除)
- ==可用性 Availability==
	- 資料有效的存取，資料內容和格式均沒有錯誤，資訊系統可以正常運作(不被毀壞、延遲使用)
### 其他範疇
- 鑑別性 Authentication
	- 身分鑑別：系統需要快速且正確的驗證使用者身分
	- 資料訊息來源鑑別：避免惡意的傳送者假冒原本的傳送者傳送不安全的訊息內容
	- 方式：數位簽章、資料加密
- 不可否認性 Non-Repudiation
	- 傳送方跟接收方都不能否認自己曾經進行資料傳輸、接收及交易等行為
		- 買家不能否認自己沒有在某網站買過東西
		- 賣家不能否認自己沒有收到某買家的訂單
	- 方式：數位簽章、公開金鑰基礎架構(PKI)
- 存取控制 Access Control
	- 資訊系統內會依照每位使用者的不同，給予不同的使用權限
- 稽核 Accountabiliy
	- 藉由稽核紀錄 (Audit Log) 來追蹤非法使用者的入侵、攻擊
 
 ## 資安的攻擊分類
- 被動攻擊 Passive Attacks
	- 試圖了解或利用系統的資訊，但不影響系統資源，不涉及對數據的更改，所以很難被發現，因此要解決被動攻擊，應該要預防，而不是檢測
	- 對傳輸進行竊聽和偵測
		- 信息內容的洩漏 release of message contents
		- 流量分析 traffic analysis
![image](https://hackmd.io/_uploads/S1Q3AlqlJl.png =250x)

- 主動攻擊 Active Attacks
	- 試圖改變系統資源或影響系統運作，會對數據進行更改或偽造，所以很容易被發現，因此此攻擊不容易預防，但容易被檢測
	- 對數據進行更改和偽造
		- 偽造 masquerade
![image](https://hackmd.io/_uploads/HJXWZZceyl.png =250x)
		- 重送 replay
![image](https://hackmd.io/_uploads/r1CB-Wcx1l.png =250x)
		- 訊息修改 modification of message
![image](https://hackmd.io/_uploads/SyIngZqlkl.png =250x)
		- 拒絕服務 denial of service
![image](https://hackmd.io/_uploads/HJXWZZceyl.png =250x)
- 被動攻擊 v.s. 主動攻擊
![image](https://hackmd.io/_uploads/rk5n-Z5xJl.png)

## 實現傳送訊息的安全方法
- 網路下的安全模型
![image](https://hackmd.io/_uploads/HkBDEZqlke.png)
	- 設計一個在安全傳送下，所適用的演算法
	- 透過此演算法，產生一把金鑰
	- 設計可以分配和分享此金鑰的方法
	- 指定雙方所使用的協議，該協議可以透過安全演算法和金鑰實現安全服務

## 密碼 == password? cipher? cryptography?
> 當說到 **密碼** 時，我們或許會連想到 **password**, **cipher**, **cryptography** 的英文單字，但其實他們的差異非常大，在正式學習密碼學之前，這些觀念是有必要先釐清的。
- password 通行碼
    - 是我們平常在登入頁面時，看到的密碼欄位，雖然我們在生活中常說要登入帳號密碼，但其實在這邊講密碼並不是正確的，因為 password 是通行碼，而不算是密碼，所以應該說輸入使用者自己的帳號 (account or username) 與通行碼 (password) 後，就可以成功登入。
    - Wikipedia : https://zh.wikipedia.org/zh-tw/%E5%AF%86%E7%A2%BC_(%E8%AA%8D%E8%AD%89)
- cipher 密碼演算法
    - 是一種用於執行加密(encipher) / 解密(decipher)的演算法，也可以被說一種加密器 / 解密器，像是我們常聽聽到的 Caesar Cipher, Playfair Cipher 等等，都是 cipher 的例子。
    - Wikipedia : https://zh.wikipedia.org/zh-tw/%E5%AF%86%E7%A2%BC
- cryptography 密碼學
    - 是一種研究信息保護和通訊安全的科學，就像是我們會說經濟學、哲學、心理學、生物學等等。
    - Wikipedia : https://zh.wikipedia.org/wiki/%E5%AF%86%E7%A0%81%E5%AD%A6

## 在密碼學中常見的用詞
> 學習密碼學中會出現什麼用詞前，我們可以先思考為什麼要有密碼學?密碼學可以幹嘛，可以在生活中帶給我們什麼效益呢?
> 
> 首先可以透過生活中我們會偷偷摸摸做的事情下手，先想像一下現在是上課時間，但你想跟你的朋友講秘密，但由於現在是上課時間，再加上你跟你的朋友都怕被老師罵，所以上課期間絕對不能直接聊天，但又礙於你們的座位很遠，所以只剩下一種方法，那就是交換紙條，但是在交換紙條的過程中，會經過很多同學，你們的聊天內容又不想被其他同學看到，那這時就很需要密碼學了，用一種你跟你的朋友才看得懂的方法來將紙條做加密和解密吧 ! 這樣在過程中，即使其他人偷看到紙條了，也看不懂內容。
> 
> 再來可以思考的更廣一點，在現今社會中，我們不只是跟朋友們用訊息聊天，我們也常常需要在網站上傳送自己的資料，那這時如果沒有做加密，當你上傳完資料後，在網路上的所有人都很有機會看到你的個資，如果又是被有心人士利用了，那將會更危險，所以密碼學在社會中是相當重要的，其實也是我們每天都會接觸的學問。

- 需要哪些東西
    - 紙條
        - ==明文 Plaintext (M)== : 加密前的原始內容
        - ==密文 Ciphertext \(C)== : 加密後的內容，大多是大家都看不懂的無意義文字
    - 動作
        - ==加密 Encryption (E)== : 將明文轉成密文
        - ==解密 Decryption (D)== : 將密文轉成明文
    - 用什麼東西執行動作
        - ==金鑰 Key (K)==
- 過程
    - ![image](https://hackmd.io/_uploads/rkzUX9yjC.png)
- 公式
    - ==C = E~k~(M)== / ==C = E(k, M)==
    - ==M = D~k~\(C) = D~k~(E~k~(M))== / ==M = D(k, C)==
- 重要觀念
    - 現代的加解密演算法都變為標準且公開，使用者僅保存私有金鑰
        - 如果加解密演算法沒公開的話，傳送者跟接收者用不同的加解密方法，根本沒有辦法看到內容，相容性也會遇到問題

## 密碼系統的分類
- 根據**加解密金鑰**
    - ==Secret-Key Cryptosystems 秘密金鑰密碼系統==
        - ==Symmetric Cryptosystems 對稱式密碼系統==
        - One-Key Cryptosystems 單金鑰密碼系統
        - 傳送者與接收者都分享同一把 key
        - 加密解密所用的 key 為同一把，且只有一把
        - key 要保密
        - e.x. DES, AES
    - ==Public-Key Cryptosystems 公開金鑰密碼系統==
        - ==Asymmetric Cryptosystems 非對稱式密碼系統==
        - Two-Keys Cryptosystems 雙金鑰密碼系統
        - 加密解密所用的 key 為不同把，分兩把
			- 加密金鑰為 public key，要公開
			- 解密金鑰為 private key，要保密
        - e.x. RSA
- 根據**處理(加解密)資料量的方式**
    - ==block 區塊密碼系統==
        - 以 block(數個位元) 為處理單元
        - e.x. DES, IDEA
    - ==stream 串流密碼系統==
        - 以 bit 為處理單元
        - e.x. RC4, OTP
- 根據**加解密的運算方式**
	- ==Transporsition 置換法==
	- ==Substitution 替代法==

## 密碼系統的評估
### 保密程度
> 破密者除了無法得知解密金鑰，但加解密演算法、密文都得知

- 從上到下，攻擊方式愈來愈厲害，如果能抵擋下面的攻擊方式，就可以說其保密程度很高

| 攻擊類型     | 破密者已知的訊息                         | 破密者得到的訊息                          |
| ------------ | ---------------------------------------- | ----------------------------------------- |
| 密文攻擊     | 加解密演算法、密文                       | 密文 => 明文                              |
| 已知明文攻擊 | 加解密演算法、密文、與其相對應的明文 | 明文-密文配對 => 解密金鑰、其他密文、明文 |
| 選擇明文攻擊 | 加解密演算法、選擇明文、與其相對應的密文 | 明文-密文配對 => 解密金鑰、其他密文       |
| 選擇密文攻擊 | 加解密演算法、選擇密文、與其相對應的明文 | 明文-密文配對 => 解密金鑰、其他密文       |


## 關於通行碼常見的攻擊
- ==字典攻擊法 Dictionary Attack==
	- 以字典之中的單詞來測試使用者的通行碼
- ==窮舉攻擊法 Exhaustive Search Attack / Brute-Force Attack==
	- 將所有英文字母和數字一一測試
- ==重送攻擊法 Replay Attack==
	- 駭客即使不知道使用者加密處理前的通行碼，但如果駭客攔截到加密處理後通行碼，還是可以將此輸入到系統裡，通過驗證