01

為什麼需要安全:威脅與攻擊

分享資源就會暴露風險。安全『政策』說要保護什麼,安全『機制』負責執行;威脅分為洩漏、竄改、破壞三大類。

先讀原文段落,旁邊就是白話

這是一本英文書。左邊放原文、右邊放白話導讀——你既讀得懂,也順手碰了原文。

原文 · 為什麼需要安全:威脅與攻擊 2 Overview of security techniques 11. 3 Cryptographic algorithms 11. 5 Cryptography pragmatics 11. 6 Case studies: Needham–Schroeder, Kerberos, TLS, 802.
白話導讀

分享資源就會暴露風險。安全『政策』說要保護什麼,安全『機制』負責執行;威脅分為洩漏、竄改、破壞三大類。

安全政策、機制與威脅三大類

分享資源就會暴露風險。安全『政策』說要保護什麼,安全『機制』負責執行;威脅分為洩漏、竄改、破壞三大類。

STEP 1

深度探秘

想分享,才需要安全

安全需求從哪裡來

課本給了一個很反直覺的起點:

在分散式系統中需要安全機制根本原因是『想要分享資源』

如果一個資源完全不分享,把它鎖在隔離的房間裡、不連網路就好,根本不需要花俏的密碼學。麻煩就出在:我們想讓某些人用、卻不想讓另一些人用。一旦資源透過網路開放給外界存取,攻擊者就有機會插手。

要把『誰能用、用到什麼程度』講清楚,要分成兩個層次:

  • 安全政策 (security policy):規定要保護什麼、誰可以做什麼。例如『只有員工能進大樓』『只有帳戶持有人能轉帳』。政策和技術無關
  • 安全機制 (security mechanism):負責把政策落實。例如門口的警衛、電子門鎖、加密、簽章。

這兩者一定要分開。就像門上裝了鎖(機制),但如果沒人規定『沒人看守時要鎖門』(政策),這把鎖也保護不了大樓。光有機制、沒有政策,你根本說不清一個系統到底安不安全。

威脅的三大類

安全的主要目標是:只讓被授權的主體存取資訊與資源。威脅分成三大類:

  • 洩漏 (Leakage):資訊被未授權者取得。
  • 竄改 (Tampering):資訊被未授權地修改。
  • 破壞 (Vandalism):干擾系統正常運作,但攻擊者自己沒得到好處(純搞破壞)。
💡
關鍵

安全需求源於想分享資源;政策定義要保護什麼、機制負責落實,威脅分為洩漏、竄改、破壞三類。

STEP 2

生活妙喻

公司大樓的門禁制度

把安全想成一棟公司大樓

想像你管理一棟公司大樓,這就是一個活生生的安全系統:

  • 想分享才需要安全:如果這是一棟空屋、沒人進出,你不需要門禁。正是因為要讓員工進、不讓陌生人進,麻煩才來。
  • 安全政策=公司白紙黑字的規定:『只有員工和登記過的訪客能進大樓』『機密文件只有特定部門能看』。這是規則,跟用什麼鎖無關。
  • 安全機制=實際的執行手段:櫃台發訪客證、保全站崗、電子門鎖。

再看威脅三大類,對應大樓裡的三種壞事:

威脅 大樓裡的對應 攻擊者得到什麼
洩漏 有人偷看了機密文件 拿到資訊
竄改 有人偷改了合約上的金額 改掉內容圖利
破壞 有人把消防警報亂按一通 純粹搞亂,自己沒好處

關鍵體會:裝了鎖不等於安全。如果沒人規定『離開要鎖門』,再好的鎖也是擺設。政策和機制,缺一不可。

💡
關鍵

大樓門禁=安全系統:有規定 (政策) 又有保全門鎖 (機制) 才算數;偷看、改合約、亂按警報對應洩漏、竄改、破壞。

STEP 3

實用超能力

用『政策 vs 機制』診斷安全設計

學會分辨政策與機制

很多安全討論之所以講不清楚,就是把政策機制混為一談。學會分開談,你就能更精準地設計與檢視系統。

試著對任何一句安全敘述,問自己:『這是在說要保護什麼(政策),還是在說用什麼手段保護(機制)?』

敘述 屬於
只有 HR 部門能看薪資資料 政策
薪資資料用 AES 加密儲存 機制
登入失敗五次要鎖帳號 政策
用 bcrypt 雜湊存密碼 機制

為什麼這個區分這麼重要

  1. 可換機制不動政策:政策說『資料要保密』,今天用某加密法、明天換更強的,政策不變。
  2. 可稽核:有了明確政策,你才能逐條檢查機制有沒有達成它。
  3. 避免假安全:如果只堆機制(裝了一堆鎖)卻沒寫清楚政策,沒人說得出系統到底防住了什麼。

下次做安全設計,先把政策一條條列清楚(要防洩漏、竄改還是破壞?防誰?),再去挑機制。順序對了,設計就清楚了。

💡
關鍵

對任何安全敘述問『這是要保護什麼 (政策) 還是用什麼手段 (機制)』;先定政策、再挑機制,設計才清楚可稽核。

🔆
生活妙喻:安全政策 vs 安全機制 ≈ 公司規定 vs 保全與門鎖

政策是白紙黑字的規則 (誰能進大樓),機制是落實規則的手段 (門鎖、保全);裝了鎖卻沒規定鎖門,等於沒安全。

🔆
生活妙喻:想分享才需要安全 ≈ 空屋不需要門禁

完全不分享的資源用隔離就能保護;正因為想讓某些人用、不讓另一些人用,才需要安全機制。

🔆
生活妙喻:破壞 (vandalism) ≈ 亂按消防警報的人

干擾系統運作但自己沒得到好處,純粹搗亂,這正是破壞與洩漏、竄改最大的不同。

本節字彙

Security Policy (安全政策)
規定要保護什麼資源、哪些主體可以做什麼操作的規則,與所用技術無關。
🧠 Policy = 政策;是『規定』,不是『工具』。
Security Mechanism (安全機制)
用來落實安全政策的具體手段,例如加密、簽章、門鎖、存取控制。
🧠 Mechanism = 機械裝置;是真正動手執行規定的『工具』。
Leakage / Tampering / Vandalism
威脅三大類:洩漏 (未授權取得資訊)、竄改 (未授權修改)、破壞 (干擾運作但自己沒得利)。
🧠 偷看、偷改、亂搞——三種壞事的代表。
課本說分散式系統需要安全機制的『根本原因』是什麼?
某公司規定『財報只有財務部能存取』,並用加密把財報檔案保護起來。下列對應何者正確?
有人闖入系統後,把首頁改成亂碼塗鴉、讓服務無法正常顯示,但沒有竊取任何資料、也沒有從中獲利。這最符合哪一類威脅?

通道上的五種攻擊手法

攻擊者透過濫用通訊通道下手:竊聽、假冒、訊息竄改 (含中間人)、重放、阻斷服務。設計時要假設最壞情況。

STEP 1

深度探秘

攻擊都從濫用通訊通道開始

攻擊者怎麼下手

課本把『通道 (channel)』定義為任何處理程序之間的通訊機制。對分散式系統的攻擊,幾乎都來自取得既有通道的存取權,或建立假冒授權連線的新通道。依照通道被濫用的方式,攻擊分成五種:

  • 竊聽 (Eavesdropping):未經授權取得訊息的副本。攻擊者只是『偷聽』,不改任何東西。
  • 假冒 (Masquerading):用別人的身分收發訊息。假裝成 Alice 去騙 Bob。
  • 訊息竄改 (Message tampering):攔下訊息、改掉內容、再送給原本的收件者。其中最厲害的是中間人攻擊 (man-in-the-middle):攻擊者攔截金鑰交換的第一則訊息,偷偷塞進自己的金鑰,之後就能先解密、看完、再重新加密轉送,兩端都不知情。
  • 重放 (Replaying):把攔截到的訊息存起來,稍後再送一次。可怕的是,即使訊息是加密又經過認證的,重放照樣可能奏效——攻擊者根本不需要金鑰,只要原封不動複製那串位元再送出。例如一筆『付錢給某人』的請求被重放,就可能害你付兩次。
  • 阻斷服務 (Denial of service, DoS):用大量訊息淹沒通道或資源,讓其他人無法存取。

設計時要假設最壞情況

因為攻擊者能力強,課本要求設計時抱持悲觀假設:介面是暴露的(任何人都能送訊息進來)、網路是不安全的(來源可被偽造、位址可被冒名)、演算法與程式碼攻擊者都看得到(所以安全只能依賴金鑰的秘密,不能靠演算法保密)、攻擊者有龐大運算資源

💡
關鍵

五種攻擊:竊聽、假冒、訊息竄改 (含中間人)、重放、DoS;設計要假設介面暴露、網路不安全、演算法公開、攻擊者資源龐大。

STEP 2

生活妙喻

郵差路上的五種壞事

把通道想成寄信的郵路

你 (Alice) 寫信給朋友 (Bob),信要經過一段郵路。壞人 Mallory 能在路上動哪些手腳?正好對應五種攻擊:

  • 竊聽:Mallory 偷拆信、影印一份、再原封不動放回去。你和 Bob 都不知道信被看過。
  • 假冒:Mallory 用你的名義寫信給 Bob,Bob 以為是你寄的。
  • 訊息竄改:Mallory 攔下你的信,把『匯款給張三』改成『匯款給我』,再封好送出。
    • 中間人更狡猾:你和 Bob 第一次想交換『只有彼此看得懂的暗號』,Mallory 在這第一封信就偷換成自己的暗號,從此你倆所有信他都能讀、能改,還能無縫轉送。
  • 重放:你上週寄了一封『請幫我付這個月房租』的信,Mallory 影印起來,下個月再寄一次,房東就收了你兩次房租——他根本不用看懂信的內容。
  • 阻斷服務:Mallory 灌爆 Bob 的信箱,塞滿幾千封垃圾信,讓 Bob 找不到也收不到你真正的信。

關鍵體會:重放最陰險——壞人不需要看懂內容,只要『複製一份原樣再送』就能造成傷害。

💡
關鍵

郵路上的五種壞事:偷影印 (竊聽)、冒名寫信 (假冒)、改內容 (竄改/中間人)、再寄一次舊信 (重放)、灌爆信箱 (DoS)。

STEP 3

實用超能力

用攻擊清單為系統做威脅體檢

用五種攻擊掃描你的系統

設計或檢視任何網路服務時,逐一拿這五種攻擊去問『我擋得住嗎?』,就能快速找出弱點與對應的防禦工具。

攻擊 防禦的核心工具
竊聽 加密 (讓偷看到的也讀不懂)
假冒 認證 (證明對方真的是他)
訊息竄改 訊息完整性檢查 (摘要/MAC/簽章)
中間人 用可信通道取得的公鑰驗證憑證
重放 nonce 或時戳 (證明訊息是新鮮的)
DoS 流量限制、上游過濾、服務品質機制

攻擊流程示意

中間人攻擊之所以致命,是因為它卡在『建立信任』的最起點:

flowchart TD
  A[Alice 想取得 Bob 的公鑰] --> M[Mallory 攔截第一則訊息]
  M --> F[Mallory 回傳自己的公鑰冒充 Bob]
  F --> R[之後所有訊息 Mallory 先解密再轉送]
  R --> D[Alice 與 Bob 都以為通道安全]

下次設計登入或金鑰交換流程,特別留意第一則訊息怎麼建立信任——那往往是中間人攻擊的突破口。

💡
關鍵

用五種攻擊逐一體檢系統,對應加密、認證、完整性檢查、可信公鑰、nonce/時戳、流量限制等防禦;特別守住金鑰交換的第一則訊息。

🔆
生活妙喻:重放攻擊 ≈ 把舊的房租信再寄一次

壞人不必看懂內容,只要原封不動複製一份再送,就能讓你付兩次房租;這正是即使加密也可能被重放的原因。

🔆
生活妙喻:中間人攻擊 ≈ 在第一封交換暗號的信就偷換暗號

攻擊者卡在建立信任的最起點,換掉金鑰後便能無縫讀寫所有後續訊息,兩端都不知情。

🔆
生活妙喻:阻斷服務 (DoS) ≈ 灌爆對方的信箱

用海量垃圾訊息淹沒通道或資源,讓正當使用者收不到、用不了真正的服務。

本節字彙

Eavesdropping (竊聽)
未經授權取得訊息副本的攻擊,只偷看不修改。
🧠 eaves-drop = 躲在屋簷下偷聽,只聽不動手。
Man-in-the-middle (中間人攻擊)
攻擊者攔截金鑰交換的第一則訊息、換成自己的金鑰,從此能解密與竄改所有後續訊息。
🧠 卡在『中間』,兩邊的話都先經過他的手。
Replaying (重放攻擊)
把攔截到的訊息存下、稍後再送一次;即使訊息已加密認證也可能奏效。
🧠 Replay = 重播;同一段位元再播一次。
Denial of Service (阻斷服務)
用大量訊息淹沒通道或資源,使其他人無法正常存取。
🧠 讓服務被『拒絕 (denial)』,誰都用不了。
為什麼『重放攻擊』即使對加密又認證過的訊息也可能成功?
Alice 第一次向金鑰服務索取 Bob 的公鑰,Mallory 攔截這則請求並回傳自己的公鑰,之後讀寫所有訊息。這是哪種攻擊?
課本主張『最好公開加密演算法、只靠金鑰保密』。這個設計守則背後的假設是什麼?

電子交易需要哪些保護

用網購與網路銀行的例子,導出認證賣方、保護信用卡號、保護下載內容,以及銀行情境額外的『身分認證與不可否認』需求。

STEP 1

深度探秘

從網購與網路銀行導出安全需求

電子交易要保護什麼

網路上的交易——email、買賣商品、銀行業務、微型付款——都極度依賴安全。課本用網購情境,整理出幾項具體的安全需求:

  1. 認證賣方 (Authenticate the vendor):買家要能確信自己連到的真的是那個賣家的伺服器,而不是冒牌貨。
  2. 保護付款資訊:買家的信用卡號等資料不能落入第三方手裡,而且要原封不動地從買家傳到賣家(同時保密與完整)。
  3. 保護下載內容:若商品是可下載的數位產品,要確保內容不被竄改、不外洩地交到買家手上。

有趣的是:賣方通常不需要知道買家的真實身分(除非要寄送實體商品)。賣家在意的是『買家有沒有錢付』,而這通常是透過向買家的銀行請款來確認,而不是查買家身分。

銀行情境的額外需求

網路銀行的安全需求和網購類似(買家=帳戶持有人、銀行=賣家),但多了第四項:

  1. 認證帳戶持有人:在給予帳戶存取權之前,銀行要確認對方真的是帳戶持有人。

而且銀行還很在意一件事:帳戶持有人事後不能否認自己參與過交易。這個需求有個專有名詞叫 不可否認 (non-repudiation)

大規模帶來的系統需求

