# 第 7 篇:公開金鑰與信任鏈 - 為什麼我們能信任 Apple? ## 前言:解決一個根本問題 在上一篇文章中,我們理解了 ECDSA 讓 iPhone 可以產生「數位簽章」來證明自己的身份。但這裡有一個關鍵問題: **當你的後端伺服器收到一個聲稱「來自 iPhone」的請求時,你怎麼知道它真的是來自 iPhone,而不是駭客偽造的?** 畢竟,任何人都可以: - 宣稱自己是 iPhone - 生成一組公私鑰對 - 用私鑰簽署訊息 - 把公鑰和簽章一起送給你 這就是「信任」的問題:在一個充滿陌生人的網路世界裡,我們如何建立信任?本文將用最簡單的方式解釋公開金鑰密碼學和信任鏈的概念。 ## 從現實世界的信任開始 ### 🏛️ 現實世界如何建立信任? 想想你是怎麼相信一張鈔票是真的: 1. **政府保證**:政府印製鈔票並保證其價值 2. **防偽特徵**:特殊紙張、浮水印、安全線等難以複製的特徵 3. **權威認證**:只有政府有權印製法定貨幣 4. **大家都信**:社會共識認同這套系統 ### 💻 數位世界的挑戰 但在數位世界裡: - 沒有「政府」統一管理所有裝置 - 任何資料都可以被複製 - 如何證明「這個公鑰真的屬於 iPhone」? 這就是「公鑰基礎建設」(PKI) 要解決的問題。 ## 公開金鑰的信任問題 ### 🤔 核心問題:如何驗證公鑰的真實性? 假設 Alice(你的 iPhone)要證明身份給 Bob(你的伺服器): ``` Alice: 「我是真的 iPhone,這是我的公鑰」 Bob: 「我怎麼知道你真的是 iPhone?任何人都可以這樣說啊」 ``` 這就是著名的「**公鑰分發問題**」。 ### 💡 解決方案:引入可信任的第三方 就像現實世界需要政府來保證鈔票的真實性,數位世界需要「**憑證授權機構**」(Certificate Authority, CA)來保證公鑰的真實性。 ## 數位憑證:數位世界的身份證 ### 📄 什麼是數位憑證? 數位憑證就像是數位世界的身份證,它包含: ``` 數位憑證內容: ├── 持有者資訊(誰的憑證) ├── 公鑰(這個公鑰屬於誰) ├── 有效期限(什麼時候過期) ├── 發行者資訊(誰發的這張憑證) └── 數位簽章(CA 的簽章保證真實性) ``` ### 🔍 憑證如何解決信任問題? 1. **iPhone 申請憑證**: - 「我是 iPhone,這是我的公鑰,請給我憑證」 - Apple CA 驗證確實是 iPhone 後,發給它一張憑證 2. **iPhone 出示憑證**: - 「我是 iPhone,這是我的憑證(包含我的公鑰)」 - 憑證上有 Apple CA 的簽章 3. **伺服器驗證憑證**: - 「我信任 Apple CA,所以我信任這張憑證」 - 「既然憑證是真的,那公鑰也是真的」 ## 信任鏈:層層建立的信任體系 ### 🔗 信任鏈的概念 但這又帶來新問題:**我們怎麼知道 Apple CA 的憑證是真的?** 答案是建立一個「信任鏈」: ``` 信任鏈結構: 根憑證授權機構 (Root CA) ↓ 簽發並信任 中間憑證授權機構 (Intermediate CA) ↓ 簽發並信任 終端實體憑證 (End Entity Certificate) ↓ 驗證身份 你的 iPhone ``` ### 🏢 Apple 的信任鏈實例 以 App Attest 為例: ``` Apple Root CA (根憑證) ↓ 「我信任 Apple App Attestation CA」 Apple App Attestation CA (中間憑證) ↓ 「我證明這台裝置是真的 iPhone」 你的 iPhone 憑證 (終端憑證) ↓ 「我是真的 iPhone,執行真的 App」 你的 App ``` ### 🌟 信任錨點:一切信任的起點 **Root CA(根憑證授權機構)是整個信任體系的基礎**: - **預先安裝**:iOS 系統預裝了信任的根憑證 - **最高權威**:根憑證是「自己簽署自己」的 - **社會共識**:大家都同意信任這些根憑證 - **嚴格管理**:根憑證的私鑰必須極度保護 ### 🔍 憑證鏈驗證過程 當你的伺服器收到來自 iPhone 的請求: 1. **檢查終端憑證**: - 「這張憑證說它來自 iPhone」 - 「是誰簽發的?Apple App Attestation CA」 2. **檢查中間憑證**: - 「Apple App Attestation CA 的憑證是誰簽的?」 - 「Apple Root CA」 3. **檢查根憑證**: - 「Apple Root CA 我認識,它在我的信任清單裡」 - 「所以整條鏈都可以信任」 ## App Attest 中的信任體系 ### 🍎 Apple 如何建立信任? Apple 的信任體系特別嚴謹: #### 1. **硬體信任根** - Secure Enclave:專用的安全晶片 - 私鑰永不離開硬體 - Boot ROM:不可變更的啟動代碼 #### 2. **軟體完整性** - Code Signing:所有代碼都必須簽章 - App Store:統一的應用程式分發管道 - System Integrity Protection:系統完整性保護 #### 3. **身份驗證鏈** ``` Apple Root CA ↓ Apple App Attestation CA ↓ Device-specific Certificate (你的 iPhone) ↓ App-specific Key (你的 App) ``` ### 🔐 為什麼這套系統值得信任? 1. **硬體保護**: - 私鑰存在專用硬體中 - 即使系統被攻破,私鑰也無法取出 2. **Apple 的信譽**: - 全球數十億使用者信任 - 嚴格的安全審查程序 - 透明的安全政策 3. **生態系統整合**: - 從硬體到軟體的完整控制 - 統一的安全架構 - 持續的安全更新 4. **業界認可**: - 符合國際安全標準 - 被政府和企業廣泛採用 ## 與其他信任模型的比較 ### 🏪 Web 的信任模型(HTTPS) ``` DigiCert/Let's Encrypt 等 CA ↓ 網站憑證 ↓ 網站身份驗證 ``` - **優點**:開放、標準化 - **缺點**:CA 數量多,安全性參差不齊 ### 🍎 Apple 的信任模型 ``` Apple 控制的完整鏈條 ↓ 硬體 + 軟體整合驗證 ``` - **優點**:端到端控制,安全性高 - **缺點**:封閉生態系統 ### 🤖 Google 的信任模型 ``` Google Play Services ↓ SafetyNet/Play Integrity ``` - **優點**:覆蓋面廣 - **缺點**:依賴雲端服務 ## 實務理解:為什麼要相信這套系統? ### ✅ 技術角度 - **數學保證**:基於數學難題的密碼學 - **硬體保護**:專用晶片防護 - **多層驗證**:層層把關的驗證機制 ### ✅ 商業角度 - **商業利益**:Apple 的商業模式依賴信任 - **法律責任**:虛假認證會面臨法律風險 - **品牌價值**:信任是 Apple 最重要的資產 ### ✅ 實用角度 - **成本效益**:攻破這套系統的成本極高 - **替代方案**:目前沒有更好的替代方案 - **風險評估**:對大部分應用來說,這個安全等級足夠 ## 本文小結:建立信任的完整圖像 ✅ **公鑰分發問題**:任何人都可以生成公私鑰對,關鍵是證明公鑰的真實性 ✅ **數位憑證的作用**:像數位身份證,由可信任的 CA 簽發 ✅ **信任鏈的概念**:從根 CA 開始,層層建立的信任關係 ✅ **Apple 信任體系**:從硬體到軟體的完整信任鏈 ✅ **為什麼可以信任**:技術、商業、實用多個角度的保障 ## 下一步學習 下一篇《數位簽章與驗證應用》會深入探討: - 數位簽章在實際系統中如何運作? - 如何防止各種攻擊手段? - App Attest 的簽章驗證流程是怎樣的? --- ## 💡 補充資料 ### 常見疑問 **Q: 如果 Apple Root CA 被攻破怎麼辦?** A: 這會是災難性的,但可能性極低。Apple 使用了最高等級的安全措施保護根憑證。 **Q: 我為什麼要信任 Apple 而不信任其他公司?** A: 信任是相對的。Apple 在隱私和安全方面有良好記錄,但最終還是要根據你的風險承受度來決定。 **Q: 憑證過期了怎麼辦?** A: Apple 會定期更新憑證。iOS 系統會自動處理大部分更新,開發者通常不需要手動處理。 ### 進一步學習 - 想了解 PKI 的技術細節:[RFC 5280 - Internet X.509 Public Key Infrastructure](https://tools.ietf.org/html/rfc5280) - Apple 的安全白皮書:[Apple Platform Security Guide](https://help.apple.com/pdf/security/en_US/apple-platform-security-guide.pdf)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.