---
# System prepended metadata

title: 【密碼學 XI - Data Integrity & Authentication】

---

 # 【密碼學 XI - Data Integrity & Authentication】

## 01. 資料安全基礎概念
本章節介紹資料安全中兩個核心且相關的概念：完整性與認證。

### 01-01. 資料完整性 (Data Integrity)
**定義**：確保資料在傳輸或儲存過程中保持原樣，未被未授權的手段竄改（如插入、刪除或修改）的一種機制 。

**檢測方式**：通常將資料與其雜湊值 (Hash value) 進行比對，以確認其完整性 。

**與資料安全的關係**：資料安全 (Data Security) 旨在防止未授權存取或破壞，是確保資料完整性的必要條件 。
:::success
**重點筆記**：你下載一個 1GB 的遊戲安裝檔。網站提供了一個 MD5 或 SHA-256 驗證碼。下載完成後，你計算檔案的雜湊值，如果跟網站上的一樣，代表檔案沒有破損或被植入病毒；如果不同，代表**資料完整性**已受損。
:::
### 01-02. 資料認證 (Data Authentication)
**定義**：確保接收到的資料確實是由聲稱的授權實體 (Authorized entity) 所發送的 。

**重要性**：資料完整性與認證是相輔相成的，必須確認來源正確且內容未變，溝通才算安全 。

<br>

## 02. 單向雜湊函數 (One-Way Hash Functions)
數位簽章的基礎技術，用於將任意長度的訊息壓縮成固定長度的「指紋」。

### 02-01. 雜湊函數 $H(M)$ 的特性
雜湊函數 $H$ 接受變動長度的資料區塊 $M$ 作為輸入，並產生固定長度的雜湊值 $h = H(M)$。只要輸入 $M$ 中的任何一個位元 (bit) 改變，輸出的雜湊值 $h$ 就會有極高機率發生改變：
1.  **適用性**：可對任意大小的資料區塊進行運算。
2.  **固定輸出**：無論輸入多長，輸出長度固定（例如 SHA-256 永遠輸出 256 bits）。
3.  **計算容易**：給定 $x$，計算 $H(x)$ 非常快（軟硬體皆宜）。
4.  **單向性 (One-way / Pre-image resistance)**：給定雜湊值 $h$，要在計算上不可行（非常難）反推出原始輸入 $x$ 使得 $H(x)=h$。
5.  **抗弱碰撞 (Weak Collision Resistance)**：給定一個輸入 $x$，很難找到另一個不同的輸入 $y$ ($y \neq x$) 使得 $H(y) = H(x)$。
6.  **抗強碰撞 (Strong Collision Resistance)**：很難找到任意一對不同的輸入 $(x, y)$，使得它們的雜湊值相同 $H(x) = H(y)$。

### 02-02. 雜湊函數的應用
- 數位簽章 (Digital Signatures)：本章重點應用 。
- 訊息認證 (Message Authentication) 。
- 入侵與病毒偵測：比對系統檔案的雜湊值是否發生異常變化 。
- 偽亂數產生器 (PRNG)：利用雜湊的不可預測性來產生亂數 。

:::success
**重點筆記**：網站儲存你的密碼時，不會存明碼 (如 "123456")，而是存它的雜湊值。當你登入時，系統把你輸入的密碼拿去雜湊，如果結果跟資料庫裡的一樣，就讓你登入。因為單向性，駭客就算偷走資料庫裡的雜湊值，也算不出你的原始密碼是 "123456"。
:::

<br>


## 03. 數位簽章 (Digital Signatures)
數位簽章是紙本簽名的電子版，利用公開金鑰加密系統來實現。

### 03-01. 數位簽章的核心需求
一個有效的數位簽章必須滿足以下條件：
1.  **完整性 (Integrity)** - **不可偽造 (Unforgeability)** ：確保訊息內容、日期、時間未被竄改。
2.  **身份鑑別性 (Authentication)** - **不可偽冒 (Non-Impersonation)**：確認簽署者的身分是真的，不是冒充者。
3.  **不可否認性 (Non-Repudiation)** - **不可抵賴 (Irrefutability)**：簽署者事後不能否認「我沒簽過這份文件」。如有爭議，可由第三方（仲裁者）驗證。