Internet 太大了,不可能要求每個買家事先和每個賣家建立特殊關係(例如先註冊金鑰)。所以還有個系統需求:買賣雙方即使素未謀面、也沒有第三方介入,也要能完成一筆安全交易。

💡
關鍵

網購需求:認證賣方、保密與完整的付款資訊、保護下載內容;銀行多了認證帳戶持有人與不可否認;大規模要求陌生雙方也能安全交易。

STEP 2

生活妙喻

在陌生市集買東西

把網購想成在陌生市集買東西

想像你到一個從沒去過的市集,向一個素未謀面的攤販買東西。你會擔心什麼?正好對應電子交易的安全需求:

  • 認證賣方:你得確認這個攤位真的是『某某名店』,而不是掛羊頭賣狗肉的山寨攤。
  • 保護付款資訊:你掏錢包時,不希望旁邊的扒手看到你的卡號,也不希望付款金額被人偷偷改大。
  • 保護下載內容:如果你買的是『數位音樂下載券』,你要拿到完整、沒被掉包的檔案。
  • 賣家不需要知道你是誰:攤販只關心你『付得出錢』,並不在意你叫什麼名字(除非要宅配到你家)。

再看銀行情境,多了兩件事:

  • 認證帳戶持有人:銀行櫃員要先確認『你真的是這個帳戶的主人』才讓你領錢。
  • 不可否認:你領完錢,不能事後翻臉說『我從來沒來領過』。所以銀行請你簽名留底——這正是數位簽章要做的事。

體會:陌生市集最棒的一點是——你和攤販第一次見面就能成交,不需要事先註冊會員。Internet 規模太大,安全機制也必須支援這種『陌生人也能安全交易』。

💡
關鍵

陌生市集買東西=電子交易:確認攤位是真的 (認證賣方)、別被偷看卡號 (保密)、拿到完整貨品;銀行還要確認你是帳戶主人並簽名留底 (不可否認)。

STEP 3

實用超能力

用需求清單檢視你用過的線上服務

把需求清單套到真實服務上

學會這套需求,你就能看穿任何線上交易服務在保護什麼、漏了什麼。以一個網路購物結帳流程為例:

安全需求 真實世界對應的技術
認證賣方 瀏覽器網址列的 https 與憑證、鎖頭圖示
付款資訊保密與完整 TLS 加密通道
保護下載內容 加密下載 + 完整性檢查
認證帳戶持有人 (銀行) 密碼、OTP、雙因素認證
不可否認 數位簽章、交易紀錄

為什麼『不可否認』對銀行特別重要

課本提到一個經典案例:提款機的『幽靈提款 (phantom withdrawal)』爭議——客戶聲稱『我沒領這筆錢』。銀行最好的回應,是拿出一份由帳戶持有人數位簽署、第三方無法偽造的交易紀錄。這就是不可否認的價值:它讓爭議有客觀證據可循。

一個容易踩的雷:cookie

課本特別點名:把過往交易紀錄存在使用者端的 cookie 有明顯安全弱點,因為桌機與行動裝置常處於不安全的實體環境。下次設計需要記住使用者狀態的功能,別把敏感憑證直接塞進 cookie。

💡
關鍵

用『認證賣方、保密完整、保護內容、認證持有人、不可否認』清單檢視線上服務;不可否認靠數位簽章解決幽靈提款這類爭議,別把敏感資料塞進 cookie。

🔆
生活妙喻:認證賣方 ≈ 確認市集攤位是真的名店

買家要先確認連到的是真賣家而非山寨攤,正如瀏覽器要驗證網站憑證後才信任它。

🔆
生活妙喻:不可否認 (non-repudiation) ≈ 領錢時的簽名留底

簽了名就不能事後賴帳說沒領過;數位簽章讓帳戶持有人無法否認自己參與過交易。

🔆
生活妙喻:陌生雙方也能安全交易 ≈ 市集裡第一次見面就能成交

Internet 規模太大,無法要求事先註冊金鑰,安全機制必須支援素未謀面、無第三方介入的交易。

本節字彙

Non-repudiation (不可否認)
讓交易參與者事後無法否認自己曾參與交易的安全性質,常用數位簽章達成。
🧠 repudiate = 否認;non- = 不能,簽了就賴不掉。
Authenticate the vendor (認證賣方)
讓買家能確認自己連到的確實是預期賣家的伺服器,而非冒名者。
🧠 先確認對面是不是『本尊』,再掏錢。
Phantom withdrawal (幽靈提款)
客戶聲稱自己沒做某筆提款的爭議;可用數位簽署且無法偽造的交易紀錄來解決。
🧠 幽靈=沒人承認的提款,要靠簽章抓出真相。
在一般網購情境中,下列哪一項『通常不是』賣方的核心需求?
網路銀行相較於一般網購,多出的一項關鍵需求是什麼?
提款機出現『幽靈提款』爭議時,客戶聲稱自己沒領過某筆錢。下列哪個安全性質最能幫銀行解決這個爭議?
02

密碼學的三大用途

加密靠金鑰這個秘密。對稱加密用共享金鑰、速度快;非對稱用公開/私密金鑰對、方便分發但慢 100 到 1000 倍。

先讀原文段落,旁邊就是白話

這是一本英文書。左邊放原文、右邊放白話導讀——你既讀得懂,也順手碰了原文。

原文 · 密碼學的三大用途 tains the integrity of the encrypted information, provided that some redundant information such as a checksum is included and checked. Secret communication with a shared secret key: Alice wishes to send some in- formation secretly to Bob. Alice and Bob share a secret key KAB. Alice uses KAB and an agreed encryption function E(KAB, M) to encrypt and send any number of messages {Mi}KAB to Bob.
白話導讀

加密靠金鑰這個秘密。對稱加密用共享金鑰、速度快;非對稱用公開/私密金鑰對、方便分發但慢 100 到 1000 倍。

對稱與非對稱:兩類加密金鑰

加密靠金鑰這個秘密。對稱加密用共享金鑰、速度快;非對稱用公開/私密金鑰對、方便分發但慢 100 到 1000 倍。

STEP 1

深度探秘

加密的核心是一個叫金鑰的秘密

加密與金鑰

加密 (encryption) 就是把訊息編碼成『藏起內容』的形式。現代密碼學的加解密都建立在一個秘密——金鑰 (key) 之上。金鑰是加密演算法裡的一個參數,特性是:沒有金鑰,就無法逆轉加密

常用的加密演算法分成兩大類:

對稱式 (Symmetric) — 共享秘密金鑰

寄件者和收件者共用同一把秘密金鑰,而且不能讓別人知道。同一把金鑰既用來加密,也用來解密。因為加解密用同一把鑰匙,所以又叫對稱式 (symmetric)

非對稱式 (Asymmetric) — 公開/私密金鑰對

用的是一對金鑰:

  • 公鑰 (public key):收件者事先公開,任何人都能拿到,用來加密。
  • 私鑰 (private key):只有收件者自己知道,用來解密。

雖然很多人都看得到公鑰,但只有持有私鑰的收件者能解密。因為加解密用不同的鑰匙,所以叫非對稱式 (asymmetric)

兩者的關鍵取捨

非對稱加密方便分發金鑰(公鑰隨便公開都沒關係),但它的運算成本通常是對稱式的 100 到 1000 倍!所以:

  • 大量資料 → 用對稱式(快)。
  • 安全地交換那把對稱金鑰 → 用非對稱式(方便)。

這就引出後面會講的混合協定 (hybrid protocol):先用公鑰交換一把對稱金鑰,再用對稱式加密大量資料,兩者的優點都吃到。

💡
關鍵

對稱式用同一把共享金鑰、速度快適合大量資料;非對稱式用公鑰加密私鑰解密、方便分發但慢上百倍;混合協定結合兩者優點。

STEP 2

生活妙喻

同一把鑰匙 vs 公開的投信口

兩種上鎖方式

對稱式=共用一把保險箱鑰匙

你和好友各有一把一模一樣的鑰匙,可以開同一個保險箱。你把東西鎖進去 (加密),朋友用相同鑰匙打開 (解密)。

  • 優點:開鎖很快。
  • 麻煩:你要怎麼安全地把這把鑰匙交給朋友?這正是對稱式最頭痛的『金鑰分發』難題。

非對稱式=公開的投信口 + 私人開箱鑰匙

想像 Bob 在門口裝了一個投信口 (公鑰):任何人都能把信投進去(用公鑰加密),但只有 Bob 手上那把開箱鑰匙 (私鑰) 能把信取出來看。

  • 優點:投信口可以公告周知,誰都能寄密信給 Bob,不必事先交換秘密
  • 代價:這種『投信口機關』做工複雜,開關一次很費力(運算貴上百倍)。

聰明的混合做法

所以真實系統這樣做:

用 Bob 公開的投信口 (公鑰),先寄一把共用保險箱鑰匙 (對稱金鑰) 給他;之後兩人就用這把又快又便宜的保險箱鑰匙來回傳大量資料。

用慢但方便的投信口解決『怎麼安全交鑰匙』,再用快的保險箱處理大量內容——這就是 TLS、HTTPS 背後的核心思路。

💡
關鍵

對稱式像共用保險箱鑰匙 (快但難安全交鑰匙),非對稱式像公開投信口 (方便但費力);先用投信口寄一把保險箱鑰匙,就兩全其美。

STEP 3

實用超能力

看懂為什麼 HTTPS 要混用兩種加密

為什麼不全用非對稱就好

既然非對稱式不用交換秘密、這麼方便,為什麼不全程用它?答案是效能:它比對稱式慢 100 到 1000 倍。一個網頁可能上百 KB,全用非對稱加密會慢到無法接受。所以實務上的分工是:

工作 用哪種 原因
安全交換那把對稱金鑰 非對稱 方便、不必事先共享秘密
加密實際的大量資料 對稱 快、成本低

混合協定流程

flowchart TD
  A[Alice 取得 Bob 的公鑰] --> B[Alice 產生一把對稱金鑰 KAB]
  B --> C[用 Bob 公鑰加密 KAB 傳給 Bob]
  C --> D[Bob 用私鑰解出 KAB]
  D --> E[雙方改用 KAB 對稱加密大量資料]

動手判斷

下次看到任何加密系統,問兩個問題就能看穿它的設計:

  1. 大量資料是用哪種加密? 幾乎一定是對稱式(為了速度)。
  2. 那把對稱金鑰是怎麼安全送到對方手上的? 答案常是『用對方的公鑰加密後送過去』。

理解這個分工,你就抓到了現代安全通訊(TLS/HTTPS)的骨架。

💡
關鍵

非對稱太慢不適合大量資料,所以實務用它安全交換對稱金鑰、再用對稱式加密內容;看穿任何加密系統就問『大量資料用哪種、金鑰怎麼送』。

🔆
生活妙喻:對稱式加密 ≈ 共用一把保險箱鑰匙

雙方用一模一樣的鑰匙加解密,開鎖快,但難題在於如何安全把這把鑰匙交給對方。

🔆
生活妙喻:非對稱式加密 ≈ 門口的公開投信口加私人開箱鑰匙

投信口 (公鑰) 公告周知、誰都能投信,但只有持私鑰者能取出,方便分發卻運算昂貴。

🔆
生活妙喻:混合協定 ≈ 用投信口寄一把保險箱鑰匙

先用慢而方便的非對稱式交換一把對稱金鑰,再用快的對稱式傳大量資料,兼得兩者優點。

本節字彙

Symmetric cryptography (對稱式加密)
加密與解密使用同一把共享秘密金鑰的加密法,速度快、適合大量資料。
🧠 symmetric = 對稱;兩邊用『同一把』鑰匙。
Asymmetric cryptography (非對稱式加密)
使用公鑰加密、私鑰解密的一對金鑰,方便分發但運算成本高。
🧠 a-symmetric = 不對稱;加密、解密用『不同把』鑰匙。
Hybrid protocol (混合協定)
先用公鑰加密交換一把對稱金鑰,再用對稱式加密大量資料的做法,如 TLS。
🧠 hybrid = 混血;非對稱負責交鑰匙、對稱負責跑資料。
對稱式與非對稱式加密最根本的差別是什麼?
為什麼實務上不全程使用非對稱式加密來保護整個連線的大量資料?
在混合協定中,非對稱式加密最主要負責哪一項工作?

保密、認證與挑戰的妙用

用共享金鑰可保密與認證,但有金鑰分發與重放兩大難題。認證伺服器用『票證』與『挑戰』讓密碼不必上網路。

STEP 1

深度探秘

解密成功,就等於認證

密碼學的前兩個用途

密碼學在安全系統裡扮演三個主要角色,這一節先看前兩個:保密與完整、以及認證

保密與完整

用一把金鑰加密的訊息,只有知道對應解密金鑰的人能解開。只要解密金鑰不外洩、演算法夠強,訊息就能保密。若再附上一個檢查碼 (checksum) 之類的冗餘資訊並加以檢查,就也能維護完整性(內容沒被竄改)。

但用共享金鑰做保密,會冒出兩個問題:

  • 問題 1:Alice 要怎麼安全地把共享金鑰 KAB 送給 Bob?
  • 問題 2:Bob 怎麼知道收到的訊息不是 Mallory 早先攔截、稍後重放的舊訊息?(重放不需要金鑰!)

認證:解密成功=身分證明

這是個關鍵洞見:如果一把金鑰只有兩方知道,那麼一則訊息能被某把金鑰成功解密(且含正確檢查碼),就能推論發送者擁有對應的金鑰,於是推斷出發送者的身分。

換句話說:成功解密,就認證了訊息來自特定的發送者

工作階段金鑰。">票證與挑戰

課本用一個認證伺服器 Sara 的場景說明。Sara 安全地保管所有人的秘密金鑰(由密碼推導而來)。它會發票證 (ticket):一個加密過的憑據,裡面裝著主體的身分和一把為這次通訊新產生的工作階段金鑰 (session key)

最巧妙的是挑戰 (challenge) 的概念:Sara 把回應用 Alice 的金鑰 KA 加密。這就是一個挑戰——Alice 只有能算出 KA(從她的密碼推導)才解得開。冒名者解不開,當場被擋下。重點是:Alice 的密碼根本不必傳上網路!

💡
關鍵

若金鑰只有兩方知道,成功解密即可認證發送者身分;票證是內含身分與工作階段金鑰的加密憑據,挑戰讓密碼不必上網即可驗證身分。

STEP 2

生活妙喻

只有你能打開的上鎖盒子

用上鎖盒子理解認證與挑戰

解密成功=認證

假設世界上只有你和我有一把相同的鎖。今天我收到一個用這把鎖鎖住的盒子,而我能打開它——我就可以合理推論:這盒子一定是你鎖的,因為除了你沒有別人有這把鎖。這就是『成功解密=認證身分』的精髓。

票證=活動專用手環

