# 【密碼學 I - Overview of Cryptography】 ## 01 - 密碼學基礎 ### 01-01. 什麼是密碼學? **詞源**:Cryptography (或 cryptology) 一詞源自古希臘文,由 kryptós (意為「隱藏訊息的」) 和 graphein (意為「書寫」) 組成 。 **核心分支**: - 密碼學 (Cryptography):專注於「創造密碼」(Code-making) 的技術 。 - 密碼分析 (Cryptanalysis):專注於「破解密碼」(Code-breaking) 的技術 。 **科學定義**:密碼學是一門透過數學方法,在資訊傳輸中達成**保密性(secrecy)與鑑定性 (authenticity)** 的科學 。 **理論奠基**:資訊理論的創始人克勞德·夏農 (Claude Shannon) 於 1949 年發表了史上第一篇探討密碼系統通訊理論的論文 。 :::success **重點筆記**:範例 - 東方:清代的紀曉嵐曾使用「反切法」來加密訊息。 ![截圖 2025-10-01 晚上8.13.08](https://hackmd.io/_uploads/rJlyjq52gg.png) - 西方:二戰時期,美軍使用**納瓦霍語 (Navajo code)** 作為密碼,因為該語言結構複雜且未曾有書面紀錄,使敵軍難以破解。 ![截圖 2025-10-01 晚上8.13.34](https://hackmd.io/_uploads/rycxo59hxg.png) ::: ### 01-02. 密碼學的目標 密碼學主要有兩大核心目標:**保密性**與**鑑定性**。 * **保密性 (Secrecy / Privacy)**:確保資訊不被未授權者讀取。 * **鑑定性 (Authenticity)**:驗證資訊來源與完整性。 1. **訊息鑑定 (Message)**:包含完整性 (Integrity) 與不可否認性 (Non-repudiation)。 2. **傳送方鑑定 (Sender)**:即身份驗證 (Authentication)。 **核心術語** - **明文 (Plaintext)**:原始的、可識別的訊息。 - **密文 (Ciphertext)**:經過轉換後,難以識別的訊息。 - **金鑰 (Key)**:用於加密和解密的關鍵資訊,僅傳送方與接收方知曉。 - **加密 (Encryption)**:使用密碼和金鑰,將明文轉換為密文的過程。 - **解密 (Decryption)**:使用密碼和金鑰,將密文還原為明文的過程。 :::success **重點筆記**:範例 1. **明文**:"HELLO" 2. **金鑰**:凱撒密碼的位移 3 3. **加密**:將每個字母往後推 3 位 4. **密文**:"KHOOR" 5. **解密**:將每個字母往前拉 3 位,還原為 "HELLO" ::: ### 01-03 為什麼需要密碼學? 在 OSI 網路模型中,應用層(第 7 層)預設使用超文本傳輸協定 (HTTP),該協定以明文傳輸資料 。這使得網路資料交換不安全 。 因此,為了解決這個問題,在 HTTP 之上加入了 SSL/TLS 來加密資料,將其轉換為密文,從而建立了 HTTPS (安全超文本傳輸協定) 。這確保了即使資料被攔截,也無法輕易被解讀 。 ![截圖 2025-10-01 晚上8.17.51](https://hackmd.io/_uploads/rJig2cc2gg.png) ### 01-04 密碼系統的組成元件 一個密碼系統 (Cryptographic System) 包含以下元件 : * **偽隨機數生成器 (Pseudo Random Number Generator, PRNG)**:產生看似隨機、無法預測的數字序列,用於生成金鑰或加密過程中的隨機因子。 * **簽章 (Signature)**:用於驗證訊息來源和不可否認性,確保訊息是由特定發送者發出且未被竄改(詳見 04-04)。 * **雜湊 (Hash)**:將任意長度的資料轉換為固定長度的摘要,用於確保資料的完整性(詳見 05)。 ![截圖 2025-10-01 晚上8.18.46](https://hackmd.io/_uploads/SkfNh5chee.png) <br> ### 02-01. 柯克霍夫原則 (Kerckhoffs's Principle) 這是一條現代密碼學的基礎假設:一個密碼系統的安全性,應**僅依賴於金鑰的保密性**,而非加解密演算法的保密性。 夏農將此詮釋為:「敵人了解整個系統」。這意味著,即使攻擊者知道演算法、持有密文,甚至掌握部分明文與密文的配對,只要沒有金鑰,系統依然是安全的。 :::success **重點筆記**:**AES (進階加密標準)** 演算法是全世界公開的,任何人都可以查閱其運作的每一步驟。但只要您使用的 256 位元金鑰是保密的,您的資料就是安全的。安全性不在於演算法是秘密,而在於金鑰是秘密。 ::: ### 02-02. 密碼分析的攻擊類型 根據攻擊者掌握的資訊量,可分為四種攻擊等級: - **僅知密文攻擊 (Ciphertext-Only Attack)**: 1. 攻擊者只擁有密文序列 $c_1, c_2, ..., c_n$。 2. 攻擊目標是找出對應的明文 $m_1, m_2, ..., m_n$ 或金鑰 $K$。 3. 【範例】:攻擊者攔截了一封加密郵件,只能看著加密後的亂碼,並試圖透過統計分析(如字母頻率)來破解它。 ![截圖 2025-10-01 晚上8.25.49](https://hackmd.io/_uploads/rkFR6q9hge.png) - **已知明文攻擊 (Known-Plaintext Attack)**: 1. 攻擊者擁有一些明文與其對應的密文配對 $\{m_1, c_1\}, \{m_2, c_2\}, ... , \{m_n, c_n\}$,但這些配對的內容無法由攻擊者控制。 2. 攻擊目標是推導出金鑰 $K$,或從新的密文 $c_{n+1}$ 中找出 $m_{n+1}$。 3. 【範例】:二戰時,盟軍知道德軍的每封電報固定以 "Heil Hitler" 開頭。這使得他們擁有了已知的明文 ("Heil Hitler") 和對應的密文,大大幫助了 Enigma 的破解。 ![截圖 2025-10-01 晚上8.30.09](https://hackmd.io/_uploads/ByhCA9chlg.png) - **選擇密文攻擊 (Chosen-Ciphertext Attack)**: 1. 攻擊者可以選擇特定的明文,並取得其加密後的密文。 2. 攻擊者可透過取得其所選擇的明文之加密結果來蒐集資訊。公開金鑰系統必須能抵抗此類攻擊。 3. 【範例】:攻擊者誘使一個加密系統(例如一個網站伺服器)加密特定訊息(如 "admin_login"),並觀察其產生的密文,以此來推測金鑰或系統弱點。 ![截圖 2025-10-01 晚上8.31.51](https://hackmd.io/_uploads/HJjBkoc2gg.png) - **選擇明文攻擊 (Chosen-Plaintext Attack)**: 1. 攻擊者可以選擇特定的密文,並取得其解密後的明文。 2. 攻擊者可透過取得其所選擇的密文之解密結果來蒐集資訊。 3. 【範例】:攻擊者傳送一個精心構造的(可能是略微損壞的)密文給解密伺服器,伺服器解密失敗並回傳一個錯誤訊息。攻擊者可以利用這個錯誤訊息(例如「填充錯誤」)來反推金鑰的資訊,這被稱為「Padding Oracle 攻擊」。 ![截圖 2025-10-01 晚上8.33.41](https://hackmd.io/_uploads/S1lhyoq3xl.png) **安全性的層級** - **理論安全 (Theoretical Security)**:無論攻擊者有多少計算能力與時間,都無法破解 。只有「一次性密碼本 (One-Time Pad, OTP)」系統能達到此標準 。其必要條件是金鑰長度必須大於等於明文長度 ($k \ge n)$ 。 - **實際安全 (Practical Security)**:雖然理論上可被破解,但在有限的資源與時間內是不可行的。今日安全的系統,不保證未來也安全 。 :::success **重點筆記**: **密碼學中的工作特性 (Work Characteristic)** - 理論工作特性 (Theoretical Work Characteristic, $W(n)$):理論上破解一個密碼系統所需的最低成本 。 - 歷史工作特性 (Historical Work Characteristic, $W_h(n)$):目前已知破解一個密碼系統所需的最低成本 。 一個密碼系統若其歷史工作特性 $W_h(n)$ 在合理的資源內無法達成,則被認為是安全的。換言之,今日安全的系統不代表未來也必定安全 。 **窮舉式金鑰搜尋的時間估算** 下表顯示了針對不同金鑰大小進行窮舉搜尋(暴力破解)所需的時間 。 | 金鑰大小 (bits) | 替代金鑰數量 | 1 次解密 $/\mu s$ 所需時間 | $10^⁶$ 次解密 $/\mu s$ 所需時間 | | :--: | :---: | :--: | :--: | | $32$ | $2^{32} = 4.3 \times 10^{9}$ | $2^{31} \mu s = 35.8$ 分鐘 | $2.15$ 毫秒 | | $56$ | $2^{56} = 7.2 \times 10^{16}$ | $2^{55} \mu s = 1142$ 年 | $10.01$ 小時 | | $128$ | $2^{128} = 3.4 \times 10^{38}$ | $2^{127} \mu s = 5.4 \times 10^{24}$ 年 | $5.4 \times 10^{18}$ 年 | | $168$ | $2^{168} = 3.7 \times 10^{50}$ | $2^{167} \mu s = 5.9 \times 10^{36}$ 年 | $5.9 \times 10^{30}$ 年 | ::: **窮舉式金鑰搜尋攻擊範例** 一個實際的攻擊範例是使用 Microsoft Office 或 WinZip 等常見工具建立一個加密檔案(密文) 。接著,可以使用 ElcomSoft 公司的家用工具(例如 Advanced Office Password Recovery)來進行窮舉式金鑰搜尋(暴力破解攻擊),以還原明文和金鑰 。請注意,為避免觸法或不道德的行為,僅應在您自己擁有或獲得明確授權的檔案上進行測試 。 <br> ## 03 密碼系統的分類 密碼系統可依據三個規則進行分類,其中最常用的是依「金鑰數量」分類 。 - **依轉換方式:** 1. **代換法 (Substitution)**:將原始字母替換為其他字母 。例如:Pigpen Cipher。 ![截圖 2025-10-01 晚上11.26.20](https://hackmd.io/_uploads/ByYX_T52xe.png) 3. **換位法 (Transposition)**:將原始字母重新排列順序 。例如:Rail Fence Cipher。 ![截圖 2025-10-01 晚上11.26.54](https://hackmd.io/_uploads/H1YrOT52ee.png) - **依金鑰數量**:在實務上最常見。 1. **秘密金鑰密碼學 (Secret-Key Cryptography)**:又稱**對稱式加密 (Symmetric Encryption)**。加解密使用同一把金鑰 。其安全性仰賴通訊雙方共享一個秘密 。 2. **公開金鑰密碼學 (Public-Key Cryptography)**:又稱**非對稱式加密 (Asymmetric Encryption)**。加解密使用不同的金鑰(公鑰與私鑰)。其安全性仰賴通訊雙方擁有共同的信任資訊 。 - **依處理方式:** 1. **區塊加密 (Block Cipher)**:將明文分塊處理 。例如 DES、Triple DES、IDEA、AES 。**(最廣泛使用)** :::info **注意事項**:區塊加密法的設計特性 1. **迷惑性 (Confusion)**:金鑰與明文、密文之間的關係不易被分析 。 2. **擴散性 (Diffusion)**:明文或金鑰中的任何一個位元發生改變,都可能影響到密文中的所有位元 。 3. **規則性 (Regularity)**:易於實現 。 4. **簡單性 (Simplicity)**:計算速度快 。 5. **相似性 (Similarity)**:加密與解密的設計相同,可降低成本 。 ::: 3. **串流加密 (Stream Cipher)**:逐位元或位元組處理明文 。例如 RC4 。 4. **區塊加密操作模式 (Block Cipher Mode of Operation)**:例如 ECB、CBC、CFB、OFB 。 5. **基於密碼的密碼學 (Password-based Cryptography)**:例如 PKCS #5 。 <center> | 特性比較 | 秘密金鑰 (對稱式) | 公開金鑰 (非對稱式) | | :--: | :--: | :--: | | 功能 | 保護機密資訊、驗證身份、確保完整性 | 保護機密資訊、數位簽章 | | 優點 | 速度快、金鑰短、計算需求低 | 金鑰分配管理簡單、可提供不可否認性 | | 缺點 | 金鑰分配問題、多人通訊時金鑰數量過多、無法提供不可否認性 | 速度慢、金鑰長、計算需求高 | </center> 由於效能差異懸殊(硬體實現的 DES 比 RSA 快約 1000 倍),實務上常採用**混合型密碼系統**:使用公開金鑰系統來傳遞秘密金鑰,再用秘密金鑰加解密大量訊息 。 :::success **重點筆記** - **對稱式加密 (Symmetric Encryption)**:當加密金鑰 $K_1$ 與解密金鑰 $K_2$ 相同時($K_1 = K_2$),此系統稱為對稱式加密 。此時,$K_1$和$K_2$都被稱為秘鑰 (secret keys) 。 - **非對稱式加密 (Asymmetric Encryption)**:當加密金鑰 $K_1$ 與解密金鑰 $K_2$ 不同時($K_1 \neq K_2$),此系統稱為非對稱式加密 。此時,$K_1$ 被稱為公鑰 (public key),$K_2$ 被稱為私鑰 (private key) 。 ![截圖 2025-10-01 晚上11.39.52](https://hackmd.io/_uploads/BJQUjacnlg.png) ::: ### 03-01 密鑰加密 **資料加密標準 (Data Encryption Standard, DES)** - 1976 年,美國國家標準暨技術研究院 (NIST) 宣布 DES 為資料加密標準 。 - 此演算法採用 16 回合的操作,包含擴展轉換、位元加法、替換及排列 。 - 安全性: 1. DES 的金鑰長度為 56 bits 。 2. 若破解速度為每秒 $10^6$ 個金鑰,透過暴力破解需要大約 3000 年的時間 。 3. 然而,若使用 100 萬台電腦平行運算,破解時間將縮短至約 26.28 小時 。 ![截圖 2025-10-01 晚上11.46.31](https://hackmd.io/_uploads/SJfypp9hxl.png) **三重 DES (Triple DES)** - Triple DES 是一種 DES 的強化版本,有兩種金鑰模式 : 1. $K_1 \neq K_2 \neq K_3$,金鑰長度為 168 bits 。 2. $K_1 = K_3 \neq K_2$,金鑰長度為 112 bits 。 ![截圖 2025-10-01 晚上11.46.54](https://hackmd.io/_uploads/Sy5xTp5ngl.png) **進階加密標準 (AES)** - AES 由兩位比利時密碼學家 Vincent Rijmen 和 Joan Daemen 於 2000 年開發 。 - 它支援 128、160、192、224、256 bits 的金鑰大小 。 - 2002 年,NIST 宣布 AES 為新的資料加密標準 。 - 其常見變體包含 AES-128 (10 回合)、AES-192 (12 回合) 及 AES-256 (14 回合) 。 - AES 的特性是需要較少的記憶體且效率高 。 ### 03-02 公鑰加密 **基本概念** - 非對稱式密碼學基於數學上的困難問題,使其運算速度較慢 。然而,它無需進行金鑰分發,使其適合加密小量資料,例如對話金鑰 (session keys) 或用戶的個人資訊 。 - 常見的演算法範例有 RSA、ElGamal 等 。 - 無論是非對稱式加密或數位簽章 (digital signature),都會使用一對公鑰與私鑰 。 - **數位憑證 (Digital Certificate)**:若一個使用者的公鑰經過認證(由一個受信任的憑證機構之私鑰所簽署),它便可用於身分鑑別 (authentication) 。 **基礎數學原理** - **常見的數學運算**:有限體 (Finite Field) :::success **代數 (Algebra) 的定義與性質** - 群 (Group):一個集合配備單一運算,且滿足封閉性、結合性、單位元素及反元素等性質 。 - 交換群 (Commutative Group / Abelian Group):一個群若額外滿足交換性 (commutative property),則稱為交換群 。 - 體 (Field):一個集合配備兩種運算(例如 + 和 ×),並滿足以下條件 : 1. 在加法 + 運算下,它形成一個交換群 。 2. 在乘法 × 運算下,排除加法單位元素後,它形成一個群 。 3. 乘法對加法滿足分配律,即 a×(b+c)=(a×b)+(a×c)。 **有限體 (Finite Field)** - 定義:有限體,又稱為伽羅瓦域 (Galois Field),是一個僅包含有限個元素的體 。其元素的數量稱為它的階 (order) 。 - 在密碼學中的應用:許多密碼學的原始元件都是定義在伽羅瓦域 (GF) 之上 。 - 存在性:對於每一個質數 p 和每一個正整數 n,都存在一個唯一的有限體 $GF(p^n)$。 - 常見的伽羅瓦域: 1. $GF(p)$ :其運算可視為模 $p (mod p)$ 的運算 。 2. $GF(2^n)$ :其運算可視為模一個 $(n−1)$ 次多項式的運算 。 ::: - **主要的數學困難問題** 1. **背包問題 (Knapsack Problem)** 2. **質因數分解問題 (The Factoring Problem)**:由 Rivest、Shamir 和 Adleman 提出的 RSA 演算法 (1977年) 基於此問題 。 3. **離散對數問題 (Discrete Logarithm Problem)** :Diffie 和 Hellman (DHKE, 1976年) 。ElGamal (1985年) 。 4. **橢圓曲線 (Elliptic Curve) 離散對數問題**:由 Koblitz 和 Miller 提出的 ECC (1985年) 基於此問題 。 5. **容錯學習問題 (Learning with Errors Problem)** :由 Oded Regev 於 2005 年提出 。 :::success **常見的數學運算是** - **Modular Reduction (模運算)**:𝑏 = 𝑎 (mod 𝑛) - **Modular Multiplication (模乘法)**:𝑐 = 𝑎 × 𝑏 (mod 𝑛) - **Modular Exponentiation (模指數運算)**:𝑐 = 𝑎𝑏 (mod 𝑛) - **Modular Multiplicative Inverse (模運算的乘法反元素)**:Find 𝑏 (commonly denoted as 𝑎−1) such that 𝑎 × 𝑏 = 1 (mod 𝑛) ::: <br> ## 04 公開金鑰密碼學與其應用 公開金鑰密碼學的安全性基於數學困難問題 。 - **核心數學問題**:單向函數 (One-way Function):一個函數 `y=f(x)`,計算 `f(x)` 很容易,但從 `y` 反推 `x` ($f^{-1}(y)$)很困難 。 - **單向暗門函數 (One-way Trapdoor Function)**:在單向函數的基礎上,若掌握額外資訊(暗門),則反推 `x` ($f^{-1}(y)$) 會變得很簡單 。 - **常見的困難問題:** 1. **背包問題 (Knapsack Problem)**:給定 $S = m_1B_1 + m_2B_2 + ... + m_nB_n$,計算 $S$ 很容易,但反而找出 $m_1, m_2, ..., m_n$ 很困難。 2. **質因數分解問題 (The Factoring Problem)**:將一個大數分解成兩個質數的乘積很困難 。RSA 演算法基於此問題 。給定 $N=p×q$,將兩個質數 $p$ 和 $q$ 相乘很容易,但將 $N$ 分解回質因數卻很困難 。 4. **離散對數問題 (Discrete Logarithm Problem, DLP)**:在 $y=g^x(mod p)$ 中,已知 $y$、$g$、$p$ 要反推 $x 很困難 。Diffie-Hellman 金鑰交換基於此問題 。橢圓曲線可用來建構基於離散對數問題的密碼系統 。 5. **容錯學習問題 (Learning with Errors, LWE)**:從許多帶有微小誤差的線性方程組中反推出秘密向量很困難 。這是許多後量子密碼學的基礎 。 :::success **重點筆記**:容錯學習問題補充 - 給定許多向量配對 $(A_i, b_i)$ ,滿足 $b_i = A_i \cdot s + e_i (mod q)$,其中 $A_i$ 是矩陣,$s$ 是秘密向量,$e_i$ 是微小的錯誤向量 。若已知 $s$,計算 $b_i$ 很容易,但從這些帶有雜訊的方程式中還原 $s$ 卻很困難 。 - LWE 問題構成了許多實用的、基於晶格 (lattice-based) 的後量子密碼系統的計算基礎,例如 ML-KEM(通用加密)和 ML-DSA(數位簽章) 。 ::: ### 04-01 金鑰交換協定: **目標 (Objective)**:允許使用者在公開的通道上交換秘密資訊。 **使用情境 (Usage Scenario)**:指的是兩個或多個使用者透過公開通道建立一個對話金鑰 (session key) 的程序。這個對話金鑰通常是對稱式加密系統中使用的秘鑰 ,並且可以在每次對話時更新以確保安全 。 **代表性系統 (Representative System)**:Diffie-Hellman (DH) 金鑰交換系統。它基於 Ralph Merkle 提出的概念,Merkle 是 Hellman 在史丹佛大學指導的博士生。此協定也被稱為金鑰協商 (Key Agreement) 或金鑰測定 (Key Determination) 協定。 :::success **重點筆記**: - **起源**:金鑰交換協定的想法最初由 Ralph Merkle 於 1974 年在一場大學講座中提出,並在他就讀研究所期間的 1978 年發表 。 - 目標:讓 Alice 和 Bob 能在一個公開的網路上建立一個共同的秘密金鑰,同時讓竊聽者 Eve 在計算上難以取得此金鑰 。 - 假設:Alice 和 Bob 初始時沒有共享任何秘密金鑰 。 Alice 和 Bob 使用相同的對稱式加密演算法 。 每次加密或解密操作需要 $10^{-4}$ 秒。 **核心工具:謎題 (Puzzles)** - Merkle Puzzle 的核心工具是「謎題」,這是一種需要花費一些努力才能解決的問題 。 - **範例**:一個謎題的解答 puzzle_key 可透過加密 $puzzle_{key} = E(key, "message")$ 得到,其中 $key$ 的格式為 $0^{96} || b_1...b_{32}$。 - **目標**:解決謎題的目標是嘗試所有 $2^{32}$ 種可能性來找出 $key$ 。 協定流程 - **Alice 準備謎題**: 1. Alice 準備 $2^{32}$ 個謎題。 2. 對於每個謎題 $i$,她會隨機選擇一個 32 位元的金鑰 $k_i$、一個 128 位元的謎題 ID $x_i$ 以及一個 128 位元的秘密 $s_i$。 她將這三者組合成明文 $M_{AB}||x_i||s_i$,並用金鑰 $k_i$ 加密,產生謎題 $puzzle_i$。 最後,Alice 將所有謎題 $puzzle_1, ..., puzzle_{2^{32}}$ 傳送給 Bob 。 - **Bob 解決謎題**: 1. Bob 從所有謎題中隨機選擇一個 $puzzle_j$。 2. Bob 嘗試所有可能的金鑰(暴力破解)來解密 $puzzle_j$,直到成功得到格式正確的明文 $M_{AB}||x_j||s_j$。 3. Bob 將謎題 ID $x_j$ 傳回給 Alice 。 - **建立共同秘密**: 1. Alice 透過查表,用 $x_j$ 找出對應的秘密 $s_j$。 2. 完成後, $s_j$ 就成為了雙方約定好的共享秘密金鑰 。 - **複雜度分析**:$n=2^{32}$ 1. **Alice**:需要準備 $n$ 個謎題,其工作量為 $O(n)$。 2. **Bob**:需要解決一個謎題,其工作量為 $O(n)$ 。 3. **竊聽者 Eve**:Eve 必須竊聽並解決平均一半的謎題才能找到 Bob 選擇的那一個,其工作量為 $O(n^2)$ 。 ![截圖 2025-10-02 中午12.54.29](https://hackmd.io/_uploads/HJmcrFj3gg.png) ![截圖 2025-10-02 中午12.54.54](https://hackmd.io/_uploads/S1coSYi2ge.png) ::: ### 04-02 代表性演算法與協議 **Diffie-Hellman (DH) 金鑰交換協議**: - 最早提出公開金鑰概念的協議之一,由 Diffie 和 Hellman 於 1976 年提出 。 - 允許兩方在一個不安全的公共頻道上,建立一個共享的秘密金鑰,而竊聽者無法輕易得知該金鑰 。 - 其安全性基於離散對數問題 。 - 以下兩個協定都採用了 Diffie-Hellman 金鑰協商系統: 1. Oakley 金鑰測定協定 (RFC 2412) 2. 網際網路協定的簡易金鑰管理 (SKIP) - 參數設定:在標準協定中,通常會使用固定的系統參數 。 1. 系統參數 (所有使用者預先共享的參數): - $p$:一個足夠大的質數,通常為 1024 bits 或以上 。 - $g$:模 $p$ 的一個原根 。 2. 使用者參數 : - 私鑰:$x$,其中 $x \in [1,p−1]$ 。 - 公鑰:$y$,計算方式為 $y=g^x(modp)$ 。 - 雙方金鑰協商流程 (Alice 與 Bob) 1. Alice 選擇一個秘密值 $x_a$ 並計算 $y_a = g^{x_a}(mod p)$。 2. Bob 選擇一個秘密值 $x_b$ 並計算 $y_b = g^{x_b}(mod p)$。 3. Alice 將 $y_a$ 傳送給 Bob,Bob 則將 $y_b$ 傳送給 Alice 。 4. Alice 計算共享金鑰:$k_{ab} = y_b^{x_a} (modp)$。 5. Bob 計算共享金鑰: $k_{ba} = y_a^{x_b} (modp)$。 6. 雙方計算出的金鑰是相同的,因為 $k_{ab} = y_b^{x_a} = (g^{x_b})^{x_a} = g^{x_ax_b} = (g^{x_a})^{x_b} = y_a^{x_b} = k_{ba} (mod p)$。 7. 一個竊聽者即使知道 $y_a$ 和 $y_b$,若無法解決離散對數問題,就無法推導出共享金鑰 $k_{ab}$ 或 $k_{ba}$。 - 多方金鑰協商 1. 若有 $N$ 個參與者,則必須重複進行 $N−1$ 次資料交換才能建立一個共享金鑰 。 2. 例如,三個參與者需要經過 2 回合 (passes) 的交換才能建立共享金鑰 。 ![截圖 2025-10-02 下午1.17.34](https://hackmd.io/_uploads/Sk3xoti2xx.png) **RSA 加密演算法:** - 簡介:RSA 是由 Ron Rivest、Adi Shamir 和 Leonard Adleman 三位學者於 1977 年在麻省理工學院 (MIT) 工作時共同提出的,並以他們姓氏的第一個字母命名 。 - 它的安全性基於分解大質因數的困難性 。若使用足夠長的金鑰,目前使用傳統電腦在計算上是無法破解的 。 - 演算法範例 1. 選擇兩個質數:$p=17, q=11$ 。 2. 計算 $N$ 與 $\Psi(N)$:$N=p \times q=187$、$\Psi(N)=(p−1)(q−1)=160$ 3. 選擇公鑰 $e$:選擇 $e=7$($e$ 必須與 $\Psi(N)$ 互質)。 4. 計算私鑰 $d$:計算 $d=23$,使其滿足 $e \cdot d=1(mod \Psi(N))$ 。 5. 加密:將明文 $M$ 加密為密文 $C=M^e(modN)$。例如,加密 $M=88$:$C=88^7(mod187)=11$ 6. 解密:將密文 $C$ 解密還原為明文 $M=C^d(modN)$。例如,解密 $C=11:M=11^{23} (mod187)=88$ 。 - 安全性基於質因數分解的困難度、廣泛應用於加密與數位簽章 。 :::success **重點筆記**:**質因數分解問題 (The Factoring Problem)** - 由於 $\Psi(N)=(p−1)(q−1)$,若公鑰參數 $N$ 的兩個質因數 $p$ 和 $q$ 被找出,那麼 $\Psi(N)$ 就不再是秘密 。 - 因為公鑰 $e$ 是公開的,且滿足 $e \cdot d≡1(mod \Psi(N))$,所以一旦知道 $\Psi(N)$,攻擊者就可以使用歐幾里得演算法 (Euclidean algorithm) 來計算出私鑰 $d$ 。 - 因此,如果質因數分解可以被有效率地執行,RSA 密碼系統將完全沒有安全性可言 。 - 分解小數字很簡單(例如 $15=3 \times 5$),但分解極大的數字則非常困難 。 ::: ### 04-03 延伸應用 **數位簽章與憑證 (Digital Signature and Certificate)**:使用私鑰對訊息摘要進行簽署,接收方可用公鑰驗證簽章,以確認訊息來源與完整性 。 - 盲簽章 (Blind Signature):簽署者在不知道訊息內容的情況下進行簽署 。此技術可用於保護隱私,如電子投票或數位現金 。盲簽章是一種數位簽章,最早由 David Chaum 於 1983 年提出 。 - 在簽署前,訊息的內容對簽署者是隱藏的 。 - 簽署完成後的盲簽章,可以在原始、未盲化的訊息上進行公開驗證,如同一般的數位簽章一樣 。 - 由於簽署者和訊息作者是不同的實體,盲簽章能有效保護隱私,其應用範例包含電子投票與數位現金 。 - 運作流程 : 1. Alice 擁有一對 RSA 金鑰 $(e,d)$ 。 2. Bob 擁有訊息 $m$ 和一個隨機數 $r$ 。 3. Bob 計算 $m' = m \cdot r^e (modN)$ 並將其傳送給 Alice 。 4. Alice 對收到的 $m'$ 進行簽署,得到 $s' = (m')^d = m^d \cdot r (mod N)$,並將 $s'$ 傳回給 Bob 。 5. Bob 移除盲化因子,得到原始訊息的簽章 $s = s' \cdot r^{-1} = m^d (mod N)$。 **模糊傳輸 (Oblivious Transfer)** - 由 Michael Rabin 於 1981 年提出,模糊傳輸允許一方傳送一個位元給另一方,接收方有 50% 的機率取得該位元,另有 50% 的機率什麼也收不到 。 - 這種「二選一」的機率性傳輸協定主要基於 RSA 和二次剩餘問題,並結合一個僅發送方知道的隨機值 。 - 此概念可擴展為「n 選一」或「n 選 t」的模糊傳輸,在過程中需確保正確性,並保護 Alice (發送方) 與 Bob (接收方) 的隱私 。 1. **1-out-of-n** ![截圖 2025-10-03 上午11.09.32](https://hackmd.io/_uploads/Hkud0hhnle.png) 2. **t-out-of-n** ![截圖 2025-10-03 上午11.11.04](https://hackmd.io/_uploads/ByX0Ch33el.png) :::success **重點筆記**:資料來源 - **1-out-of-n**:M. Naor and B. Pinkas, “Oblivious transfer and polynomial evaluation,” In Proceedings of the Thirty-First Annual ACM Symposium on Theory of Computing, pp. 245-254. 1999. - **t-out-of-n**:O. Wakaha and S. Ryota, “k out of n Oblivious transfer without random oracles,” IEICE Transactions on Fundamentals of Electronics, Communications and Computer Sciences 87(1): 147-151, 2004. ::: **零知識證明 (Zero-Knowledge Proof)** - 一方(證明者)可以向另一方(驗證者)證明他/她擁有某些資訊的知識,而無需向驗證者揭露該資訊的實際內容 。 ![截圖 2025-10-03 上午11.12.47](https://hackmd.io/_uploads/HkiNJTn3gg.png) :::success **重點筆記**:資料來源 - J.-J. Quisquater, L. C. Guillou, and T. A. Berson, “How to explain zero-knowledge protocols to your children,” CRYPTO' 89 Proceedings, Lecture Notes in Computer Science, vol. 435, pp. 628–631, 1990. ::: **同態加密 (Homomorphic Encryption)**:允許在密文上直接進行運算,解密後的結果與在明文上運算的結果相同 。適用於雲端安全計算等場景 。 - 由美國密碼學家 Craig Gentry 於 2009 年首次提出,同態加密允許在密文上執行某些運算,而無需將其解密為明文 。 - 主要類型 : 1. 全同態加密 (FHE):支援在密文上進行加法與乘法運算 。 2. 部分同態加密 (PHE):僅支援一種運算(通常是加法或乘法) 。 3. 基於屬性的同態加密 (ABHE):基於資料的屬性而非特定密文進行計算 。 - 主要應用:包含雲端安全運算、隱私保護資料分析及安全多方計算 。 - 實作範例:使用 RSA 很容易實現乘法同態加密 。對於兩個明文 $m_1$ 和 $m_2$,其同態性質如下:$E(m_1) \cdot E(m_2) = m_1^e \cdot m_2^e = (m_1 \cdot m_2)^e = E(m_1 \cdot m_2) (mod N)$。 <br> ## 05 單向雜湊函數 (One-Way Hash Function) **定義**:一種能將任意長度的輸入資料,轉換為**固定長度**輸出的函數 。 **功能與用途** - **功能**:給定一個任意長度的輸入 $x$,單向雜湊函數可以計算出一個固定長度的輸出 $h(x)$ 。 - 用途:常與數位簽章一起使用,以提升簽章速度並增強安全性 。 - 常見範例:MD5、SHA-1、SHA-2 等 。 **演算法結構** - 單向雜湊演算法的建構方法稱為 Merkle–Damgård 結構 。 - MD5、SHA-1 和 SHA-2 等演算法都使用了這種結構 。 **特性:** 1. **易於計算**:對於任意輸入 `x`,計算 `H(x)` 使其硬體和軟體實現都切實可行 。 2. **單向性 (Pre-image Resistance)**:已知輸出 `h`,要找到一個輸入 `x` 使得 `H(x)=h` 是不可行的 。 3. **弱碰撞抵抗 (Second Pre-image Resistance)**:已知輸入 `x`,要找到另一個不相等的輸入 `y` 使得 `H(x)=H(y)` 是不可行的 。 4. **強碰撞抵抗 (Collision Resistance)**:要找到任意一對相異的輸入 `(x,y)` 使得 `H(x)=H(y)` 是不可行的 。 **使用單向雜湊函數進行訊息鑑別**:有三種主要方式可以利用雜湊函數來驗證訊息的完整性與來源 1. **使用傳統加密**:將訊息的雜湊值用對稱式金鑰加密後傳送 。 ![截圖 2025-10-03 上午11.19.19](https://hackmd.io/_uploads/SJrTeTn3ex.png) 2. **使用非對稱式加密 (數位簽章)**:將訊息的雜湊值用私鑰加密(簽章)後傳送 。 ![截圖 2025-10-03 上午11.19.44](https://hackmd.io/_uploads/ByiAg6nnlg.png) 4. **使用秘鑰 (HMAC)**:將秘鑰與訊息結合後進行雜湊運算,產生訊息鑑別碼 。 ![截圖 2025-10-03 上午11.20.01](https://hackmd.io/_uploads/Sknk-6n2xe.png) <br> ## 06 E-Commerce **電子支票 (E-Check)**:電子支票是一種**先交易後付款(Post-Transaction Payment)**的支付方式,**適合金額較大的交易(Suitable for High-Value Transactions)** 。它利用基於非對稱式密碼學的數位簽章來達成**簽名效果(Signature Effect)**,並透過**數位憑證(Identity Verification)** 確認付款人與銀行的身分 。 - 交易流程 : 1. 消費者選擇商品並以電子支票付款 。 2. 線上商店驗證支票 。 3. 商店出貨 。 4. 商店存入電子支票 。 5. 進行清算與結算 。 6. 更新帳戶紀錄 。 ![截圖 2025-10-03 上午11.30.15](https://hackmd.io/_uploads/HJNIXpn2el.png) **電子旅行支票 (E-Traveler’s Check)**:相較於傳統旅行支票使用護照和簽名進行驗證,可能因護照**仿冒(Forged passport)**而導致**盜領(Fraudulent withdrawal)**,電子旅行支票採用智慧卡和生物辨識(如聲紋、指紋)等方式 。它是一種先付款的預付形式 ,並使用非對稱式密碼學的數位簽章 。 - 交易流程 : 1. 憑證發行 。 2. 購買電子旅行支票 。 3. 提出兌換請求 。 4. 提出驗證請求 。 5. 核准貸款/付款 。 6. 現金轉帳 。 7. 金額結算 。 ![截圖 2025-10-03 上午11.32.46](https://hackmd.io/_uploads/r1tyVpnnxx.png) **電子競標 (E-Auction)** - 英式拍賣 (English Auction):從低價開始,價格遞增,出價最高者得標 。賣家可設定底價 。例如 eBay、Amazon Auctions 。 - 荷式拍賣 (Dutch Auction):從高價開始,價格遞減,第一個接受當前價格的投標者得標 。 - 封閉式拍賣 (Sealed-bid Auction):每位投標者提交機密標單,互不知曉對方出價 。此模式通常採用數位簽章和通訊金鑰來增強安全性 。 ![截圖 2025-10-03 上午11.33.06](https://hackmd.io/_uploads/rJRg4pnnxg.png) **電子投票 (E-Voting)**:相較於傳統投票有時間、地理限制且開票慢的缺點 ,電子投票具有可在任何時間、任何地點進行且效率高的優點 。 - 安全特性 : 1. 合法性 (Legitimacy):透過非對稱式密碼學達成 。 2. 正確性 (Correctness):透過 AES 等對稱式加密達成 。 3. 匿名性 (Anonymity):透過盲簽章達成 。 ![截圖 2025-10-03 上午11.33.36](https://hackmd.io/_uploads/SJizEp3nge.png) **其他相關研究領域** - **秘密分享 (Secret Sharing)**:將一個秘密 `S` 分割成 `n` 份,需要集滿 `t` 份($t \le n$) 才能還原秘密,而少于 `t` 份則無法獲得任何關於秘密的資訊 。 - **視覺密碼學 (Visual Cryptography)**:將秘密影像分解成數張看似雜亂無章的圖片(透明片),將這些圖片疊加後,即可用肉眼直接辨識出原始的秘密資訊 。 - **資訊偽裝學 (Steganography)**:將秘密訊息隱藏在一個正常的載體(如圖片、音訊、影片)中,使其不被察覺 。例如,LSB (最低有效位) 方法就是將秘密訊息的位元嵌入到圖片像素值的最低位元中 。