### 03-02. 數位簽章的法律與應用規範 (Laws and Regulations) 
![截圖 2025-12-16 晚上10.32.03](https://hackmd.io/_uploads/HJxdT1k7Wl.png)

除了技術層面，數位簽章在法律與實務應用上也有明確的規範，特別是在金融與證券交易領域。

**電子簽章法 (Electronic Signatures Act)**
- 主管機關：數位發展部 (Ministry of Digital Affairs) 。
- 修訂日期：最近一次修訂於 2024 年 5 月 15 日 。 
- 地位：賦予電子簽章與紙本簽名同等的法律效力。 

**證券交易應用規範** 
- 依據：臺灣證券交易所 (TWSE) 訂定的「證券商使用數位簽章作業要點」。
- 緊急應變要求：根據法規（如第四條），使用電子憑證系統的證券商，必須制定緊急應變計畫，以避免因系統故障導致下單失敗，進而影響投資人的權益 

:::success
**重點筆記**：想像股市大跌時，大家瘋狂用 App 下單賣股票。如果證券商的數位簽章驗證系統突然當機，導致大家無法下單賠大錢，證券商不能雙手一攤說「系統壞了」。根據法規，他們必須事先準備好「備案」（緊急應變計畫），比如切換到備用伺服器或提供電話人工下單的快速通道，確保投資人不會因為技術故障而權益受損。
:::

### 03-03. 公鑰數位簽章的方法 (Methods of Public-Key Digital Signatures)
數位簽章主要依賴公開金鑰加密技術（Public-Key Cryptography），其運作流程與加密相反：由私鑰簽署，公鑰驗證。以下是幾種常見的實作方法：

**常見演算法列表**：根據講義歸納，主要的公鑰數位簽章方法包括
1. RSA 數位簽章 (RSA Digital Signature)：最經典，基於質因數分解。
2. Rabin 數位簽章 (Rabin Digital Signature)：驗證速度快，基於二次剩餘。
3. ElGamal 數位簽章 (ElGamal Digital Signature)：基於離散對數問題。
4. Schnorr 數位簽章 (Schnorr Digital Signature)：ElGamal 的改良版，效率較高。
5. 數位簽章演算法 (DSA)：NIST 制定的標準算法 (FIPS 186)。

**運作核心回顧**
1. 簽章 (Sign)：$Signature = Sign(Message, Private\_Key)$
2. 驗證 (Verify)：$Result = Verify(Signature, Message, Public\_Key)$
3. 特點：任何人都可以取得公鑰來驗證簽章，但只有持有私鑰的人才能產生有效簽章。
![截圖 2025-12-16 晚上10.38.00](https://hackmd.io/_uploads/BkNACk17be.png)



<br>

## 04. 常見的公鑰數位簽章演算法

### 04-01. RSA 數位簽章
這是最核心的簽章技術，利用 RSA 的數學特性（大數分解困難）來保證安全。
![截圖 2025-12-17 凌晨1.57.53](https://hackmd.io/_uploads/H1poaf1m-g.png)

**金鑰產生 (Key Generation)**：
- 準備兩個大質數 $p$ 與 $q$，計算 $n = p \times q$。
- 計算歐拉函數 $\phi(n) = (p-1) \times (q-1)$。
- 選擇一個公開指數 $e$，需滿足 $gcd(\phi(n), e) = 1$ 且 $1 < e < \phi(n)$。
- 計算私密指數 $d$，滿足 $d \times e \equiv 1 \pmod{\phi(n)}$ （即 $d$ 是 $e$ 的模反元素）。
- 結果：公開金鑰為 $\{e, n\}$，私密金鑰為 $d$。

**簽署 (Signing)：**
- 簽署者 (Alice) 想對訊息 $M$ 簽章（需滿足 $M < n$）。使用 私鑰 $d$ 計算簽章 $S$：$$S \equiv M^d \pmod n$$
- 驗證 (Verification)：接收者使用 Alice 的 公鑰 $\{e, n\}$ 來驗證。計算 $M'$：$$M' \equiv S^e \pmod n$$
- 判斷：如果算出來的 $M'$ 等於原始訊息 $M$，則驗證成功。

:::success
**重點筆記**：選兩個質數：$p = 17, q = 11$, $n = 17 \times 11 = 187$, $\phi(n) = 16 \times 10 = 160$。
- 選公鑰 $e = 7$ （因為 7 與 160 互質）。
- 計算私鑰 $d = 23$ （因為 $23 \times 7 = 161$，除以 160 餘 1，符合 $de \equiv 1 \pmod{160}$）。
- 金鑰配對：公鑰 $\{7, 187\}$，私鑰 $d = 23$。
- **實際操作：**
    1. 簽署：假設訊息 $M = 88$。$$S = 88^{23} \pmod{187} = 11$$Alice 發送簽章 $S = 11$。
    2. 驗證：Bob 收到 $S = 11$，用公鑰 $e=7$ 驗證。$$M' = 11^7 \pmod{187} = 88$$因為 $88 = M$，驗證成功！
:::

**同時達成保密與認證**：如果我們希望訊息在傳輸過程中既 **安全不被偷看 (Confidentiality)**         又能 **證明是誰寄的 (Authentication)**，就需要結合兩組金鑰對。
- **所需的金鑰**：Alice 的金鑰對：$\{(e_A, n_A), d_A\}$、Bob 的金鑰對：$\{(e_B, n_B), d_B\}$
- **操作流程 (Sign then Encrypt)**：
    1. 簽署 (Sign)：Alice 先用 自己的私鑰 $d_A$ 對訊息 $M$ 簽章。$$S = M^{d_A} \pmod{n_A}$$
    2. 加密 (Encrypt)：Alice 再用 Bob 的公鑰 $e_B$ 對剛才的簽章結果 $S$ 進行加密。$$C = S^{e_B} \pmod{n_B}$$
    3. 傳輸：將密文 $C$ 傳送給 Bob。
    4. 解密 (Decrypt)：Bob 先用 自己的私鑰 $d_B$ 解開密文，得到 $S'$。$$S' = C^{d_B} \pmod{n_B}$$
    5. 驗證 (Verify)：Bob 最後用 Alice 的公鑰 $e_A$ 驗證簽章，得到明文 $M'$。$$M' = (S')^{e_A} \pmod{n_A}$$
![截圖 2025-12-16 晚上10.53.13](https://hackmd.io/_uploads/rkrvMly7Wg.png)

:::success
**重點筆記**：生活實例
1. 簽名：Alice 寫完信，先在信末蓋上自己的「私章」。(證明是 Alice 寫的)
2. 封裝：Alice 再把信放進一個只有 Bob 能開的「保險箱」裡寄出去。(確保沒人能偷看)
3. 開箱：Bob 收到後，先用自己的鑰匙打開保險箱。(解密)
4. 驗信：拿出信，檢查上面的私章是不是 Alice 的。(驗證)
:::

**雜湊與簽章的結合 (Reducing Complexity)**：直接對長篇大論的原始文件進行 RSA 指數運算非常慢且消耗資源。
- 解決方案：先雜湊，再簽章 (Hash then Sign)。
    1. 使用單向雜湊函數 $H$ 將長訊息 $M$ 壓縮成固定長度的摘要 $m$。$$H(M) = m$$
    2. 簽署者只需對這個短小的 $m$ 進行簽章。
- 優點：大幅減少運算時間、大幅減少簽章後的儲存空間。
- 安全要求：雜湊函數必須具備 抗碰撞 (Collision Resistance) 特性，防止攻擊者找到兩個不同的訊息產生相同的雜湊值，進而偽造簽章。

:::success
**重點筆記**：你有一份 1000 頁的合約要公證。
- 笨方法：公證人把每一頁都蓋上鋼印（運算慢、手會痠）。
- 聰明方法 (雜湊後簽章)：你用果汁機把 1000 頁合約打成一杯獨一無二的「合約果汁」(Hash)。公證人只需要在裝果汁的杯子上蓋一個章就好。只要果汁的味道沒變，就代表原本的 1000 頁合約沒被改過。
:::

### 04-02. Rabin 數位簽章
Rabin 簽章系統的特點在於其數學運算基於「平方」與「平方根」。對電腦來說，計算平方非常快，這使得 Rabin 的驗證過程比 RSA 快得多。

**系統參數 (System Parameters)**：與 RSA 相同，需要準備兩個大質數 $p$ 與 $q$ 。

**金鑰分配**
1. 私鑰 (Private Key)：簽署者 (Alice) 保留 $p$ 與 $q$。
2. 公鑰 (Public Key)：Alice 計算 $n = p \times q$，並將 $n$ 公開。

**簽署流程 (Signing)**
1. 確認資格：對於訊息 $m$ ($0 < m < n$)，必須確認它是 $p$ 和 $q$ 的二次剩餘 (Quadratic Residue, QR)。簡單來說，就是要確保 $m$ 在模數運算下「開得了根號」。
2. 映射 (Mapping)：如果 $m$ 不能直接開根號（不是 QR），則需要透過特定函數 $f$ 將其轉換為 $m'$，使其成為 QR 。
3. 計算簽章：Alice 使用私鑰 ($p, q$) 計算 $m'$ 的平方根，得到簽章 $S$ 6。$$S = \sqrt{m'} \pmod n$$

**驗證流程 (Verification)**
1. 驗證者 (Bob) 只需要做一次平方運算：計算 $S^2 \pmod n$。
2. 如果計算結果等於訊息 $m'$，則簽章有效。

**安全性分析 (Security Analysis)**
1. 其安全性在數學上被證明等同於大數質因數分解 (Integer Factorization) 的困難度。
2. 弱點：與 Rabin 加密系統一樣，它容易受到選擇密文攻擊 (Chosen-Ciphertext Attack) 的影響 。

:::success
**重點筆記**：數學魔術
- 設定：Alice 的公鑰 $n = 15$ (私鑰是 3 和 5)。
- 簽名 (開根號)：訊息是 $4$。Alice 算出 $4$ 的根號是 $2$ (因為 $2 \times 2 = 4$)。所以簽章是 $2$。
- 驗證 (平方)：Bob 收到簽章 $2$，他心算 $2$ 的平方 ($2^2$) 等於 $4$。跟原本的訊息一模一樣，驗證成功！
- 比較：RSA 驗證需要算 $S^e$ (比如 $S^{65537}$)，這需要做很多次乘法；而 Rabin 只要做一次乘法 ($S \times S$)，所以驗證速度飛快。
:::


### 04-03. ElGamal 數位簽章
ElGamal 簽章的安全性建立在求解離散對數的困難度上。與 RSA 不同，即使對相同的訊息簽署兩次，由於隨機數 $k$ 的存在，產生的數位簽章也會不同。

- **系統參數 (System Parameters)**：選擇一個大質數 $p$、選擇一個模 $p$ 的原根 (primitive root) $e_1$。這些參數是公開的
- **金鑰產生 (Key Generation)**：
    1. 私鑰 (Private Key)：簽署者 (Alice) 選擇一個整數 $d$，滿足 $1 < d < (p-1)$ 。
    2. 公鑰 (Public Key)：Alice 計算 $e_2 \equiv e_1^d \pmod p$。公開金鑰為 $(e_1, e_2, p)$ 。
- **簽署流程 (Signing)**：假設 Alice 要對訊息 $m$ 簽章：
    1. 選擇隨機數：隨機選一個整數 $k$，必須滿足 $gcd(k, p-1) = 1$ (即 $k$ 與 $p-1$ 互質) 。
    2. 計算 r：$r \equiv e_1^k \pmod p$ 。
    3. 計算 s：$s \equiv k^{-1}(m - dr) \pmod{p-1}$ 。
    4. 結果：訊息 $m$ 的數位簽章是數對 $(r, s)$ 。
- **驗證流程 (Verification)**：Bob 收到訊息 $m$ 與簽章 $(r, s)$ 後，進行以下檢查：
    1. 驗證方程式：$e_1^m \equiv e_2^r r^s \pmod p$ 。
    2. 若等式成立，則簽章有效。

:::success
**重點筆記**：帶有「亂數編號」的簽名
1. **情境**：ElGamal 就像是 Alice 在簽名時，每次都會擲骰子選一個「一次性密碼」($k$) 混進簽名裡。
2. **簽名**：Alice 要簽文件 $m$。她選了隨機密碼 $k$，算出了兩個神祕數字 $r$ 和 $s$。$r$ 跟隨機密碼有關，$s$ 則是把文件內容、私鑰和隨機密碼攪拌在一起的結果。
3. **驗證**：Bob 拿到 $(r, s)$。他不需要知道那個隨機密碼 $k$ 是多少，他只要把公鑰 ($e_2$)、簽章的一半 ($r$) 和另一半 ($s$) 放在天平右邊，把文件 ($m$) 放在左邊。根據數學魔法 (離散對數)，如果真的是 Alice 簽的，天平兩邊會剛好平衡 (等式成立)。
:::

### 04-04. Schnorr 數位簽章
Schnorr 簽章將雜湊函數整合進簽章產生過程中，使得簽章長度較短，且安全性與計算效率都優於 ElGamal。
- **系統參數 (System Parameters)**：
    1. 選擇兩個大質數 $p$ 和 $q$，需滿足條件：$q$ 是 $(p-1)$ 的因數 ($q|(p-1)$)，且 $q \ge 2^{160}$，$p \ge 2^{512}$。
    2. 選擇一個整數 $g$，使其滿足 $g^q \equiv 1 \pmod p$ 且 $g \neq 1$。
    3. 使用一個單向雜湊函數 $H(\cdot)$。
- **金鑰產生**
    1. 私鑰 (Private Key)：簽署者 (Alice) 選擇一個整數 $x$。
    2. 公鑰 (Public Key)：Alice 計算 $y \equiv g^x \pmod p$。
- **簽署流程 (Signing)假設 Alice 要對訊息 $m$ 簽章**：
    1. 選擇隨機數：隨機選擇整數 $k$ ($1 < k < q$)，並計算 $t \equiv g^k \pmod p$。
    2. 雜湊運算：計算 $r = H(t, m)$。這一步將隨機值資訊與訊息綁定。
    3. 計算 s：計算 $s \equiv k - xr \pmod q$。
    4. 結果：訊息 $m$ 的數位簽章是數對 $(r, s)$。
- **驗證流程 (Verification) Bob 收到訊息 $m$ 與簽章 $(r, s)$ 後**：
    1. 重建 t：計算 $t' = g^s y^r \pmod p$。(原理推導：$g^s y^r = g^{k-xr} (g^x)^r = g^{k-xr+xr} = g^k = t$)
    2. 驗證雜湊：檢查是否 $H(t', m) = r$。
    3. 若等式成立，則簽章有效。

:::success
**重點筆記**：拼圖驗證
1. **概念**：Schnorr 簽章就像是把「隨機數生成的暫時金鑰 ($t$)」和「文件 ($m$)」拍了一張合照 ($r$)。
2. **簽名**：Alice 用她的私鑰 ($x$) 和那個暫時金鑰的種子 ($k$) 算出一個數字 $s$。這個 $s$ 就像是一個神祕的指示。
3. **驗證**：Bob 拿到指示 $s$ 和合照 $r$。他利用公鑰 ($y$) 依照指示操作，如果操作結果能還原出當初那個暫時金鑰的樣子 ($t'$ )，且跟合照 ($r$) 裡的特徵一模一樣，那就證明指示 $s$ 真的是 Alice 給的。

:::


### 04-05. 數位簽章演算法 (DSA)
DSA 是由美國國家標準與技術研究院 (NIST) 提出的標準，主要是為了提供一個不受專利限制（當時 RSA 有專利）的數位簽章標準。

- **發展歷史**：
    1. 1991年：NIST 提出 DSA 作為數位簽章標準 (DSS, Digital Signature Standard)。
    2. 1994年：正式成為聯邦資訊處理標準 FIPS 186。
    3. 技術淵源：它是 Schnorr 與 ElGamal 簽章演算法的變體。
    4. 版本演進：其橢圓曲線版本稱為 ECDSA (Elliptic Curve Digital Signature Algorithm)，目前在區塊鏈（如比特幣）中被廣泛使用。
- 系統參數 (System Parameters) 2DSA 的安全性建立在兩層質數結構上，包含四個公開參數：
    1. $p$：一個長度為 512 到 1024 bits 的大質數（位元數必須是 64 的倍數）。
    2. $q$：一個 160 bits 的質數，且 $q$ 是 $(p-1)$ 的因數（即 $q | (p-1)$）。
    3. $g$：基數，計算方式為 $g \equiv h^{(p-1)/q} \pmod p$，其中 $h$ 是介於 $[2, p-2]$ 的整數。
    4. $H(\cdot)$：單向雜湊函數（如 SHA-1 或 SHA-2）。
- 金鑰產生 (Key Generation)
    1. 私鑰 (Private Key)：Alice 選擇一個整數 $x$ ($0 < x < q$)。
    2. 公鑰 (Public Key)：Alice 計算 $y = g^x \pmod p$。
- 簽署流程 (Signing) Alice 對訊息 $m$ 簽章時，產生簽章 $(r, s)$：
    1. 選擇隨機數：選一個整數 $k$，滿足 $0 < k < q$。
    2. 計算 r：$r \equiv (g^k \pmod p) \pmod q$。(註：講義中 Step 2寫 $r \equiv g^k \pmod p$，但在標準 DSA 中通常會再取模 $q$ 以縮短長度，驗證時也需對應)
    3. 計算 s：利用私鑰 $x$ 與雜湊值 $H(m)$ 計算 $s$。$$s \equiv k^{-1} (H(m) + xr) \pmod q$$
- 結果：簽章為 $(r, s)$。
- 驗證步驟 (Verification)假設 Bob 收到訊息 $m$ 與簽章 $(r, s)$，驗證過程如下:
    1. 範圍檢查：確認 $r$ 和 $s$ 都在合法範圍 $[0, q-1]$ 內。如果不在，簽章直接無效。
    2. 計算輔助值 $w$：計算 $s$ 的模反元素 $t \equiv s^{-1} \pmod q$。
    3. 還原雜湊與隨機數的關係：計算 $r' \equiv (g^{H(m)t} \times y^{rt} \pmod p) \pmod q$。
    4. 比對：如果算出來的 $r'$ 等於簽章中的 $r$，則簽章有效。

:::success
**重點筆記**：政府公文的標準化簽名
1. **情境**：如果說 RSA 是通用的「私章」，那 DSA 就像是政府規定的「定型化契約簽名」。
2. **規格**：政府規定紙張大小 ($p$)、印泥顏色 ($q$) 和簽名筆 ($g$) 都有嚴格標準 (FIPS)。
3. **簽名**：簽署時，你必須用你的私密印鑑 ($x$)，配合當下的時間亂數 ($k$)，依照特定的公式填寫兩個欄位：日期證明 ($r$) 和 加密簽名碼 ($s$)。
4. **驗證**：驗收官員拿著你的公開印鑑樣式 ($y$)，不需要知道你的私章長怎樣，只要代入公式檢查這兩個欄位是否吻合，就能確定這份公文是你發的，且沒被改過。
:::

<br>

## 05. 特殊簽章：盲簽章 (Blind Signature)
先前介紹了盲簽章的概念，這裡詳細列出基於 RSA 演算法的數學運作步驟。

### 05-01. 參數設定 (System Parameters)
- Alice 準備 RSA 金鑰：公鑰 $(e, n)$，私鑰 $d$。
- $n = p \times q$，且 $e$ 與 $\phi(n)$ 互質 2。

### 05-02. 運作流程 (Signing Process)
假設 Bob 要讓 Alice 簽署訊息 $m$，但不想讓 Alice 看到 $m$ 的內容
- 遮蔽 (Blinding) — Bob 做的事：
    1. Bob 選一個隨機數 $r$ (遮蔽因子)。
    2. 將訊息 $m$ 乘上遮蔽因子：$C \equiv m \times r^e \pmod n$。
    3. 把 $C$ 寄給 Alice。
    4. 此時 $C$ 看起來是亂碼，Alice 無法反推出 $m$。
- 簽署 (Signing) — Alice 做的事：
    1. Alice 用私鑰 $d$ 對 $C$ 簽名：$s' \equiv C^d \pmod n$。
    2. 數學展開：$s' \equiv (m r^e)^d \equiv m^d r^{ed} \equiv m^d r \pmod n$。
    3. Alice 將 $s'$ 寄回給 Bob。
- 去遮蔽 (Unblinding) — Bob 做的事：
    1. Bob 收到 $s'$ 後，除去隨機數 $r$ 的影響：乘以 $r^{-1}$。
    2. 計算 $s \equiv s' \times r^{-1} \pmod n$。
    3. 數學展開：$s \equiv (m^d r) \times r^{-1} \equiv m^d \pmod n$。
    4. 結果：$s$ 就是 $m$ 的有效 RSA 簽章！
- 驗證 (Verification)：任何人計算 $m' \equiv s^e \pmod n$，若 $m' = m$，則簽章有效。

:::success
**種點筆記**：複寫紙信封 (數學版)
- Blinding ($C = m r^e$)：Bob 把文件 $m$ 放入信封，信封表面有一層特殊的數學薄膜 ($r^e$)，這層膜會讓透過去的字變形。
- Signing ($s' = C^d$)：Alice 在信封外簽名。她的筆跡透過薄膜印在文件上，但因為薄膜的關係，印在文件上的筆跡包含了 $r$ 的痕跡。Alice 看不到信封裡的文件。
- Unblinding ($s = s' r^{-1}$)：Bob 拿回信封，用特殊的藥水 ($r^{-1}$) 把薄膜造成的變形消除。
- Result：文件上留下了 Alice 乾淨、正確的簽名 ($m^d$)，就像她直接簽在文件上一樣，但她根本沒看過文件。
:::

<br>

## 06. 公鑰基礎建設 (PKI) 與數位憑證

### 06-01. PKI 與 CA
* **PKI (Public Key Infrastructure)**：管理金鑰和憑證的一整套硬體、軟體、人員、策略和程序。
* **CA (Certificate Authority, 憑證機構)**：受信任的第三方，負責發放並簽署數位憑證。
![截圖 2025-12-16 晚上11.45.34](https://hackmd.io/_uploads/HJjjRlymZl.png)

### 06-02. 數位憑證 (Digital Certificate)
* **功能**：解決「公鑰屬於誰」的問題。防止中間人攻擊（冒充別人的公鑰）。
* **內容**：包含 **持有者身分資訊** (Name, ID) + **持有者的公鑰** + **CA 的數位簽章**。

:::success
**重點筆記**：數位憑證就像「護照」。上面有你的名字和照片（公鑰），還有外交部（CA）的鋼印（CA 簽章）。別人看到鋼印，就知道這本護照是真的，照片裡的人確實是你。
:::
![截圖 2025-12-16 晚上11.45.54](https://hackmd.io/_uploads/HJpn0eJm-l.png)

### 06-03. 數位憑證的產生與撤銷 (Generation & Revocation)

憑證產生流程：
1. 註冊：使用者 (Alice) 將自己的公鑰傳送給受信任的第三方 (CA)。
2. 簽署：CA 使用自己的私鑰對 Alice 的公鑰與身分資訊進行加密（簽章），生成憑證。
3. 發布：Alice 取得憑證，並將其公開給其他人 (Bob)。
4. 驗證：Bob 使用 CA 的公鑰來解密憑證，確認 Alice 的公鑰是合法的。

**憑證撤銷 (Revocation)**： 憑證並非永久有效，可能會因以下原因被撤銷：
1. 過期 (Time up)：憑證的使用期限已到。
2. 私鑰遺失 (Lost private key)：使用者的私鑰被偷或弄丟，憑證不再安全。
3. 列入黑名單 (Blacklist)：使用者被發現是惡意使用者或未繳費。
![截圖 2025-12-16 晚上11.46.04](https://hackmd.io/_uploads/BkJARlJX-l.png)

**撤銷機制(CRL)**：
1. CA 會維護一份 憑證撤銷清單 (CRL - Certificate Revocation List)，也就是「黑名單」。
2. 驗證憑證前，必須先檢查該憑證是否在 CRL 中。如果在清單上，即使憑證沒過期也視為無效。
![截圖 2025-12-16 晚上11.46.31](https://hackmd.io/_uploads/HyfJ1WJXbg.png)

### 06-04. PKI 面臨的挑戰 (Challenges and Issues) 
雖然 PKI 是標準架構，但在實務上仍有許多困難：
- 信任模型的複雜性 (Complexity of Trust Model) ：
    1. 整個系統依賴 CA 的可信度。如果 CA 被駭客入侵或發出錯誤憑證，整個信任鏈 (Chain of Trust) 就會崩潰。
    2. 層級化的信任結構要求鏈上的每個 CA 都必須完全可靠，這在現實中很難保證。
- 憑證管理的複雜性 (Certificate Management) ：
    1. 發放、更新、撤銷與管理憑證需要消耗大量的資源與時間。
    2. 使用者若忘記更新憑證，會導致服務中斷或安全風險。
- 即時性問題 (CRL & OCSP) ：
    1. CRL：需要定期下載更新，可能會有時間差（剛撤銷但對方還沒下載黑名單）
    2. OCSP (線上憑證狀態協定)：雖然可以即時查詢憑證狀態，但會增加網路延遲 (Latency) 並消耗頻寬資源。
![截圖 2025-12-16 晚上11.46.39](https://hackmd.io/_uploads/HJ3yk-k7-g.png)

<br>

## 07. 公鑰加密系統的問題 (Problems in Public-Key Cryptosystems) 
儘管公鑰系統功能強大，但它有三個先天缺陷 ：
- 計算速度慢 (Slow computation speed)：比起對稱式加密慢很多。
- 計算複雜度高 (High computational complexity)：消耗較多 CPU 與電力。
- 量子電腦威脅 (Vulnerable to quantum computer attacks)：未來的量子電腦可能破解現有的公鑰演算法 (如 RSA)。

<br>

## 08. 基於對稱式金鑰的數位簽章 (Symmetric-Key Digital Signature)
為了解決公鑰系統速度慢的問題，有人提出使用「對稱式加密」來實作簽章。
![截圖 2025-12-16 晚上11.52.23](https://hackmd.io/_uploads/HJarlZJ7-e.png)

### 08-01. 基本運作概念
- 前提：發送方 (Alice) 與接收方 (Bob) 共享一把秘密金鑰 (Secret Key) 。
- 流程：
    1. Alice 將資料 (Data) 經過雜湊算出 $H(Data)$。
    2. Alice 用共享密鑰加密這個雜湊值，作為「簽章」。
    3. Bob 收到後，用同一把密鑰解密，比對雜湊值是否吻合。

### 08-02. 致命缺陷 (The Problem)
這種方法有一個無法解決的問題：缺乏不可否認性 (Non-Repudiation) 。
- 因為 Alice 和 Bob 擁有同一把金鑰。
- 問題：當 Bob 拿出一份有簽名的文件說是 Alice 簽的，Alice 可以抵賴說：「那是 Bob 自己簽的！他也有鑰匙！」
- 第三方無法分辨這到底是 Alice 簽的還是 Bob 偽造的。
![截圖 2025-12-16 晚上11.52.50](https://hackmd.io/_uploads/BJRLgZkQWl.png)

:::success
**重點筆記**：共用印章的麻煩Alice 和 Bob 合開公司，兩人共用一顆印章 (對稱金鑰)。有天 Bob 拿出一張蓋了章的借據說：「Alice 跟我借了一百萬。」Alice 大喊冤枉：「印章你也有，肯定是你自己蓋的！」法官 (第三方) 看了看印章，發現確實是真的，但因為兩個人都有，所以法官也無法判斷到底是誰蓋的。這就是對稱式簽章最大的問題。
:::

<br>

## 09. 仲裁式數位簽章 (Arbitrated Digital Signature)
為了解決上述「球員兼裁判」的問題，引入了一位受信任的第三方，稱為仲裁者 (Arbitrator)。

### 09-01. 系統架構
**參與者**：Alice、Bob、仲裁者 (Arbitrator)。
![截圖 2025-12-16 晚上11.53.15](https://hackmd.io/_uploads/HkL_x-1X-g.png)

**金鑰分配**：
1. Alice 與仲裁者共享金鑰 $K_A$。
2. Bob 與仲裁者共享金鑰 $K_B$。
3. 注意：Alice 和 Bob 之間沒有直接共享金鑰。

### 09-02. 運作流程 (The Process)
- Alice 簽署與傳送：
    1. Alice 產生資料的雜湊值 $H(Data)$。
    2. Alice 用 $K_A$ 加密「簽章與資料」，傳給仲裁者。
    3. 意義：只有仲裁者能解開，確認是 Alice 發的。
![截圖 2025-12-16 晚上11.53.37](https://hackmd.io/_uploads/rJhKgb1Qbe.png)

- 仲裁者驗證與轉發：
    1. 仲裁者用 $K_A$ 解密，驗證 Alice 的身分與資料完整性。
    2. 仲裁者將驗證過的資料與簽章資訊 $H(S, Data)$ 打包。
    3. 仲裁者用 $K_B$ 加密，傳給 Bob。
    4. 意義：仲裁者以自己的信譽擔保「這確實是 Alice 發的」。
![截圖 2025-12-16 晚上11.53.54](https://hackmd.io/_uploads/Hk6clbkm-l.png)

- Bob 接收與驗證：
    1. Bob 用 $K_B$ 解密。
    2. Bob 驗證雜湊值是否正確。
    3. 結果：Bob 確信資料來自仲裁者，而仲裁者確認資料來自 Alice。
![截圖 2025-12-16 晚上11.54.05](https://hackmd.io/_uploads/BJwol-km-l.png)

![截圖 2025-12-16 晚上11.54.12](https://hackmd.io/_uploads/Hy12lZy7bx.png)

### 09-03. 優點與解決方案
- 解決了抵賴問題：如果 Alice 否認，仲裁者可以作證（因為只有 Alice 有 $K_A$）。如果 Bob 偽造，他也過不了仲裁者這關（因為 Bob 沒有 $K_A$）。
- 解決了身分確認問題：由仲裁者負責檢查雙方身分。


:::success
**重點筆記**：透過公證人傳話接續上面的例子，Alice 和 Bob 不再共用印章。
- Alice 有自己的章 ($K_A$)，只有公證人認得。
- Bob 也有自己的章 ($K_B$)，也只有公證人認得。
- 流程：Alice 寫借據蓋自己的章 -> 寄給公證人 -> 公證人驗證無誤後，蓋上公證人的章 -> 寄給 Bob。
- 結果：Bob 拿到借據，看到公證人的章，就知道這張借據是真的。Alice 也賴不掉，因為公證人有紀錄。
:::