想像你去音樂節,售票處 (Sara) 給你一個手環 (ticket):上面寫著你的身分和一組『今晚專用通行碼 (session key)』。你戴著它去找各攤位 (Bob),攤位驗過手環就知道你是誰、該用哪組通行碼跟你互動。

挑戰=只有真本人解得開的謎題

最聰明的是:售票處不是直接問你『密碼是多少』(那樣密碼就會在空氣中被偷聽),而是把手環鎖進一個只有你密碼能打開的盒子裡交給你。

  • 真的你:用密碼打開盒子,拿到手環,開心入場。
  • 冒名者:拿到盒子卻打不開,當場破功。

妙處:你的密碼從頭到尾沒說出口,只是被你『用來開盒子』,所以偷聽的人什麼都偷不到。

💡
關鍵

只有你我有同款鎖,我能開你鎖的盒子就證明是你 (認證);票證像寫著身分與通行碼的手環;挑戰是把手環鎖進只有真本人密碼能開的盒子,密碼不必說出口。

STEP 3

實用超能力

看懂登入系統為何不直接傳密碼

為什麼好的登入系統不把密碼丟上網

菜鳥設計會這樣做:『使用者輸入密碼 → 把密碼送到伺服器比對』。問題是密碼在網路上跑,可能被竊聽。

挑戰機制提供更聰明的做法:伺服器丟出一個『只有真本人 (知道密碼) 才能正確處理』的挑戰,使用者在本機用密碼處理它、回傳結果。密碼本身從不離開使用者的電腦

flowchart TD
  A[Alice 向 Sara 表明身分並請求票證] --> B[Sara 用 Alice 金鑰 KA 加密回應]
  B --> C[回應內含票證與工作階段金鑰 KAB]
  C --> D[Alice 用密碼推導出 KA 解開回應]
  D --> E[冒名者沒有正確密碼便解不開 當場被擋]

對應現實技術

觀念 真實世界
票證 (ticket) Kerberos 的 ticket、登入後的 session token
工作階段金鑰 一次連線專用的臨時金鑰
挑戰 (challenge) challenge-response 登入、密碼不上網

別忘了那兩個未解問題

單靠共享金鑰加密,還沒解決『金鑰怎麼安全分發』和『怎麼防重放』。前者靠公鑰密碼學(下一節),後者靠 nonce 或時戳(案例研究會看到 Kerberos 的做法)。看登入流程時,特別留意它怎麼防止舊訊息被重放

💡
關鍵

好的登入用挑戰機制讓密碼不上網:伺服器丟出只有真本人能處理的挑戰,本機用密碼處理後回傳;但金鑰分發與防重放仍待公鑰密碼學與 nonce/時戳解決。

🔆
生活妙喻:成功解密=認證 ≈ 只有你我有同款鎖

若一把鎖只有兩人有,我能打開你鎖的盒子,就能推論盒子是你鎖的,從而認證了你的身分。

🔆
生活妙喻:票證 (ticket) ≈ 音樂節的專用手環

手環上有你的身分和今晚專用通行碼,各攤位驗過就知道你是誰、用哪組金鑰互動。

🔆
生活妙喻:挑戰 (challenge) ≈ 把手環鎖進只有真本人密碼能開的盒子

伺服器不直接問密碼,而是給一個只有知道密碼者才解得開的東西,密碼因此不必傳上網路。

本節字彙

Ticket (票證)
認證伺服器發出的加密憑據,內含被授予者的身分與一把當前通訊的工作階段金鑰。
🧠 像入場券,驗票就知道你是誰、能做什麼。
Session key (工作階段金鑰)
為一段通訊 (工作階段) 新產生的共享秘密金鑰,供雙方在一連串互動中安全使用。
🧠 session = 一次連線;用完就丟的臨時鑰匙。
Challenge (挑戰)
用對方金鑰加密的資料,只有真正擁有該金鑰 (或密碼) 的人才能使用,使密碼不必傳上網。
🧠 丟出一道『只有真本人解得開』的謎題來驗身分。
若一把金鑰只有 Alice 和 Bob 兩人知道,Bob 收到一則能用這把金鑰成功解密、且含正確檢查碼的訊息。Bob 可以合理推論什麼?
認證伺服器發出的『票證 (ticket)』裡通常包含哪些東西?
Sara 把回應用 Alice 的金鑰 KA 加密後送出,這構成一個『挑戰』。它最聰明的地方在於?

數位簽章與摘要函式

數位簽章把只有簽署者知道的秘密不可逆地綁到文件上。實作上是先算摘要 (digest),再用私鑰加密摘要。

STEP 1

深度探秘

把只有你知道的秘密綁到文件上

數位簽章要做什麼

數位簽章 (digital signature) 模擬傳統親筆簽名的角色:向第三方證明一份文件確實出自簽署者、且未被竄改。一個好的簽名要滿足三件事:

  • 真實 (Authentic):讓收件者相信簽署者是刻意簽了這份文件,且內容沒被別人改過。
  • 不可偽造 (Unforgeable):證明是簽署者本人簽的,簽名不能被複製到另一份文件上。
  • 不可否認 (Non-repudiable):簽署者事後無法可信地否認自己簽過。

數位簽章的技術核心是:把只有簽署者知道的秘密,不可逆地綁定到文件上。

摘要:文件的指紋

直接加密整份文件當簽名太貴。更好的做法是先壓出一個摘要 (digest)——一個固定長度的值,由安全摘要函式 (secure digest function) 算出。它類似檢查碼,但有個關鍵性質:

極不可能讓兩份不同的文件得出相同的摘要值。

摘要又叫安全雜湊 (secure hash),記為 H(M)。

公鑰簽章的步驟

通常用公鑰密碼學來做:簽署者用私鑰產生簽章,任何收件者用對應的公鑰驗證。注意方向和加密剛好相反——加密是用收件者的公鑰,簽章是用簽署者的私鑰。

以 Alice 簽、Bob 驗為例:

  1. Alice 算出文件摘要 H(M)。
  2. Alice 用私鑰加密摘要,產生簽章 S = {H(M)}KApriv,附在 M 後面。
  3. Bob 收到後,自己算一次 H(M)。
  4. Bob 用 Alice 的公鑰解開 S,得到原摘要,和自己算的比對。相符就代表簽章有效

還有一個前提:驗證者要確定那把公鑰真的是簽署者的——這由公鑰憑證解決(下一節)。

💡
關鍵

數位簽章要真實、不可偽造、不可否認;做法是先算文件摘要 (固定長度指紋),再用私鑰加密摘要當簽章,收件者用公鑰驗證並比對摘要。

STEP 2

生活妙喻

蠟封印章與文件指紋

用蠟封印章理解數位簽章

古時候重要信件會用蠟封印章:把熱蠟滴在信封上,用只有你有的私章壓出花紋。

  • 只有你有那枚私章 (私鑰) → 別人偽造不出來(不可偽造)。
  • 印章花紋跟這封信綁在一起 → 換一封信印章就對不上(真實)。
  • 你壓了就賴不掉 → 大家都認得你的印章(不可否認)。

別人驗證時,拿你公開展示過的印章樣本 (公鑰) 比對信上的花紋。

摘要=文件的指紋

但如果文件很長,把整份都『加印』太費事。聰明的做法:先幫文件採一枚指紋 (摘要)——不管文件多長,指紋都是固定短短一串。

  • 同一份文件 → 永遠同一枚指紋
  • 改動一個字 → 指紋就完全不同
  • 幾乎不可能找到兩份不同文件有相同指紋

然後你只要對這枚指紋蓋章 (用私鑰加密摘要) 就好,又快又安全。

驗證流程

收件者怎麼確認沒被掉包?

  1. 自己幫收到的文件重採一次指紋
  2. 用你的公開印章樣本,解開你蓋章的那枚指紋。
  3. 兩枚指紋一樣 → 文件是你簽的、而且一字未改。

體會:只要文件被改過哪怕一個字,重採的指紋就對不上,掉包立刻現形。

💡
關鍵

私鑰像只有你有的蠟封私章 (不可偽造),摘要像文件指紋 (固定長度、改一字就全變);對指紋蓋章再讓收件者重採指紋比對,掉包立刻現形。

STEP 3

實用超能力

分清楚加密與簽章的金鑰用法

最容易搞混的一點:金鑰方向相反

很多初學者會把『加密』和『簽章』的金鑰用法搞混。記住這張表就不會錯:

目的 用誰的什麼金鑰 誰能還原
保密傳訊 (加密) 收件者的公鑰加密 只有收件者用私鑰
數位簽章 簽署者的私鑰加密摘要 任何人用簽署者公鑰

直覺記法:

  • 加密是『只想讓某一個人看懂』→ 用那個人的公鑰鎖,只有他私鑰能開。
  • 簽章是『想讓所有人都驗得出是我簽的』→ 用我的私鑰簽,全世界用我公鑰驗。

簽章驗證流程

flowchart TD
  A[Alice 算文件摘要 HM] --> B[用私鑰加密摘要產生簽章 S]
  B --> C[把 M 與 S 一起送給 Bob]
  C --> D[Bob 自己算一次摘要 HM]
  D --> E[Bob 用 Alice 公鑰解開 S 得到原摘要]
  E --> F[兩個摘要相符則簽章有效]

動手判斷

看到任何用到金鑰的安全動作,先問:『目的是保密還是證明來源?』

  • 保密 → 該用收件者公鑰
  • 證明來源 (簽章) → 該用簽署者私鑰

搞懂這個方向,你就不會再把 PGP、JWT、程式碼簽章這些東西的金鑰用反了。

💡
關鍵

加密用收件者公鑰 (只讓特定人看懂),簽章用簽署者私鑰 (讓所有人驗出是誰簽的);判斷時先問目的是保密還是證明來源,金鑰方向就不會用反。

🔆
生活妙喻:數位簽章 ≈ 只有你有的蠟封私章

用只有自己持有的私章壓出花紋,別人偽造不出、也賴不掉,正如用私鑰產生無法偽造的簽章。

🔆
生活妙喻:摘要 (digest/hash) ≈ 文件的指紋

不論文件多長,指紋都是固定短串;改一個字指紋就全變,且幾乎不可能兩份不同文件有相同指紋。

🔆
生活妙喻:加密與簽章金鑰方向相反 ≈ 鎖給特定人 vs 蓋章給大家驗

加密用收件者公鑰只讓他看懂;簽章用自己私鑰讓全世界都能驗出是你簽的。

本節字彙

Digital signature (數位簽章)
用簽署者只有自己知道的秘密 (私鑰) 不可逆地綁到文件上,證明來源且未被竄改的機制。
🧠 數位版的親筆簽名,靠私鑰而非筆跡。
Digest / Secure hash (摘要 / 安全雜湊)
由安全摘要函式算出的固定長度值,作為文件指紋;極不可能兩份不同文件得到相同值。
🧠 digest = 把長文『消化』成一小段固定指紋。
Unforgeable (不可偽造)
簽章只能由簽署者本人產生,無法被複製到另一份文件上。
🧠 forge = 偽造;un- = 不能偽造。
用公鑰密碼學產生數位簽章時,簽署者是用哪一把金鑰來簽?
為什麼數位簽章通常先對『摘要 (digest)』簽,而不是直接對整份文件加密?
安全摘要函式 H 必須具備『極不可能讓兩份不同文件得到相同 H 值』的性質。若缺少這個性質,會出什麼問題?

憑證與信任鏈

憑證是被某主體簽過名的聲明。透過憑證鏈把信任從一個眾所周知的權威傳遞下去,並用到期日處理撤銷問題。

STEP 1

深度探秘

被簽過名的一句聲明

憑證是什麼

數位憑證 (digital certificate) 就是一份被某主體簽過名的聲明(通常很短)。最重要的一種是公鑰憑證 (public-key certificate):它把一把公鑰綁定到一個名字上,並由一個受信任的權威簽名。

課本用 Bob 是一家銀行的場景說明。客戶要確認自己面對的真的是『Bob 銀行』。問題來了:客戶 Carol 要驗證 Bob 的簽名,就需要 Bob 的公鑰,而且要確定這把公鑰是真的——否則 Alice 大可自己生一對假金鑰,偽造一張冒充 Bob 銀行的憑證。

信任鏈:遞迴的問題

Carol 需要的,是一張載明 Bob 公鑰、且由一個眾所周知且受信任的權威簽名的憑證。假設 Fred 代表銀行公會,負責替各銀行的公鑰背書,他就能替 Bob 發一張公鑰憑證。

但這張憑證又依賴 Fred 的公鑰是真的……於是我們陷入遞迴的真實性問題!這條鏈要怎麼收尾?

解法:必須有一個可信的起點——Carol 透過某種她有信心的管道(例如 Fred 的代表親手交給她,或她信任的人轉交)取得 Fred 的真實公鑰。

這就形成一條憑證鏈 (certification chain)。鏈愈長,出現薄弱環節的風險愈大;信任也很少是絕對的,選哪個權威當起點,要看憑證的用途。

撤銷的難題

有時需要撤銷 (revoke) 憑證——例如 Alice 退出了某社團,但她和別人手上可能還留著舊憑證。要追回並刪除所有副本幾乎不可能,通知所有可能的收件者也很麻煩。

常見解法:在憑證裡放一個到期日 (expiry date)。收到過期憑證就拒收,當事人需重新申請更新。若需要更快撤銷,才動用那些較笨重的機制。

💡
關鍵

公鑰憑證把公鑰綁到名字、由受信任權威簽名;驗證會遞迴依賴上層公鑰真實性,需一個可信起點形成憑證鏈;撤銷困難,常用到期日解決。

STEP 2

生活妙喻

公證與推薦信的連鎖

用推薦信理解憑證鏈

想像你要和一個陌生人 Bob 做生意,但你不認識他。怎麼確認他真的是『Bob 銀行的人』?

  • Bob 拿出一封推薦信 (憑證):『此人是 Bob 銀行,由銀行公會 Fred 背書』,下面有 Fred 的簽名
  • 但你怎麼知道 Fred 的簽名是真的?你需要認得 Fred 的筆跡 (Fred 的公鑰)
  • 你怎麼確定那真是 Fred 的筆跡?也許是你信任的朋友親手把 Fred 的簽名樣本交給你的……

這就是信任鏈:一封信背書另一封信,一路往上,直到你親自信任的某個起點

鏈愈長愈危險

就像『朋友的朋友的朋友說他可靠』——傳的人愈多,中間有人不可靠的風險就愈大。所以憑證鏈愈長,薄弱環節愈多。

到期日:最省事的撤銷

假設你不再是某俱樂部會員,但你的會員卡還在你皮夾、甚至在別人手上影印了一份。俱樂部要一張張追回不可能。最簡單的做法是:會員卡印上有效期限

  • 過期了?守門員一律不認,請你重新辦卡。

體會:與其費力『收回』所有舊憑證,不如一開始就讓它們『自動過期』,這就是到期日的智慧。

💡
關鍵

