---
# System prepended metadata

title: 第 8 篇：數位簽章與驗證應用 - 從理論到實際運用
tags: [AppCheck系列]

---

# 第 8 篇：數位簽章與驗證應用 - 從理論到實際運用

## 前言：數位簽章如何在真實世界中運作？

經過前兩篇文章的學習，我們已經理解了：
- **ECDSA** 讓裝置可以產生無法偽造的數位簽章
- **信任鏈** 讓我們可以相信公鑰的真實性

現在是時候把這些概念串聯起來，了解數位簽章在真實世界中是如何運用的。當你使用手機 App、瀏覽網站、或是進行線上交易時，數位簽章無處不在地保護著你的安全。

本文將用最實用的角度，幫你理解數位簽章在各種常見系統中的具體應用。

## 數位簽章的三大核心作用

### 🔐 1. 身份驗證 (Authentication)
**證明「這個訊息真的來自聲稱的發送者」**

日常例子：
- 當你收到銀行的 App 通知，如何確定真的是銀行發的？
- 當你的 iPhone 向 Apple 服務器證明身份時發生了什麼？

### 🛡️ 2. 完整性保護 (Integrity)
**確保「訊息在傳輸過程中沒有被竄改」**

日常例子：
- 下載 App 更新時，如何確定安裝包沒有被植入惡意代碼？
- 網路銀行轉帳時，如何確保金額沒有被中途修改？

### 🚫 3. 不可否認性 (Non-repudiation)
**提供「發送者無法否認曾經發送過這個訊息」的證據**

日常例子：
- 電子合約簽署後，簽署者無法否認
- 線上交易完成後，無法否認曾經下單

## 真實應用場景解析

### 🌐 場景一：HTTPS 網站認證

當你瀏覽 `https://example.com` 時：

```
你的瀏覽器 ←→ 網站伺服器的對話：

1. 瀏覽器：「請證明你真的是 example.com」
2. 伺服器：「這是我的數位憑證（包含我的公鑰）」
3. 瀏覽器：「讓我檢查這個憑證...」
   - 憑證上說：「我是 example.com 的公鑰」
   - 憑證由受信任的 CA 簽署
   - CA 的數位簽章驗證通過
4. 瀏覽器：「好的，我確定你就是 example.com」
```

**這裡的關鍵**：
- 網站的身份由數位憑證證明
- CA 的數位簽章保證憑證真實性
- 你的瀏覽器內建了受信任的 CA 清單

### 📱 場景二：App Store 應用程式驗證

當你從 App Store 下載 App 時：

```
下載和安裝過程：

1. 開發者上傳 App 到 Apple
2. Apple 用自己的私鑰對 App 進行數位簽章
3. App Store 提供帶有 Apple 簽章的 App
4. 你的 iPhone 下載 App
5. iPhone 驗證：
   - 這個 App 有 Apple 的數位簽章嗎？✅
   - Apple 的數位簽章有效嗎？✅
   - App 內容被竄改過嗎？✅
6. iPhone：「這個 App 安全，可以安裝」
```

**安全保障**：
- 只有 Apple 簽署的 App 才能安裝
- 任何對 App 的竄改都會被發現
- 使用者可以信任下載的 App

### 💳 場景三：Apple Pay 交易驗證

當你使用 Apple Pay 付款時：

```
支付流程中的數位簽章：

1. 你：按下指紋或Face ID
2. iPhone Secure Enclave：
   - 驗證生物特徵成功
   - 用支付專用私鑰簽署交易資訊
3. 交易資訊 + 數位簽章 → 發送到支付處理器
4. 支付處理器：
   - 用你的公鑰驗證簽章
   - 確認交易真的來自你的裝置
   - 確認交易金額沒有被竄改
5. 交易完成
```

**多重保護**：
- 生物特徵驗證（你本人）
- 數位簽章驗證（你的裝置）
- 交易完整性保護（金額正確）

## App Attest 中的數位簽章應用

### 🍎 Apple App Attest 完整流程解析

App Attest 是數位簽章應用的經典案例：

#### 第一階段：Attestation（建立信任）

```
建立信任的過程：

1. 你的 App：「我需要證明我的身份」
2. iPhone Secure Enclave：
   - 產生一組 ECC 金鑰對
   - 私鑰永遠不離開 Secure Enclave
   - 把公鑰和裝置/App資訊一起發給 Apple
3. Apple 伺服器：
   - 驗證這確實是真的 iPhone 和真的 App
   - 用 Apple 的私鑰簽署一張「數位身份證」
   - 這張數位身份證包含你 App 的公鑰
4. iPhone：收到 Apple 簽署的數位身份證
```

**結果**：你的 App 現在有了一張 Apple 認證的「數位身份證」

#### 第二階段：Assertion（持續驗證）

```
每次 API 請求的驗證：

1. 你的 App 準備呼叫後端 API
2. 後端伺服器：「請證明你的身份」
3. iPhone：
   - 用 Secure Enclave 中的私鑰簽署請求資料
   - 包含：請求內容 + 時間戳記 + 隨機數
4. 後端伺服器：
   - 檢查 Apple 數位身份證（第一階段得到的）
   - 用身份證中的公鑰驗證這次請求的簽章
   - 確認請求真的來自經過 Apple 認證的 iPhone App
5. 伺服器：「身份驗證通過，處理你的請求」
```

**安全效果**：
- 只有真實的 iPhone App 能呼叫你的 API
- 每個請求都經過數位簽章保護
- 駭客無法偽造有效的請求

