# 【密碼學 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 也賴不掉,因為公證人有紀錄。 :::