憑證鏈像推薦信背書推薦信,一路往上到你親自信任的起點;鏈愈長薄弱環節愈多;到期日像會員卡有效期限,是最省事的撤銷方式。

STEP 3

實用超能力

看懂瀏覽器網址列那把鎖

你每天都在用憑證鏈

當你打開一個 https 網站,瀏覽器就在背後驗證一條憑證鏈:

flowchart TD
  R[根憑證權威 內建於瀏覽器 可信起點] --> I[中介憑證權威]
  I --> S[網站的公鑰憑證]
  S --> B[瀏覽器驗證整條鏈通過才顯示安全鎖頭]
  • 可信起點=瀏覽器/作業系統內建的『根憑證 (root CA)』,相當於 Carol 親手拿到的 Fred 公鑰。
  • 一層層往下驗,直到網站自己的憑證。任何一環驗不過,瀏覽器就跳警告。

看穿真實機制

課本觀念 真實世界
受信任權威 憑證權威 CA,如 Verisign
可信起點 內建的根憑證
憑證鏈 root → intermediate → 網站憑證
到期日 憑證的有效期間 (Not Before / Not After)
撤銷 CRL 撤銷清單 / OCSP

動手體會

下次看到網址列的鎖頭,點開『憑證』,你會看到一條:最上面是根、中間是中介、最下面是這個網站。你親眼看到的,正是課本講的『一路往上到可信起點』。也別忘了憑證有到期日——這就是為什麼網站管理員每隔一段時間要更新憑證。

💡
關鍵

https 背後就是瀏覽器驗證一條 root→intermediate→網站 的憑證鏈,根憑證是內建的可信起點;憑證有到期日,這也是要定期更新憑證的原因。

🔆
生活妙喻:公鑰憑證 ≈ 由公會背書的推薦信

憑證把公鑰綁到名字、由受信任權威簽名,就像一封載明身分並有公會簽名背書的推薦信。

🔆
生活妙喻:憑證鏈與可信起點 ≈ 推薦信背書推薦信,直到你親自信任的人

一封信背書另一封,一路往上,必須收尾在一個你直接信任的起點,否則陷入遞迴。

🔆
生活妙喻:用到期日做撤銷 ≈ 會員卡的有效期限

與其費力追回所有舊憑證,不如讓它們自動過期,過期就拒收並要求更新。

本節字彙

Public-key certificate (公鑰憑證)
把一把公鑰綁定到某個名字、並由受信任權威簽名的文件。
🧠 一張『這把公鑰屬於某某人,我 (權威) 蓋章保證』的證書。
Certification chain (憑證鏈)
一連串互相背書的憑證,從目標一路驗證到一個可信的起點 (根權威)。
🧠 chain = 鎖鏈;一環扣一環,直到可信的起點。
Expiry date (到期日)
憑證上的有效期限,過期即應拒收並要求更新,是處理撤銷最常見的省事做法。
🧠 像會員卡到期就失效,省去逐一追回的麻煩。
一張公鑰憑證最核心的功能是什麼?
Carol 要驗證 Bob 銀行的憑證,需要 Fred 的公鑰;而 Fred 的公鑰又需要被驗證……這個『遞迴的真實性問題』要如何收尾?
課本指出『憑證鏈愈長,風險愈大』。為什麼?
03

存取控制、憑證與防火牆

保護領域是一組 <資源, 權限>。兩種實作:能力 (capability) 像自帶的鑰匙,ACL 像門口的名單。

先讀原文段落,旁邊就是白話

這是一本英文書。左邊放原文、右邊放白話導讀——你既讀得懂,也順手碰了原文。

原文 · 存取控制、憑證與防火牆 is relatively easy to compute, whereas the inverse, , is so hard to compute that it is not feasible. Such functions are known as one-way functions. The effectiveness of any method for encrypting information depends upon the use of an encryption function FK that has this one-way property. It is this that protects against attacks designed to discover M given .
白話導讀

保護領域是一組 <資源, 權限>。兩種實作:能力 (capability) 像自帶的鑰匙,ACL 像門口的名單。

保護領域、能力與存取控制清單

保護領域是一組 <資源, 權限>。兩種實作:能力 (capability) 像自帶的鑰匙,ACL 像門口的名單。

STEP 1

深度探秘

誰能對什麼資源做什麼

存取控制要回答的問題

認證解決了『你是誰』,存取控制 (access control) 接著解決『你能對這個資源做什麼』。伺服器收到形如 <op, principal, resource> 的請求(操作、主體、資源),會先認證請求與主體的憑據,再套用存取控制:拒絕任何主體沒有足夠權限的操作。

保護領域

保護領域 (protection domain) 是一個抽象:它是一組 <資源, 權限> 配對,列出某執行環境裡的處理程序能存取哪些資源、能做哪些操作。通常一個保護領域對應一個主體——使用者登入、身分被認證後,系統就為他要跑的程式建立一個保護領域,裡面包含他擁有的全部存取權(含透過群組取得的)。例如 UNIX 用使用者與群組 ID 決定處理程序的保護領域。

保護領域只是抽象,分散式系統常用兩種實作:

能力 (Capabilities)

能力是一個不可偽造的二進位值,像一把存取鑰匙,讓持有者能對特定資源做特定操作。它通常包含:資源識別碼、允許的操作清單、以及一個讓它不可偽造的認證碼 (數位簽章)。請求形如 <op, userid, capability>。最大優點是自帶權限——伺服器只要驗證能力本身即可,就像實體鑰匙一樣。但它也有實體鑰匙的兩個毛病:

  • 遭竊:誰拿到鑰匙誰就能用,不管是不是合法持有者。
  • 難撤銷:持有者狀態改變了 (例如離職),卻可能還留著鑰匙繼續用。

存取控制清單 (ACL)

ACL 反過來:每個資源旁存一份清單,每筆是 <領域, 操作>,列出哪些領域能對它做哪些操作。請求形如 <op, principal, resource>,伺服器認證主體後,到該資源的 ACL 裡查主體有沒有這項操作的權限。UNIX、Windows NT 檔案系統的權限位元就是這種做法。

💡
關鍵

保護領域是某主體的 <資源,權限> 集合;能力是自帶權限的不可偽造鑰匙 (有遭竊與難撤銷問題),ACL 是存在資源旁的權限名單。

STEP 2

生活妙喻

門禁卡 vs 門口的訪客名單

兩種進門方式

要控制誰能進一棟大樓的各個房間,有兩種截然不同的做法,正好對應能力與 ACL。

能力=你手上的門禁卡

你被發了一張門禁卡 (capability),卡片本身就記載著你能開哪些門。走到門口,門鎖只要驗『這張卡有沒有開這扇門的權限』就放行——不需要去查你是誰

  • 優點:很快,門鎖不必維護一大本名單。
  • 麻煩:
    • 遭竊:卡片掉了被人撿走,撿到的人就能進門。
    • 難撤銷:你離職了卻沒交回卡片,門鎖根本不知道,你還能進。

ACL=門口貼的訪客名單

反過來,每扇門口貼一張名單 (ACL):列出『誰能進、能做什麼』。你來了,警衛先確認你是誰,再到名單上查你有沒有資格。

  • 優點:要取消某人權限,直接從名單劃掉就好(撤銷容易)。
  • 代價:每次都要先認證你、再翻名單,比較費工。

一句話對比

能力 (鑰匙在你手上) ACL (名單在門口)
權限存在哪 持有者身上 資源旁邊
驗證方式 驗鑰匙本身 認證身分再查名單
撤銷 容易 (劃掉名字)
遭竊風險 較低
💡
關鍵

能力像記載權限的門禁卡 (自帶權限、快,但遭竊難撤銷),ACL 像門口的訪客名單 (先認證身分再查、撤銷容易但較費工)。

STEP 3

實用超能力

辨認你身邊的能力與 ACL

你天天在用這兩種機制

學會分辨能力與 ACL,你就能看穿各種授權系統的本質。判斷訣竅:權限資訊是『跟著持有者跑』,還是『存在資源那一端』?

真實例子 屬於 為什麼
演唱會門票、飯店房卡 能力 票/卡本身帶著權限,驗票就放行
雲端分享連結 (持連結即可看) 能力 連結就是鑰匙,誰拿到誰能看
UNIX 檔案的 rwx 權限 ACL 權限存在檔案旁,依使用者查
Google 文件指定某人可編輯 ACL 權限掛在文件上,依身分授權
OAuth access token / JWT 能力 token 自帶權限,難即時撤銷

看穿『難撤銷』的痛點

為什麼『持連結即可存取』的雲端分享、或 JWT,都有難以立即撤銷的老問題?因為它們本質是能力——權限跟著那串東西跑,一旦外流,系統很難馬上作廢它。這正是課本講的能力兩大缺點:遭竊難撤銷

動手判斷

下次遇到任何授權設計,先問:

  1. 權限資訊在哪一端? 在持有者手上(能力)還是資源旁(ACL)?
  2. 要取消某人的權限容易嗎? 若很難,多半是能力型,要特別設計時限或撤銷清單。

課本也提到,兩者可以搭配使用:用 ACL 做主控、再用能力快取結果以加速重複存取。

💡
關鍵

判斷授權系統就問『權限在持有者身上 (能力) 還是資源旁 (ACL)』;門票、分享連結、JWT 是能力,故難撤銷;檔案權限、文件授權是 ACL,撤銷容易。

🔆
生活妙喻:能力 (capability) ≈ 記載權限的門禁卡

卡片本身帶著你能開哪些門的權限,門鎖驗卡即放行,但卡掉了或離職沒繳回都很難處理 (遭竊、難撤銷)。

🔆
生活妙喻:存取控制清單 (ACL) ≈ 門口張貼的訪客名單

權限存在資源那一端,警衛先確認你是誰再查名單,要取消權限只要從名單劃掉,撤銷容易。

🔆
生活妙喻:保護領域 (protection domain) ≈ 一個人手上全部的權限集合

登入後系統為你建立的執行環境,匯集你 (含群組) 擁有的所有 <資源,權限>,是能力與 ACL 共同實作的抽象。

本節字彙

Protection domain (保護領域)
一組 <資源, 權限> 配對,列出某執行環境 (通常對應一個主體) 可存取的資源與允許的操作。
🧠 一個人的『權限地盤』,圈起他能碰的所有資源。
Capability (能力)
不可偽造的存取鑰匙,自帶資源識別與允許操作,持有即可存取;缺點是遭竊與難撤銷。
🧠 像門禁卡:權限在卡上,誰拿到誰能用。
Access Control List (存取控制清單 / ACL)
存放在資源旁的 <領域, 操作> 名單,伺服器認證主體後查它是否有權限。
🧠 門口的名單:先認人,再查他在不在名單上。
能力 (capability) 與存取控制清單 (ACL) 最關鍵的差別是什麼?
課本說能力像實體鑰匙,會繼承鑰匙的哪兩個毛病?
UNIX 與 Windows NT 檔案系統用一組權限位元、依檔案擁有資訊決定誰能存取。這屬於哪種機制?

憑據、角色與委派

憑據是請求存取時提出的證據,引入『代言 (speaks for)』概念;角色式憑據好用;委派讓服務能代客戶存取資源。

STEP 1

深度探秘

憑據如何代言一個主體

憑據是什麼

憑據 (credentials) 是主體在請求存取資源時提出的一組證據。最簡單的情況:一張載明身分的憑證就夠了,用它去查 ACL 裡的權限。但這個概念可以推廣,處理更細緻的需求。

代言 (speaks for)

每次操作都要使用者親自互動、重新認證太麻煩。於是引入一個關鍵概念:憑據『代言 (speaks for)』一個主體。例如使用者的公鑰憑證代言該使用者——任何收到以該使用者私鑰認證之請求的處理程序,都可以認定請求是該使用者發出的。

『代言』可以延伸得很遠:

  • 雙人核可:某些敏感動作要求兩位團隊成員的授權,請求者就同時提交自己的憑據和另一位成員的背書憑據,註明兩者要合起來檢查。
  • 投票:投票請求要附上『選民憑證』加『身分憑證』。
  • 一般而言,存取控制檢查=對所提交憑證組合出的邏輯式求值

角色式憑據

角色式憑據 (role-based credentials) 在實務上特別好用:先為組織或協作任務定義一組角色,把應用層的存取權綁到角色上;再透過發角色憑證把角色指派給特定主體。這樣權限管理就從『管每個人』變成『管角色』,乾淨許多。

委派

委派 (delegation) 是一種特別有用的憑據:它讓一個主體(或代表主體的處理程序)能以另一個主體的權限去執行動作。經典例子是列印伺服器:把要印的檔名交給它,它代你去讀取檔案。如果檔案是讀取保護的,除非列印伺服器能暫時取得讀取權,否則印不出來。

委派可用委派憑證(由請求者簽名、授權另一主體存取指定資源)或能力達成。委派時通常會把權限限縮成原本的子集、並加時限,避免被委派者濫用——例如限制列印伺服器的權限只在短時間內有效,降低它日後被入侵而洩漏檔案的風險。

💡
關鍵

憑據是請求存取的證據並可『代言』主體;角色式憑據把權限綁到角色再指派給人;委派讓服務以客戶權限存取資源,通常限縮成子集並加時限。

STEP 2

生活妙喻

代辦、職位章與授權書

用日常授權理解這三個概念

代言=出示證件就代表你

你不可能每辦一件事就被警察重新查一次身分。你的身分證 (憑據) 會『代言』你——出示它,對方就認定是你本人在辦事。這正是『憑據代言主體』。

雙人核可就像公司大額支票要兩位主管共同簽名:一個人的章不夠,兩張背書合起來才算數。

角色式憑據=職位而非個人

公司不會說『這份報表只有王小明能看』,而是說『會計才能看』。誰被指派為會計(拿到角色憑證),誰就有這個權限。

  • 好處:王小明調職了,只要收回他的會計角色,不必去改一大堆『王小明能不能看 A、能不能看 B』的設定。

委派=給代辦人一張限定授權書

你請人代你去銀行辦一件事,會給他一張授權書 (委派憑證)

  • 只授權這一件事(限縮成子集)——不會把你整個帳戶的權限都給他。
  • 只在某段時間有效(加時限)——辦完就失效。

這跟『列印伺服器代你讀檔案』一模一樣:給它剛好夠用的權限、短時間有效,就算它之後被入侵,損害也有限。

💡
關鍵

憑據像身分證代言你、雙人核可像支票要兩位主管簽名;角色式憑據像『會計』職位 (調職只收回角色);委派像限定範圍與時效的授權書。

STEP 3

實用超能力

用角色與最小委派設計乾淨的權限

為什麼現代系統都用角色

直接『每個人對每個資源逐一設權限』會爆炸:100 人 × 50 個資源就是 5000 條規則,人員異動就要逐條改。角色式存取控制 (RBAC) 把它拆成兩段,乾淨太多:

flowchart TD
  P[主體 使用者] --> R[角色 如會計 主管]
  R --> Q[權限 對哪些資源能做什麼]
  P2[新進員工] --> R
  P3[離職員工 收回角色] -.-> R
  • 改一個角色的權限 → 所有該角色的人一次同步
  • 人員異動 → 只要指派或收回角色,不必動權限本身。

委派的黃金守則:最小權限 + 時限

當一個服務需要代客戶存取資源時,務必記住課本的兩條原則:

  1. 限縮成子集:只給它完成這件事剛好夠用的權限,不要把客戶的全部權限都交出去。
  2. 加上時限:權限只在短時間內有效,降低它日後被攻破時的損害。

對應現實技術

課本觀念 真實世界
代言 (speaks for) session token、公鑰憑證代表使用者
角色式憑據 RBAC、IAM role
委派 + 限縮 + 時限 OAuth 的 scope 與短期 access token

下次設計『服務 A 要替使用者去呼叫服務 B』時,別把使用者的完整權限交出去——只給這次任務需要的最小範圍、並設短效期

💡
關鍵

用角色把『人』與『權限』解耦,異動只需指派或收回角色;委派時遵守最小權限與時限兩守則,對應 OAuth 的 scope 與短期 token。

🔆
生活妙喻:代言 (speaks for) ≈ 出示身分證就代表你本人

憑據替主體發聲,對方認得它就認定是你在辦事,不必每次重新查身分。

🔆
生活妙喻:角色式憑據 ≈ 『會計』這個職位而非某個人

權限綁在角色上,誰被指派該角色就有權限;調職只要收回角色,不必逐條改設定。

🔆
生活妙喻:委派 + 限縮 + 時限 ≈ 給代辦人一張限定範圍與時效的授權書

只授權這一件事、只在一段時間有效,就算代辦人之後出事,損害也有限。

本節字彙

Credential (憑據)
主體請求存取資源時提出的證據;可『代言』主體,讓系統認定請求由該主體發出。
🧠 像證件,出示它就代表你本人。
Role-based credential (角色式憑據)
把存取權綁到角色、再把角色指派給主體的做法,讓權限管理以角色為單位。
🧠 管『職位』不管『個人』,異動只換角色。
Delegation (委派)
讓一個主體以另一個主體的權限執行動作,通常限縮成權限子集並加上時限。
🧠 授權書:只授權這件事、只在這段時間有效。
課本說憑據可以『代言 (speaks for)』一個主體,這是什麼意思?
一家公司不想每次人員異動就重設一大堆權限,於是把『會計才能看財報』這類規則綁到角色上、再把角色指派給員工。這對應哪個概念,好處是什麼?
列印伺服器要代使用者讀取一個讀取保護的檔案才能列印。這需要用到什麼機制?

防火牆的作用與限制

防火牆攔截所有外部通訊、只放行被授權者。但它防不了內部攻擊、控制粒度粗,對 DoS 洪水也幾乎無效。

STEP 1

深度探秘

在邊界攔截所有外部通訊

防火牆做什麼

防火牆 (firewall) 保護內部網路 (intranet),對進出的通訊執行過濾動作。它的核心做法是:

在組織網路邊界建立一個環境,攔截所有外部通訊;只有明確被授權的通訊,才會被轉送給內部的預期收件者。

為什麼需要它?在理想世界裡,通訊永遠發生在互信的處理程序之間、永遠走安全通道。但現實中做不到——很多伺服器沒有為抵抗惡意攻擊而設計,軟體也常有錯誤。任何人都能輕易對任何伺服器送請求,於是機密資訊容易從組織伺服器外洩,蠕蟲、病毒等也容易滲透進來。防火牆就是在邊界設一道關卡。

防火牆的限制

防火牆很有用,但課本明確指出它有不少限制,不能當成唯一防線

  • 防不了內部攻擊:防火牆只管『內 vs 外』。來自組織內部的攻擊,它完全使不上力。
  • 控制粒度太粗:它對外部存取的控制很粗糙。對外公開的服務本來就要開放給廣大使用者,無法細到『讓個別使用者只與選定的對象分享資訊而不犧牲隱私與完整性』。因此仍需要更細粒度的端到端安全機制。
  • 對 DoS 幾乎無效:面對阻斷服務洪水攻擊(例如 IP 偽造的洪水),防火牆這個單一防禦點會被流量淹沒。任何對付來襲洪水的補救,都必須在離目標更上游處施行——例如用服務品質機制把流入流量限制在目標能處理的水準。

課本也提到一種折衷:可以用結合防火牆的 web tunnel 機制(基於 HTTPS 的安全代理),讓受信任且通過認證的外部使用者安全存取內部 web 資料。

💡
關鍵

防火牆在網路邊界攔截所有外部通訊、只放行被授權者;但它防不了內部攻擊、控制粒度太粗、對 DoS 洪水幾乎無效,不能當唯一防線。

STEP 2

生活妙喻

社區大門的警衛

把防火牆想成社區大門的警衛

你的社區門口有個警衛 (防火牆),負責攔下所有從外面來的人,只放行有登記、被授權的訪客進來。這很有用——擋掉了大部分閒雜人等。但警衛有幾個管不到的死角:

防不了內部攻擊

警衛只盯外面進來的人。如果社區裡面已經住著一個壞鄰居,他在社區裡搞破壞,警衛站在大門口根本看不到、管不著。這正是『防火牆防不了內部攻擊』。

控制粒度太粗

警衛只能判斷『這個人能不能進社區』,但管不到『進來後,他能不能進某一戶人家的客廳』。要保護到每一戶、每一個房間,還是得靠各家自己的門鎖(端到端的細粒度安全)。

對洪水無效

如果有上萬人同時擠到大門口故意造成堵塞(DoS 洪水),一個警衛根本擋不住——大門被人潮淹沒,連正當住戶都進不來。要解決,得在更上游(例如社區外的道路)就開始疏導車流人流,而不是指望門口那一個警衛。

體會:警衛 (防火牆) 是必要的第一道關卡,但它管不到內部、管不到每一戶細節、也擋不住人潮洪水——你還需要各家門鎖和上游的交通管制。

💡
關鍵

防火牆像社區大門警衛:擋外人很有用,但管不到內部壞鄰居 (內部攻擊)、管不到各戶房間 (粒度太粗)、也擋不住大門口的人潮 (DoS)。

STEP 3

實用超能力

別把防火牆當成唯一的安全

一個常見的錯誤心態

『我們有防火牆,所以很安全』——這是危險的錯覺。防火牆只是邊界防線,它擋不住的東西,課本講得很清楚。要建構真正安全的系統,得搭配多層防護:

flowchart TD
  E[外部攻擊] --> FW[防火牆 邊界過濾]
  FW --> I[內部網路]
  INS[內部攻擊] --> I
  I --> R[資源]
  R --> ETE[端到端加密與存取控制 保護每個資源]

注意圖中的內部攻擊那條線——它繞過了防火牆,直接打進內部。這就是為什麼還需要端到端的加密與細粒度存取控制。

把限制變成設計檢查表

防火牆擋不住的 你還需要什麼
內部攻擊 內部也要認證、最小權限、零信任思維
細粒度存取 每個資源自己的存取控制與端到端加密
DoS 洪水 上游流量限制、服務品質機制、CDN/清洗
安全的外部存取 基於 HTTPS 的安全代理 (web tunnel)

動手判斷

下次有人說『我們加了防火牆就安全了』,你可以追問三件事:

  1. 內部若有人作惡,防得住嗎?
  2. 每個敏感資源自己有沒有存取控制與加密?
  3. 遇到大流量 DoS,補救是放在邊界還是更上游?

這三題正好對應防火牆的三大限制,幫你揪出『假安全』。

💡
關鍵

防火牆只是邊界防線,內部攻擊會繞過它;真正安全需多層防護:內部認證與最小權限、每個資源的端到端加密與存取控制、上游的 DoS 緩解。

🔆
生活妙喻:防火牆的邊界過濾 ≈ 社區大門的警衛

攔下所有外來者、只放行被授權的訪客,是必要的第一道關卡,但只管『內外之分』。

🔆
生活妙喻:防不了內部攻擊 ≈ 社區裡的壞鄰居

警衛只盯大門,社區內部的人作惡他完全看不到,正如防火牆對內部攻擊無能為力。

🔆
生活妙喻:對 DoS 洪水無效 ≈ 上萬人同時擠爆大門

單一警衛擋不住人潮洪水,補救必須在更上游的道路疏導,正如 DoS 緩解要在離目標上游處施行。

本節字彙

Firewall (防火牆)
保護內部網路的邊界機制,攔截所有外部通訊、只轉送明確被授權的訊息給內部收件者。
🧠 像社區大門警衛,守在內外交界處過濾通訊。
細粒度安全 (fine-grained security)
針對個別使用者、個別資源的端到端保護,補足防火牆粗粒度邊界控制的不足。
🧠 警衛管不到每一戶房間,要靠各家自己的門鎖。
Web tunnel
結合防火牆、基於 HTTPS 的安全代理,讓受信任且認證過的外部使用者安全存取內部 web 資料。
🧠 在防火牆上開一條經過認證與加密的安全隧道。
防火牆的核心運作方式是什麼?
為什麼防火牆對來自組織『內部』的攻擊幾乎無能為力?
課本指出防火牆對 DoS 洪水攻擊幾乎無效,補救應放在哪裡?
04

密碼學演算法的內功

強加密靠單向函式:正向易算、逆向不可行。對稱靠金鑰長度抵抗暴力破解;非對稱靠陷門函式 (如大數分解)。

先讀原文段落,旁邊就是白話

這是一本英文書。左邊放原文、右邊放白話導讀——你既讀得懂,也順手碰了原文。

原文 · 密碼學演算法的內功 signatures with secret keys – MACs There is no technical reason why a secret-key encryption algorithm should not be used to encrypt a digital signature, but in order to verify such signatures the key must be disclosed, and this causes some problems: • The signer must arrange for the verifier to receive the secret key used for signing securely. • It may be necessary to verify a signature in several contexts and at different times – at the time of signing, the signer may not know the identities of the verifiers. To resolve this, verification could be delegated to a trusted third party who holds secret keys for all signers, but this adds complexity to the security model and requires secure communication with the trusted third party. • The disclosure of a secret key used for signing is undesirable because it weakens the security of signatures made with that key – a signature could be forged by a holder of the key who is not the owner of it.
白話導讀

強加密靠單向函式:正向易算、逆向不可行。對稱靠金鑰長度抵抗暴力破解;非對稱靠陷門函式 (如大數分解)。

單向函式、陷門函式與暴力破解

強加密靠單向函式:正向易算、逆向不可行。對稱靠金鑰長度抵抗暴力破解;非對稱靠陷門函式 (如大數分解)。

STEP 1

深度探秘

好算難逆的數學魔法

加密的數學骨架

加密就是寄件者把明文 (plaintext) 用某規則轉成密文 (ciphertext),收件者用反向規則還原。加密由兩部分定義:一個函式 E 和一把金鑰 K,把訊息 M 加密寫成 {M}K。對稱式加密,解密用的金鑰和加密相同

單向函式:對稱加密的根基

如果我們把金鑰固定下來,定義 FK(M) = E(K, M),那麼強加密函式有一個性質:FK 正向很好算,但它的逆函式 FK⁻¹ 難算到不可行。這種函式叫單向函式 (one-way function)。正是這個『好算難逆』的性質,保護我們對抗『拿到 {M}K 就想反推 M』的攻擊。

暴力破解與金鑰長度

對設計良好的對稱演算法,攻擊者就算同時握有明文 M 和對應密文,要找出金鑰 K 的最有效辦法竟是最笨的——暴力破解 (brute-force attack):把所有可能的 K 一個個試,算出結果直到符合已知密文。

若 K 有 N 個位元,平均要試 2^(N-1) 次、最多 2^N 次。破解時間隨金鑰位元數呈指數成長

這就是為什麼 56 位元的 DES 早已不安全,而 128 位元金鑰目前安全:每多一個位元,難度就翻倍。

陷門函式:非對稱加密的根基

公鑰系統用單向函式的另一種變化——陷門函式 (trap-door function):它是一個帶秘密出口的單向函式,正向易算、逆向不可行,除非你知道那個秘密

以 RSA 為例:取兩個極大的質數相乘只要幾秒(正向易算),但要從乘積反推回原本的兩個質因數 (因數分解) 卻幾乎不可能(逆向不可行)。那個『秘密出口』就是私鑰持有者掌握的資訊。所以 RSA 的安全不靠暴力破解的困難,而靠大數因數分解的困難

💡
關鍵

強加密靠單向函式 (正向易算逆向不可行);對稱式抵抗暴力破解的強度隨金鑰位元數指數成長;非對稱式靠陷門函式,如 RSA 倚賴大數因數分解的困難。

STEP 2

生活妙喻

打碎的盤子與相乘的質數

單向函式=打碎一個盤子

把盤子摔到地上碎掉 (正向) 超級簡單,但要把碎片完美拼回原狀 (逆向) 幾乎不可能。這就是單向函式『好算難逆』的精神——加密容易,沒金鑰想還原難如登天。

暴力破解=試開密碼鎖

面對一個數字密碼鎖,最笨但最可靠的破法就是一個個號碼試過去

  • 3 位數的鎖:最多 1000 種組合,一下就試完。
  • 多一位數 → 組合數乘以 10

金鑰也一樣:每多一個位元,組合數就翻倍。所以 56 位元的鎖(DES)今天的電腦幾天就試完,128 位元的鎖則要試到天荒地老。長度每加一點,難度就指數爆炸——這就是金鑰要夠長的原因。

陷門函式=相乘容易、拆開難

想像我給你兩個大質數,請你相乘:拿計算機按一按,幾秒就好(正向易算)。

但我反過來只給你那個乘積,請你找出『原本是哪兩個質數相乘的』——這叫因數分解。當數字大到上百位,就算動用全世界的電腦也算不出來(逆向不可行)。

那『秘密出口 (陷門)』是什麼?就是原本那兩個質數——知道它的人(私鑰持有者)輕鬆還原,不知道的人卡死。RSA 正是建在這個『乘起來容易、拆開來難』的不對稱上。

💡
關鍵

單向函式像摔碎盤子 (碎易拼難);暴力破解像逐一試密碼鎖、每多一位元難度翻倍;陷門函式像兩質數相乘易、因數分解難,知道質數 (秘密) 才能輕鬆還原。

STEP 3

實用超能力

看懂金鑰長度與兩種安全來源

為什麼對稱與非對稱的『安全金鑰長度』差很多

常有人疑惑:『為什麼 AES 128 位元就夠,RSA 卻要 1024、2048 位元?』因為兩者的安全來源不同

對稱式 (如 AES) 非對稱式 (如 RSA)
安全來源 抵抗暴力試遍金鑰 抵抗大數因數分解
破解最佳法 暴力破解 (試 2^N 種) 因數分解 (有比暴力快的數學法)
安全金鑰長度 較短 (128 位元已很強) 較長 (要 1024 位元以上)