## 不同系統中的簽章應用比較

### 📊 應用場景對比

| 應用場景 | 簽章演算法 | 主要目的 | 信任根源 | 有效期 |
|---------|-----------|---------|----------|--------|
| HTTPS 網站 | RSA/ECDSA | 網站身份認證 | CA 機構 | 1-2年 |
| App Store | RSA | 軟體完整性 | Apple/Google | 長期 |
| Apple Pay | ECDSA | 交易授權 | 金融機構 | 即時 |
| App Attest | ECDSA | API 請求驗證 | Apple | 動態 |
| JWT Token | HMAC/RSA/ECDSA | 會話管理 | 應用伺服器 | 短期 |

### 🎯 為什麼不同場景選擇不同演算法？

#### RSA 的選擇場景：
- **軟體簽章**：歷史悠久，工具鏈成熟
- **傳統系統**：已建立的 PKI 基礎設施
- **法規要求**：某些行業標準指定使用

#### ECDSA 的選擇場景：
- **行動裝置**：省電、省空間
- **即時系統**：簽章和驗證速度快
- **現代協定**：WebAuthn、App Attest 等

#### HMAC 的選擇場景：
- **內部系統**：發送和接收方可以共享金鑰
- **高效能需求**：比公鑰演算法快很多
- **簡單部署**：不需要複雜的憑證管理

## 實務考量與最佳實踐

### ⚡ 效能最佳化

**選擇合適的演算法**：
```
效能需求評估：
├── 高頻操作（每秒千次以上）
│   └── 優先選擇：HMAC > ECDSA > RSA
├── 一般操作（每秒百次以下）
│   └── 可選擇：任何演算法都可接受
└── 批次處理（非即時）
    └── 可選擇：RSA 也可接受
```

**快取策略**：
- 快取憑證驗證結果
- 重用已驗證的公鑰
- 批次處理多個簽章驗證

### 🔒 安全性考量

**金鑰管理**：
- 私鑰絕對不能洩露
- 使用 HSM（硬體安全模組）保護關鍵私鑰
- 定期輪換金鑰

**時間戳記**：
- 所有簽章都應包含時間戳記
- 設定合理的時間窗口（例如5分鐘）
- 防止重放攻擊

**隨機數使用**：
- 每次簽章都使用新的隨機數
- 使用密碼學安全的隨機數產生器  
  

## 未來發展趨勢

### 🚀 新興技術

**後量子密碼學**：
- 隨著量子計算發展，需要抗量子演算法
- CRYSTALS-Dilithium、FALCON 等已標準化
- 簽章體積較大，但安全性更強

**零知識證明**：
- 可以證明身份而不洩露具體資訊
- 在隱私要求極高的場景有應用前景

**生物特徵簽章**：
- 結合生物特徵和數位簽章
- 提供更強的身份綁定

### 📱 行動生態演進

**更深度的硬體整合**：
- 更多功能整合到安全晶片
- 硬體輔助的簽章加速
- 更強的防竄改保護

**跨平台互操作性**：
- WebAuthn 標準的普及
- 不同平台間的憑證互認

## 本文小結：數位簽章的實用價值

✅ **身份驗證**：確保通訊對象的真實身份  
✅ **完整性保護**：防止資料在傳輸中被竄改  
✅ **不可否認性**：提供法律層面的證據效力  
✅ **多場景應用**：從網站安全到行動支付都在使用  
✅ **技術選擇**：根據效能、安全性、相容性需求選擇合適演算法

## 系列總結：從基礎到應用的完整路徑

經過這三篇文章的學習，你現在應該具備了：

### 🎓 理論基礎
- **ECC/ECDSA**：理解為什麼選擇橢圓曲線密碼學
- **信任鏈**：明白如何在不安全的網路中建立信任
- **數位簽章**：掌握各種實際應用場景

### 🔧 實用技能
- 能夠評估不同簽章演算法的適用場景
- 理解 Apple App Attest 等現代驗證機制
- 具備基本的安全實作判斷能力

### 🚀 進階準備
- 為深入學習資料格式解析打下基礎
- 具備閱讀技術文件的概念背景
- 能夠理解更複雜的安全協定設計

下個系列《密碼學資料格式與編碼》將帶你深入技術實作細節，學會解析 CBOR、X.509、JWT 等複雜格式。有了這三篇的概念基礎，你將能更好地理解為什麼需要這些格式，以及它們在整個安全體系中的作用。

---

## 💡 補充資料

### 常見問題

**Q: 為什麼不能用對稱加密（如 AES）來做數位簽章？**
A: 對稱加密雙方都有相同的金鑰，無法區分是誰產生的簽章。數位簽章需要「只有發送者能產生，但任何人都能驗證」的特性。

**Q: HMAC 算是數位簽章嗎？**
A: 嚴格來說不算。HMAC 提供完整性和驗證，但缺乏「不可否認性」，因為雙方都有相同的金鑰。

**Q: 如果私鑰洩露了怎麼辦？**
A: 需要立即撤銷相關憑證，並生成新的金鑰對。這就是為什麼憑證有有效期限，以及需要建立憑證撤銷機制的原因。

### 進一步學習資源
- [RFC 3447 - PKCS #1: RSA Cryptography Specifications](https://tools.ietf.org/html/rfc3447)
- [RFC 6979 - Deterministic Usage of ECDSA](https://tools.ietf.org/html/rfc6979)
- [Apple App Attest 官方文件](https://developer.apple.com/documentation/devicecheck/validating-apps-that-connect-to-your-server)