因為因數分解有比『純暴力』更聰明的數學方法,所以 RSA 的數字 N 必須做得遠大於對稱金鑰,才能讓分解一樣不可行。

安全強度的直覺

flowchart TD
  K[金鑰每多一個位元] --> D[暴力破解組合數翻倍]
  D --> T[破解時間指數成長]
  T --> S[足夠長就實務上不可破]

動手判斷

看到任何加密設定,可以這樣思考:

  1. 這是對稱還是非對稱? 對稱看『金鑰夠不夠長以抵抗暴力破解』;非對稱看『底層難題 (如因數分解) 夠不夠難』。
  2. 金鑰太短嗎? 像 56 位元 DES、40 位元金鑰,今天都算不安全——因為硬體進步讓暴力破解變可行。

記住一句話:對稱靠長度、非對稱靠難題,兩者的『安全』建在不同的數學基礎上。

💡
關鍵

對稱式安全靠金鑰長度抵抗暴力破解、非對稱式靠底層數學難題 (如因數分解);因數分解有比暴力更快的方法,故 RSA 的 N 要遠長於對稱金鑰。

🔆
生活妙喻:單向函式 ≈ 摔碎一個盤子

摔碎 (正向) 很容易,把碎片完美拼回 (逆向) 幾乎不可能,正如加密易、無金鑰還原難。

🔆
生活妙喻:暴力破解與金鑰長度 ≈ 逐一試開密碼鎖

一個個號碼試,每多一個位元組合數就翻倍,所以金鑰夠長就讓暴力破解的時間指數爆炸到不可行。

🔆
生活妙喻:陷門函式 (RSA) ≈ 兩個大質數相乘容易、因數分解難

相乘幾秒搞定 (正向易),從乘積反推質因數幾乎不可能 (逆向難),知道原質數 (陷門/私鑰) 才能輕鬆還原。

本節字彙

One-way function (單向函式)
正向容易計算、逆向難以計算到不可行的函式,是強加密的根基。
🧠 one-way = 單行道;只能順著走,回不去。
Brute-force attack (暴力破解)
把所有可能金鑰逐一試遍直到符合已知密文;對稱式抵抗它的強度隨金鑰位元數指數成長。
🧠 brute force = 蠻力;一個個硬試。
Trap-door function (陷門函式)
帶秘密出口的單向函式,正向易算、逆向不可行,除非知道那個秘密;是公鑰系統的基礎。
🧠 trap-door = 暗門;知道暗門 (私鑰) 就能輕鬆穿過。
什麼是『單向函式 (one-way function)』,它為何對加密重要?
對設計良好的對稱演算法,金鑰每增加一個位元,暴力破解的難度大致如何變化?
RSA 的安全性主要建立在哪個數學難題上?

區塊加密、串流加密與混淆擴散

區塊加密一塊塊處理,用密碼區塊鏈結 (CBC) 與初始向量避免重複樣式;串流加密用金鑰流逐位元 XOR;強度來自混淆與擴散。

STEP 1

深度探秘

一塊塊加密還是一位元位元加密

區塊加密

大多數加密演算法以固定大小的區塊 (block) 處理資料,64 位元是常見的區塊大小。訊息被切成一塊塊,最後一塊不足就補足 (padding),每塊獨立加密

簡單的區塊加密有弱點:每塊密文不依賴前面的區塊,於是相同的明文塊會產生相同的密文塊。攻擊者就能認出重複樣式、推測它與明文的關係。為克服這個弱點,多數區塊加密採用密碼區塊鏈結 (Cipher Block Chaining, CBC)

CBC 怎麼運作

CBC 模式下,每塊明文在加密前,先和前一塊密文做 XOR,再加密。解密時反過來:先解密、再和前一塊密文 XOR 還原。這行得通是因為 XOR 是自身的逆運算(做兩次就回到原值)。CBC 讓相同的明文片段不再加密成相同的密文。

但 CBC 在每段序列的開頭仍有弱點:如果對兩個目的地送出相同訊息,加密後的區塊序列會一樣,竊聽者可能得到有用資訊。解法是在每則訊息前插入一段不同的明文,稱為初始向量 (Initialization Vector, IV)——用時戳當 IV 是個好選擇,能逼每則訊息以不同的明文塊開頭。

注意:CBC 只適合在可靠連線上用。若有密文塊遺失,後續區塊就解不出來,因此不適合可容忍資料遺失的應用(那要用串流加密)。

串流加密

有些應用(如加密電話通話)的資料是即時、一小塊一小塊產生的,可能只有 8 位元甚至 1 位元,補成 64 位元再加密太浪費。串流加密 (stream cipher)逐位元地把明文轉成密文。

做法很巧妙:建一個金鑰流產生器 (keystream generator),產生一段任意長度的位元序列 (金鑰流),再把金鑰流和資料流逐位元 XOR。只要金鑰流是安全的,加密出的資料流也安全。這就像情報界用『白噪音』蓋住對話:分別錄下噪音與對話,事後相減就能還原乾淨對話。

混淆與擴散

好的加密演算法靠 Shannon 的兩大原則隱藏內容:

  • 混淆 (Confusion):用 XOR、循環位移等非破壞性運算,把明文和金鑰結合,打亂明文與密文之間的關係,讓基於字元頻率的分析失效。
  • 擴散 (Diffusion):明文裡常有重複與冗餘,擴散把每塊明文的部分移位、分散,把規律打散;搭配 CBC 還能把冗餘分散到更長的文字裡。串流加密因為沒有區塊,無法使用擴散。
💡
關鍵

區塊加密用 CBC 把每塊明文先和前一塊密文 XOR 再加密、用 IV 讓開頭不同;串流加密用金鑰流逐位元 XOR 適合即時資料;強度來自混淆 (打亂關係) 與擴散 (分散規律)。

STEP 2

生活妙喻

蓋章的連環扣與逐字遮蔽

簡單區塊加密的破綻

想像你用同一個印章把文件每一格蓋上花紋。問題是:內容相同的格子,蓋出來的花紋也一模一樣。別人雖看不懂花紋,卻能看出『這兩格內容相同』——這就洩漏了資訊。

CBC=把每一格和前一格鎖在一起

CBC 的妙招是:蓋每一格之前,先把它和前一格已經蓋好的花紋疊在一起,再蓋。這樣一來,就算兩格原始內容相同,因為它們前面那格不同,蓋出來的花紋也會不同——重複樣式消失了

那為什麼還需要初始向量 (IV)?因為第一格前面沒有東西可疊。如果兩份文件第一格內容相同、開頭就會一樣。解法:在最前面塞一段每次都不同的引子(例如當下的時戳),整串就從頭到尾都不一樣了。

串流加密=白噪音蓋住對話

間諜片裡常見:談機密時放白噪音蓋住對話,讓竊聽者只聽到沙沙聲。但如果你另外單獨錄了一份白噪音,事後把『噪音+對話』減掉『純噪音』,乾淨對話就回來了。

串流加密就是這招的數位版:

  • 白噪音=金鑰流(雙方都能產生的同一串隨機位元)。
  • 加密=把明文和金鑰流逐位元 XOR(蓋上噪音)。
  • 解密=再 XOR 一次同樣的金鑰流(減掉噪音)。

因為它一位元一位元處理,特別適合即時的電話、語音這種小塊串流資料。

💡
關鍵

簡單區塊加密像同印章蓋每格 (相同內容花紋相同會洩漏),CBC 把每格和前一格疊著蓋、IV 解決第一格;串流加密像用雙方都有的白噪音 (金鑰流) 逐位元蓋住與還原對話。

STEP 3

實用超能力

為不同情境挑對的加密模式

區塊 vs 串流:什麼時候用哪個

區塊加密 + CBC 串流加密
處理單位 一塊塊 (如 64 位元) 一位元 / 一小塊
適合 可靠連線上的批次資料 (檔案、網頁) 即時小塊資料 (電話、語音)
怕什麼 密文塊遺失就解不出後續 金鑰流重複就會被破
能否用擴散 可以 不行 (沒有區塊)

兩個務必記住的設計重點

  1. CBC 一定要配 IV:沒有 IV,相同開頭的訊息會洩漏資訊;IV 要每次都不同(時戳是常見選擇)。
  2. 串流加密最怕金鑰流重複:同一段金鑰流絕不能拿來加密兩份不同資料——這正是下一章 WiFi WEP 慘敗的核心原因(IV 太短導致金鑰流數小時就重複)。

加密強度的兩大支柱

flowchart TD
  M[明文 含重複與規律] --> C[混淆 打亂明文與密文關係]
  M --> D[擴散 把規律移位分散]
  C --> S[密文 看不出原樣也難回推金鑰]
  D --> S

動手判斷

下次看到一個加密應用,問三題:

  1. 資料是批次的還是即時串流? → 決定用區塊還是串流。
  2. 用 CBC 嗎?有沒有每次不同的 IV?
  3. 若是串流,金鑰流會不會重複? 這往往是真實系統最致命的破口。
💡
關鍵

批次資料用區塊+CBC (務必配每次不同的 IV)、即時串流用串流加密 (最怕金鑰流重複);加密強度靠混淆打亂關係與擴散分散規律兩大支柱。

🔆
生活妙喻:簡單區塊加密的弱點與 CBC ≈ 同印章蓋每格 vs 每格和前一格疊著蓋

同印章蓋出相同花紋會洩漏哪些格內容相同;CBC 把每格和前一格密文疊著加密,重複樣式就消失。

🔆
生活妙喻:初始向量 (IV) ≈ 在文件最前面塞一段每次不同的引子

第一格前面沒東西可疊,塞入每次不同的引子 (如時戳),整串就從頭到尾都不一樣。

🔆
生活妙喻:串流加密 ≈ 用白噪音蓋住對話、再單獨減掉噪音還原

金鑰流像雙方都有的白噪音,逐位元 XOR 蓋住明文,再 XOR 一次同樣的金鑰流即還原。

本節字彙

Cipher Block Chaining (密碼區塊鏈結 / CBC)
每塊明文先和前一塊密文 XOR 再加密的模式,使相同明文不會產生相同密文。
🧠 chaining = 鏈結;每一塊都扣在前一塊上。
Initialization Vector (初始向量 / IV)
插在訊息最前面、每次都不同的明文 (如時戳),避免相同開頭的訊息產生相同密文。
🧠 開頭的『起跑值』,每次都換,整串就不重複。
Stream cipher (串流加密)
用金鑰流與資料流逐位元 XOR 的加密法,適合即時的小塊資料,最怕金鑰流重複。
🧠 像把資料『串流』著加密,一位元一位元蓋噪音。
Confusion / Diffusion (混淆 / 擴散)
Shannon 兩大原則:混淆打亂明文與密文的關係,擴散把明文的規律移位分散。
🧠 混淆=攪亂關係,擴散=散開規律。
簡單 (不鏈結) 的區塊加密有什麼弱點,CBC 如何克服它?
即使用了 CBC,每段序列的『開頭』仍有弱點。初始向量 (IV) 如何解決這個問題?
為什麼加密即時電話通話這類資料,串流加密比區塊加密更合適?

安全摘要、MAC 與生日攻擊

安全摘要函式正向易算、逆向難、且難找到碰撞。MAC 用共享秘密做低成本簽章;生日攻擊逼我們把摘要做到至少 128 位元。

STEP 1

深度探秘

好的指紋函式要滿足三個性質

安全摘要函式的三個性質

摘要函式 (又叫安全雜湊函式 secure hash function) 記為 h = H(M),把任意長度的訊息壓成固定長度的指紋。一個安全的摘要函式要滿足三個性質:

  1. 給定 M,容易算出 h
  2. 給定 h,難以反推出 M(單向)。
  3. 給定 M,難以找到另一個 M',使 H(M) = H(M')(抗碰撞)。

第 3 個性質最關鍵:我們知道摘要一定會有碰撞(因為它是把資訊壓縮),但必須確保攻擊者無法針對某個 M 找出另一個產生相同 h 的 M'。否則他就能把 M 的合法簽章,移花接木到偽造的 M' 上——不需要簽署金鑰就偽造了簽名文件。這種函式也叫單向雜湊函式

MAC:用共享秘密做低成本簽章

當一個安全通道用來傳未加密訊息、但需要驗證真實性時,可以用共享秘密金鑰做出低成本的簽章,稱為訊息認證碼 (Message Authentication Code, MAC)

  1. A 產生一把隨機金鑰 K,透過安全通道分發給需要驗證 A 訊息的人(這些人被信任不洩漏 K)。
  2. 對任何要簽的文件 M,A 把 M 和 K 串接、算出摘要 h = H(M + K),把 (M, h) 送出。h 就是 MAC。因為雜湊已徹底遮蔽 K,公開 h 不會洩漏 K
  3. 接收者 B 把自己的 K 和收到的 M 串接、算出 h' = H(M + K),若 h' = h 即驗證通過。

MAC 的優點:完全不用加密,所以快(安全雜湊通常比對稱加密快 3 到 10 倍)。缺點是需要先安全分發共享金鑰。TLS 支援多種 MAC。

生日攻擊

摘要長度為什麼至少要 128 位元?因為生日攻擊 (birthday attack)。它利用『生日悖論』:一群人裡找到『任兩人生日相同』的機率,遠高於找到『某人和特定某天同生日』。

攻擊手法:Alice 準備一份對 Bob 有利的合約 M 和一份不利的 M',各自做出許多『視覺上難以分辨』的版本(例如在行尾加空格),比對兩堆的雜湊,直到找到一對相同。她讓 Bob 簽有利的 M,再把簽章移植到不利的 M' 上。若雜湊只有 64 位元,平均只要約 2^32 個版本就能配出一對——太少了。所以摘要至少要 128 位元(如 SHA-1 用 160 位元,更安全)。

💡
關鍵

安全摘要要易算、難反推、抗碰撞;MAC 用共享秘密 H(M+K) 做低成本簽章 (快但需先分發金鑰);生日攻擊讓碰撞遠比想像中易找,故摘要長度至少要 128 位元。

STEP 2

生活妙喻

指紋、共享暗號與同班同生日

安全摘要=可靠的指紋鑑定

一枚好的指紋鑑定要做到:

  • 採指紋很容易(給人就能採)→ 性質 1。
  • 光看指紋猜不出長相(不能反推本人)→ 性質 2。
  • 幾乎不可能找到另一個人指紋一模一樣(抗碰撞)→ 性質 3。

如果『抗碰撞』失守——竟然找得到另一個人指紋跟你完全相同——那壞人就能拿你簽過名的文件,把指紋一樣的偽造文件偷天換日

MAC=兩人之間的共享暗號

你和朋友約定一個只有你倆知道的暗號 (共享金鑰 K)。你寄明信片 (未加密的 M) 時,在角落寫上『內容 + 暗號一起算出來的一串記號 (MAC)』。

  • 朋友收到,用同樣的暗號重算一遍,記號對得上 → 確認是你寄的、沒被改過。
  • 路人看得到明信片內容,但算不出那串記號(因為不知道暗號),也無法從記號反推暗號
  • 好處:你只是『算一串記號』,沒有加密,所以又快又省事。

生日攻擊=同班同生日

你以為『班上有人和我同一天生日』很難?其實只要 23 個人,班上任兩人同生日的機率就過半了!『任兩人』比『跟我同天』容易太多。

壞人正是利用這點:他不必找『跟某份文件雜湊相同』的文件,而是大量製造兩堆只差空格的版本,去湊『任兩份雜湊相同』——這比你想的容易得多。對策很簡單:把指紋做長一點(至少 128 位元),讓可能的指紋多到湊不出碰撞。

💡
關鍵

安全摘要像可靠指紋 (易採、難反推、難撞);MAC 像在明信片角落寫『內容加暗號算出的記號』(快又能驗真);生日攻擊像 23 人就有人同生日,故指紋要做長以防碰撞。

STEP 3

實用超能力

選對雜湊、看懂 MAC 與簽章的差別

MAC vs 數位簽章:別搞混

兩者都能驗證『訊息沒被改、來自預期對象』,但機制與適用情境不同:

MAC 數位簽章 (公鑰)
用什麼金鑰 共享的對稱秘密 K 簽署者私鑰簽、公鑰驗
速度 快 (純雜湊、不加密) 較慢
不可否認 否 (雙方都有 K,誰都能產生) 是 (只有簽署者有私鑰)
適合 已建立安全通道的雙方驗真 對第三方證明來源

關鍵差別:MAC 無法提供不可否認,因為雙方共享同一把 K,B 也能偽造一個看似 A 簽的 MAC;要對第三方證明『就是 A 簽的』,得用公鑰簽章。

雜湊長度的實務判斷

flowchart TD
  S[摘要長度太短 如 64 位元] --> B[生日攻擊只需約 2 的 32 次方個版本]
  B --> F[攻擊者湊出碰撞 移植簽章偽造文件]
  L[摘要至少 128 位元] --> P[碰撞數量大到實務上湊不出]
  • MD5:128 位元(已被發現弱點,新系統避免用)。
  • SHA-1:160 位元(後來也被指出脆弱,NIST 建議改用更長的 SHA 版本)。
  • 課本結論:摘要至少 128 位元才擋得住生日攻擊,越長越安全但成本越高。

動手判斷

設計或檢視系統時:

  1. 需要對第三方證明來源 (不可否認)? → 用數位簽章,別只用 MAC。
  2. 只是已連線的兩方互相驗真、又要快? → MAC 很划算。
  3. 雜湊夠長嗎? → 至少 128 位元,老舊的短雜湊要警惕生日攻擊。
💡
關鍵

MAC 快但無法不可否認 (共享金鑰雙方都能產生)、適合雙方驗真;要對第三方證明來源用數位簽章;摘要至少 128 位元才擋得住生日攻擊。

🔆
生活妙喻:安全摘要的抗碰撞 ≈ 幾乎不可能有兩人指紋全同

若能找到指紋相同的另一份文件,壞人就能把合法簽章移植到偽造文件上,所以抗碰撞是簽章安全的命脈。

🔆
生活妙喻:MAC ≈ 在明信片角落寫『內容加共享暗號算出的記號』

收件者用同樣暗號重算即可驗真,路人算不出也反推不出暗號,且不必加密所以快。

🔆
生活妙喻:生日攻擊 ≈ 23 人班上就有人同生日

找『任兩份雜湊相同』比『跟特定文件相同』容易得多,故摘要要做長以防碰撞。

本節字彙

Secure digest function (安全摘要函式)
把任意長度訊息壓成固定長度指紋的單向函式,須易算、難反推、抗碰撞。
🧠 文件的指紋機,改一字指紋就全變且難偽造。
MAC (訊息認證碼)
用共享秘密 K 算出 H(M+K) 作為低成本簽章,供雙方驗證訊息真實性;快但無法不可否認。
🧠 Message Authentication Code:用共享暗號算出的驗真記號。
Birthday attack (生日攻擊)
利用生日悖論大量製造版本去湊雜湊碰撞的攻擊,逼使摘要長度至少要 128 位元。
🧠 靠『任兩人同生日很容易』的統計悖論湊出碰撞。
安全摘要函式的『抗碰撞』性質 (難找到另一個 M' 使 H(M)=H(M')) 為什麼對數位簽章至關重要?
MAC (訊息認證碼) 的計算方式 H(M+K) 中,公開 h 為什麼不會洩漏共享金鑰 K?
相較於公鑰數位簽章,使用 MAC 的主要優點是什麼?
05

案例研究:四個經典安全系統

Needham–Schroeder 用認證伺服器與票證發放共享金鑰,nonce 證明新鮮度。Kerberos 把它落地:KDC 含 AS 與 TGS,用時戳當

先讀原文段落,旁邊就是白話

這是一本英文書。左邊放原文、右邊放白話導讀——你既讀得懂,也順手碰了原文。

原文 · 案例研究:四個經典安全系統 SCHROEDER, KERBEROS, TLS, 802. 11 WIFI 503 widely available in both free and commercial versions. It is distributed via separate distribution sites for North American users [www. com] and those in other parts of the world [International PGP] to circumvent (perfectly legally) the US export regulations.
白話導讀

Needham–Schroeder 用認證伺服器與票證發放共享金鑰,nonce 證明新鮮度。Kerberos 把它落地:KDC 含 AS 與 TGS,用時戳當 nonce。

Needham–Schroeder 與 Kerberos

Needham–Schroeder 用認證伺服器與票證發放共享金鑰,nonce 證明新鮮度。Kerberos 把它落地:KDC 含 AS 與 TGS,用時戳當 nonce。

STEP 1

深度探秘

用認證伺服器與票證發放金鑰

Needham–Schroeder 協定

1978 年 Needham 和 Schroeder 提出的認證協定,是許多安全技術的核心。它的目標是:在網路上安全地讓兩個處理程序取得一把共享金鑰。靠的是一個認證伺服器 S,它保管每個主體的秘密金鑰。

它引入一個關鍵元件——nonce:一個只用一次的整數,加進訊息裡用來證明訊息是新鮮的(不是被重放的舊訊息)。流程簡述(A 想和 B 安全通訊):

  1. A → S:A、B、N_A(A 請 S 給一把和 B 通訊用的金鑰,附上 nonce N_A)。
  2. S → A:用 A 的金鑰加密的回應,內含新金鑰 K_AB 和一張用 B 金鑰加密的票證。nonce N_A 證明這是針對上一則的回應;只有 S 知道 A 的金鑰,所以 A 相信是 S 發的。
  3. A → B:A 把票證 {K_AB, A}K_B 轉給 B。
  4. B → A:B 解開票證、用新金鑰 K_AB 加密另一個 nonce N_B 送回。
  5. A → B:A 回傳 N_B 的約定變換(如 N_B − 1),向 B 證明自己就是上一則的發送者。

一個著名的弱點

這個協定有個破綻:B 沒有理由相信訊息 3 是新鮮的。若攻擊者設法取得舊的 K_AB 和票證(例如被粗心的程式遺留在暴露的儲存空間),就能用它們重啟與 B 的交談、冒充 A。修補方法:在訊息 3 加上 nonce 或時戳,讓 B 能檢查它是否新近——這正是 Kerberos 採用的解法

Kerberos

Kerberos 由 MIT 開發,緊密遵循 Needham–Schroeder,並用時戳當 nonce,達成兩個目的:防重放、並給票證一個有效期限 (lifetime) 以便撤銷權限。它處理三種安全物件:

  • 票證 (Ticket):發給客戶、向特定伺服器出示的權杖,含到期時間和新的工作階段金鑰。
  • 認證符 (Authenticator):客戶建立、用來證明身分與通訊新鮮度,含客戶名與時戳,用工作階段金鑰加密,只能用一次
  • 工作階段金鑰 (Session key):Kerberos 隨機產生、發給客戶與特定伺服器通訊用。

Kerberos 伺服器叫 KDC (Key Distribution Centre),提供兩種服務:AS (Authentication Service) 在登入時認證使用者、發給一張票證授予票證 (TGT);之後客戶用 TGT 向 TGS (Ticket-Granting Service) 取得存取各個伺服器的票證,不必每次重輸密碼。

💡
關鍵

Needham–Schroeder 用認證伺服器與票證發放共享金鑰、nonce 證明新鮮度;其訊息 3 缺新鮮度防護,Kerberos 用時戳補強,並以 KDC 的 AS 與 TGS、票證與認證符落地。

STEP 2

生活妙喻

遊樂園的售票亭與通行手環

把 Kerberos 想成一座大型遊樂園

遊樂園 (KDC) 有兩個櫃台和很多遊樂設施 (各伺服器):

入口售票亭=AS (認證服務)

你一進園 (登入),先到入口售票亭 (AS) 出示證件。它確認你是誰後,給你一條萬用手環 (TGT,票證授予票證)。重點是:之後你逛整個園區,不必再掏證件——手環就是你的身分證明。

設施換票處=TGS (票證授予服務)

想玩雲霄飛車?你拿萬用手環去換票處 (TGS),它驗過手環後,給你一張這項設施專用的票 (server ticket) 和一組專用通行碼 (session key)。想玩別的設施,再來換一張就好。

nonce / 時戳=防止舊票被重用

每張票和你每次出示的認證符上,都印著時間戳記

  • 設施驗票時會看:『這張票還在有效期內嗎?這個認證符是剛剛產生的、還是有人撿了舊的來重放?』
  • 認證符只能用一次,就像一次性的入場條碼,掃過就作廢。

為什麼這樣設計很聰明

  • 密碼只在入口用一次:手環一拿到,你的密碼就從記憶體抹掉,整天逛園都不再暴露密碼。
  • 手環有期限:通常十幾小時,逛完一天剛好;若你被取消資格,過期後手環自動失效。
💡
關鍵

Kerberos 像遊樂園:入口售票亭 (AS) 驗證件發萬用手環 (TGT),設施換票處 (TGS) 用手環換各設施專用票與通行碼;票與認證符印時戳防重放,認證符只能用一次。

STEP 3

實用超能力

看懂企業單一登入的骨架

Kerberos 就在你身邊

Kerberos 是 Windows 網域、許多企業內網的預設認證服務,也是『單一登入 (SSO)』的經典骨架。理解它,你就懂了『為什麼登入一次就能用一整天、存取很多服務』。

flowchart TD
  U[使用者登入] --> AS[AS 認證服務 驗證身分]
  AS --> TGT[發給票證授予票證 TGT 與工作階段金鑰]
  TGT --> TGS[拿 TGT 向 TGS 請求某服務的票]
  TGS --> ST[發給該服務專用票與工作階段金鑰]
  ST --> SRV[向伺服器出示票與認證符 取得服務]

三種物件的角色對照

物件 作用 類比
票證 (Ticket) 向特定伺服器證明已被認證,含到期時間 設施專用票
認證符 (Authenticator) 證明身分與新鮮度,只用一次 一次性入場條碼
工作階段金鑰 (Session key) 雙方該次通訊加密用 設施專用通行碼

設計啟示

  1. nonce / 時戳是防重放的命脈:Needham–Schroeder 的弱點正是訊息 3 缺新鮮度標記;任何認證協定都要問『舊訊息能不能被重放?』
  2. 票證有期限是雙刃:期限長=方便但難即時撤銷;期限短=安全但可能打斷使用者。Kerberos 取十幾小時的折衷。
  3. 密碼只在登入用一次:之後靠票證,密碼不再上網——這是好登入系統的共同特徵。
💡
關鍵

Kerberos 是 Windows 網域與企業 SSO 的骨架:登入一次取得 TGT,再用它向 TGS 換各服務票;nonce/時戳防重放、票證期限是方便與安全的折衷、密碼只在登入用一次。

🔆
生活妙喻:AS 與 TGS ≈ 遊樂園的入口售票亭與設施換票處

入口售票亭 (AS) 驗證件發萬用手環 (TGT),設施換票處 (TGS) 用手環換各設施專用票,逛園不必再掏證件。

🔆
生活妙喻:nonce / 時戳防重放 ≈ 票上的時間戳與一次性入場條碼

票與認證符印著時戳,驗票時檢查是否新鮮、是否在期限內;認證符只能用一次,掃過即作廢。

🔆
生活妙喻:票證有效期限 ≈ 手環的當日有效

期限長方便但難即時撤銷、期限短安全但可能打斷使用者,Kerberos 取十幾小時的折衷。

本節字彙

Nonce
只用一次的整數,加進訊息中以證明其新鮮、防止舊訊息被重放。
🧠 number used once:用過一次就丟。
KDC (Key Distribution Centre)
Kerberos 伺服器,含認證服務 AS (登入認證) 與票證授予服務 TGS (發各服務的票)。
🧠 金鑰發放中心:登入找 AS、換服務票找 TGS。
Authenticator (認證符)
客戶建立、含名稱與時戳並以工作階段金鑰加密的權杖,證明身分與新鮮度,只能用一次。
🧠 一次性的入場條碼,掃過即作廢。
在 Needham–Schroeder 協定中,nonce 的主要作用是什麼?
Needham–Schroeder 原始協定的著名弱點是什麼,Kerberos 如何修補?
Kerberos 的 KDC 提供 AS 與 TGS 兩種服務,它們的分工是什麼?

TLS:安全電子交易的事實標準

TLS 是混合式加密的實作:演算法可協商、握手用公鑰交換 pre-master secret 再導出對稱金鑰,紀錄協定提供保密、完整與認證的安全通道。

STEP 1

深度探秘

可協商、自我啟動的安全通道

TLS 是什麼

SSL 由 Netscape 開發,其延伸版被採納為 Internet 標準,名為 TLS (Transport Layer Security)。當你在網址用 https:,就會在瀏覽器與伺服器之間建立一條 TLS 安全通道。TLS 是電子交易的事實標準。它有幾個關鍵特性:

演算法可協商

在開放網路上,不能假設大家用相同軟體或都支援某個加密演算法(有些國家還限制特定演算法)。所以 TLS 把加密與認證的演算法設計成在初始握手時協商。雙方支援的演算法集合稱為 cipher suite;伺服器列出它有的選項,客戶挑一個。若找不到共同的演算法,連線就失敗。

自我啟動的安全通訊

TLS 不需事先協商或第三方幫忙就能建立安全通道:先用未加密通訊做初始交換,接著用公鑰密碼學,最後在建立共享秘密金鑰後改用對稱式——這正是前面學過的混合協定!每次切換都是可選的、且先經協商。所以通道是完全可設定的:可選擇是否加密、是否認證每個方向,不浪費運算資源在不必要的加密上。

兩層架構

TLS 由兩層組成:

  • 握手協定 (Handshake Protocol):在現有連線上、以明文開始,協商選項與參數,建立 TLS 工作階段。
  • 紀錄協定 (Record Protocol):實作安全通道本身,對通過的訊息加密與認證,提供保密、完整、真實——正是安全通道的三大性質。

握手流程要點

  1. 協商版本、工作階段 ID、cipher suite、壓縮方法,交換隨機值。
  2. (可選) 雙方交換 X.509 格式的公鑰憑證互相認證。
  3. 一方產生一個 pre-master secret(大隨機值),用對方公鑰加密後送出。雙方據此導出兩把對稱工作階段金鑰(每個方向各一)與訊息認證秘密。
  4. 互換 ChangeCipherSpec 與 Finished 訊息後,之後所有通訊都依協商的 cipher suite 加密與簽署。

防中間人:初始握手可能受中間人攻擊,故驗證第一張憑證的公鑰可經另一管道取得(例如瀏覽器內建知名憑證權威的公鑰)。

💡
關鍵

TLS 是電子交易事實標準:演算法在握手時協商、用公鑰傳 pre-master secret 導出對稱金鑰 (混合協定);兩層架構為握手協定與提供保密完整真實的紀錄協定。

STEP 2

生活妙喻

兩位談判代表先對暗號再密談

把 TLS 握手想成兩位代表碰面密談

兩位互不相識的談判代表,要在一個可能有人偷聽的房間談機密。他們會怎麼做?這正是 TLS 握手:

先公開地『對規則』(可協商)

他們先大聲地(明文)確認:『我們都會說中文和英文嗎?用哪種?』『用哪套暗號規則?』——這就是協商 cipher suite。如果連一種共同語言都沒有,談判就告吹(連線失敗)。

互相驗明正身 (憑證)

各自出示由公會背書的名片 (X.509 憑證),確認對面真的是對方本人,不是冒牌貨。

用公開信箱傳一把共用鑰匙 (pre-master secret)

其中一位產生一把只有兩人會用的密談鑰匙 (pre-master secret),用對方的公開投信口 (公鑰) 安全地傳過去。從此兩人就用這把又快又便宜的共用鑰匙密談(對稱加密)。

換暗號、確認、開始 (ChangeCipherSpec / Finished)

兩人說好『從現在起,全部用密語』,互相確認無誤,正式進入加密密談。

為什麼要『先公鑰、後對稱』

  • 公鑰像公開信箱:方便傳第一把鑰匙給陌生人,但開關費力(慢)。
  • 對稱像共用保險箱鑰匙:開鎖快,適合接下來大量的密談內容。

體會:TLS 就是把『方便交鑰匙(公鑰)』和『快速跑資料(對稱)』兩者的優點,用一場精心設計的握手串起來。

💡
關鍵

TLS 握手像兩位代表先公開對規則 (協商 cipher suite)、互看名片 (憑證)、用公開信箱傳一把共用鑰匙 (pre-master secret)、再全程用快速的共用鑰匙密談 (對稱)。

STEP 3

實用超能力

看懂每一次 https 連線背後發生什麼

你每天都在跑 TLS 握手

每次打開 https 網站、用網路銀行、登入 App,背後都在跑這場握手。看懂它,你就理解了現代網路安全的骨幹。

flowchart TD
  A[客戶送 ClientHello 列出支援的演算法] --> B[伺服器選定 cipher suite 並送憑證]
  B --> C[客戶驗證 X509 憑證鏈]
  C --> D[客戶產生 pre-master secret 用伺服器公鑰加密送出]
  D --> E[雙方各自導出對稱工作階段金鑰]
  E --> F[互換 Finished 後 全程對稱加密通訊]

TLS 把整章觀念串起來

前面學的觀念 在 TLS 的角色
混合協定 公鑰交換 + 對稱加密大量資料
公鑰憑證 (X.509) 握手時互相認證、防中間人
安全通道三性質 紀錄協定提供保密、完整、真實
MAC 紀錄協定用它做訊息認證
演算法協商 cipher suite 不綁死特定演算法

設計啟示

  1. 不綁死演算法:TLS 能協商 cipher suite,所以某個演算法被攻破時,可改用別的而不必重做整個系統——這是它長壽的關鍵(對照下一節 WEP 把 RC4 寫死的慘劇)。
  2. 可選擇加密哪個方向:不需要的方向就不加密,省運算。
  3. 可信起點防中間人:第一張憑證的信任,要靠另一管道(內建根憑證)取得,否則握手可能被中間人攻破。

下次看到網址列鎖頭,你已經能完整說出它背後這場握手的每一步。

💡
關鍵

每次 https 連線都在跑 TLS 握手:協商演算法、驗憑證、用公鑰傳 pre-master secret 導出對稱金鑰、再全程對稱加密;不綁死演算法與可信起點防中間人是它長壽的關鍵。

🔆
生活妙喻:cipher suite 協商 ≈ 兩位代表先公開確認用哪種共同語言與暗號規則

握手時公開協商加密與認證演算法,若沒有共同支援的就告吹,正如沒有共同語言談判就破局。

🔆
生活妙喻:pre-master secret 用公鑰傳遞 ≈ 用對方的公開信箱寄一把密談共用鑰匙

用對方公鑰安全地傳一把大隨機值,雙方據此導出快速的對稱工作階段金鑰,正是混合協定。

🔆
生活妙喻:兩層架構 ≈ 先談妥規則 (握手) 再正式密談 (紀錄)

握手協定協商並建立工作階段,紀錄協定負責實際加密與認證資料,提供保密、完整、真實。

本節字彙

TLS (Transport Layer Security)
由 SSL 演進而來的安全通道協定,是電子交易的事實標準,https 即建立在它之上。
🧠 傳輸層安全;網址的 https 背後就是它。
Cipher suite
TLS 握手時協商的一組加密與認證演算法選擇,使協定不綁死特定演算法。
🧠 一套『加密配方』,握手時雙方挑共同支援的一套。
Pre-master secret
握手中一方產生、用對方公鑰加密傳出的大隨機值,雙方據此導出對稱工作階段金鑰。
🧠 導出正式金鑰前的『母種子』,靠公鑰安全傳遞。
TLS 為什麼把加密與認證演算法設計成『握手時協商 (cipher suite)』而非寫死?
TLS 建立安全通道的方式『先明文、再公鑰、最後對稱』,這對應前面學過的哪個概念?
TLS 的兩層中,『紀錄協定 (Record Protocol)』提供哪些安全性質?

WiFi WEP:安全設計的失敗教訓

802.11 原始的 WEP 設計幾乎全錯:全網共用單一金鑰、基地台不被認證、誤用串流加密導致金鑰流重複、金鑰過短、RC4 本身有弱點。

STEP 1

深度探秘

一個幾乎全錯的安全設計

為什麼 WiFi 特別需要安全

1999 年發布的 IEEE 802.11 無線網路標準,內含一套安全規格叫 WEP (Wired Equivalent Privacy)。無線網路天生比有線更容易被攻擊——任何在範圍內有收發器的裝置都能竊聽、假冒。WEP 想用兩招提供保護:

  • 存取控制:用挑戰-回應協定,加入的節點要證明自己有正確的共享金鑰 K。
  • 隱私與完整:用 RC4 串流加密(同一把 K),並在每個封包加密文檢查碼保護完整性。

但 WEP 的設計被發現嚴重不足,幾乎每個環節都有問題。它是『安全設計有多難』的經典反面教材。

WEP 的核心缺陷

  1. 全網共用單一金鑰:一把 K 由管理員指定、給所有授權裝置共用。後果:金鑰常經不安全通道發給新使用者;而一個粗心或惡意的人(如心懷不滿的離職員工)拿到 K,就能讓整個網路淪陷,還可能無人察覺。解法:像 TLS 那樣用公鑰協定協商個別金鑰。

  2. 基地台從不被認證:攻擊者若知道共享金鑰,可架一個假基地台竊聽、插入或竄改流量。解法:基地台應提供可被第三方公鑰認證的憑證。

  3. 誤用串流加密 + IV 太短(最致命):每個封包用 RC4 金鑰流 XOR 加密。為避免封包遺失造成同步錯誤,RC4 用『24 位元的初始值 (IV) + 共享金鑰』重啟,IV 以明文附在每個封包。問題是共享金鑰幾乎不變,所以起始值只有 2^24(約 10^7)種,傳約 10^7 個封包後金鑰流就重複——實務上可能幾小時內就發生。攻擊者若知道某封包明文 P_i,就能算出金鑰流 K_i;金鑰流重複後,他就能用 K_i 解密新封包。而且 IV 是明文,攻擊者一眼就能看出重複解法:在重複的最壞時間前協商新金鑰(如 TLS 有明確終止機制)。

  4. 金鑰長度過短:40 位元(甚至 64 位元)金鑰是為配合美國早期出口管制而設,但 40 位元極易被暴力破解。解法:只用 128 位元金鑰。

  5. RC4 本身有弱點:標準發布後,RC4 被發現可在觀察大量流量後推算出金鑰,即使金鑰流不重複也能破,連 128 位元也不保險。解法:像 TLS 般可協商加密演算法;但 WEP 把 RC4 寫死,無從更換。

💡
關鍵

WEP 幾乎全錯:全網共用單一金鑰 (一人外洩全網淪陷)、基地台不被認證、誤用 RC4 串流且 24 位元 IV 太短導致金鑰流數小時就重複、金鑰過短、RC4 本身有弱點且被寫死。

STEP 2

生活妙喻

全公司共用一把門鎖密碼的災難

把 WEP 想成一間管理超爛的公司

全公司共用一個門鎖密碼

公司門禁只有一組密碼 (單一共享金鑰),發給每個員工。問題來了:

  • 新人報到,密碼常是用 LINE 隨手傳的(不安全通道)。
  • 任何一個離職員工只要記得這組密碼,就能進出整棟公司,公司還不會發現。一人外洩,全公司淪陷。

正確做法:每人一張獨立門禁卡(個別協商的金鑰),離職就停掉那一張。

大門不驗『這是不是真公司』

員工只證明『我知道密碼』,卻沒人確認門後真的是自家公司。壞人可以架一個假的公司門面 (假基地台),騙員工把機密交出來。

一次性密語只有 1000 萬種、還寫在門口

最致命的:公司用『一次性密語』加密通訊,但密語的變化只有約 1000 萬種,而且每天用量超大——幾小時就把所有密語用完、開始重複。更扯的是,他們把當前密語的編號大剌剌貼在門口 (IV 明文),偷聽者一看就知道『啊,這個密語又重複了』,於是一句句破解。

一次性密語的鐵律就是『絕不重複』,WEP 卻把它用到重複——這是它崩潰的核心。

密碼太短 + 鎖頭本身有暗門

門鎖密碼短到(40 位元)幾下就試出來;而且這款鎖(RC4)後來被發現本身就有暗門,看久了就能撬開——偏偏公司把這款爛鎖焊死了,想換都換不了。

💡
關鍵

WEP 像管理爛公司:全公司共用一組密碼 (一人外洩全淪陷)、大門不驗真 (假基地台)、一次性密語只有千萬種還貼在門口 (IV 太短且明文)、密碼太短、鎖本身有暗門又被焊死。

STEP 3

實用超能力

從 WEP 慘案提煉安全設計原則

WEP 是最好的反面教材

它把這一章講過的原則幾乎全部違反。把每個錯對照正確原則,就是一份珍貴的安全設計檢查表:

WEP 的錯 違反的原則 正確做法 (常見於 TLS)
全網共用單一金鑰 限制秘密的散布範圍 協商個別金鑰
基地台不被認證 雙向認證、防中間人 基地台出示可驗證的憑證
串流金鑰流會重複 串流加密絕不可重複金鑰流 重複前協商新金鑰
金鑰只有 40 位元 金鑰要夠長抵抗暴力破解 只用 128 位元
RC4 寫死無法更換 演算法應可協商 cipher suite 協商

三個帶得走的設計原則

flowchart TD
  W[WEP 的失敗] --> A[原則一 別讓秘密共享太廣 個別金鑰勝過全網共用]
  W --> B[原則二 串流加密的金鑰流絕不能重複]
  W --> C[原則三 別把演算法寫死 要能協商更換]

動手判斷

下次評估任何加密系統,用 WEP 的教訓當體檢題:

  1. 金鑰是大家共用一把,還是各自獨立? 共用一把就是大警訊。
  2. 若用串流加密,金鑰流會不會重複? IV 夠長嗎?
  3. 演算法被攻破時換得掉嗎? 寫死的設計遲早出事。
  4. 金鑰夠長嗎?基地台/伺服器有被認證嗎?

最大的啟示:安全設計極難,一個環節錯就可能讓整套崩潰。最好站在 TLS 這種經充分檢驗的標準肩膀上,而不是自己土法煉鋼。

💡
關鍵

WEP 幾乎違反全章原則,是絕佳反面教材;帶走三原則:別讓秘密共享太廣、串流金鑰流絕不能重複、別把演算法寫死要能協商;安全設計極難,應站在 TLS 等經檢驗標準上。

🔆
生活妙喻:全網共用單一金鑰 ≈ 全公司共用一組門鎖密碼

密碼常經不安全管道亂傳,任何離職員工記得就能進出且無人察覺,一人外洩全公司淪陷。

🔆
生活妙喻:IV 太短導致金鑰流重複 ≈ 一次性密語只有千萬種還貼在門口

密語幾小時就用完開始重複,編號又明文公開,偷聽者一看就知重複並逐句破解,違反串流加密絕不重複的鐵律。

🔆
生活妙喻:RC4 被寫死無法更換 ≈ 把有暗門的爛鎖焊死

演算法被發現弱點卻無法協商更換,正是 WEP 致命處,對照 TLS 可協商 cipher suite。

本節字彙

WEP (Wired Equivalent Privacy)
1999 年 802.11 內含的無線安全規格,因多項嚴重缺陷後被 WPA 取代,是安全設計的反面教材。
🧠 號稱『等同有線的隱私』,實際漏洞百出。
金鑰流重複 (keystream reuse)
串流加密用同一段金鑰流加密多份資料的致命錯誤;WEP 因 24 位元 IV 太短而數小時內就發生。
🧠 一次性密語被重複用,等於沒加密。
假基地台 (rogue base station)
攻擊者架設、冒充合法基地台的裝置;WEP 因從不認證基地台而無法防範。
🧠 山寨 WiFi 熱點,騙你連上再竊聽。
WEP『全網共用單一金鑰』為什麼是嚴重的設計弱點?
WEP 最致命的技術缺陷之一,與 24 位元的初始值 (IV) 有關。問題是什麼?
WEP 把 RC4 演算法『寫死』在標準裡,沒有協商機制。當 RC4 被發現弱點時,這帶來什麼後果,對照 TLS 的做法是什麼?