Diffie–Hellman 問題的用途是建構安全的金鑰協商協定(key agreement protocols)——用來借助共享秘密,保護兩方或多方在網路上通訊的協定。
這個秘密會被轉換成一把或多把工作階段金鑰(session keys)——在該工作階段期間用來加密與鑑別所交換資訊的對稱金鑰。
一個非 DH 的例子:3G/4G 的 AKA#
先看一個不依賴 DH 的協定:3G 與 4G 電信標準中用來在 SIM 卡與電信業者之間建立通訊的協定,通常稱為 AKA(authenticated key agreement)。它不使用 Diffie–Hellman 函式,只用對稱金鑰操作。
流程(SIM 卡持有秘密金鑰 K,業者也知道 K):
業者挑一個隨機值
R。業者用兩個偽隨機函式計算兩個值:
SK = PRF0(K, R) V1 = PRF1(K, R)業者 → SIM:送出
R與V1(攻擊者看得見)。SIM 用
R算出SK = PRF0(K, R),並驗證V1 = PRF1(K, R)。SIM 計算
V2 = PRF2(K, R)。SIM → 業者:送出
V2。業者驗證
V2 = PRF2(K, R)。雙方以金鑰
SK啟用通訊。

圖 11-1:3G 與 4G 電信中的鑑別式金鑰協商協定
雙方最終得到一把共享金鑰
SK,而攻擊者僅憑觀察雙方交換的訊息、甚至修改它們或注入新訊息,都無法判定該金鑰。SIM 卡藉由重算
V1驗證自己確實在與業者對話;業者藉由計算V2驗證 SIM 卡知道K。
它的弱點#
防範方式:協定加入額外檢查,確保同一個
R不被重複使用。
更大的風險是:攻擊者可以先錄下通訊與金鑰協商期間交換的任何訊息,稍後再用擷取到的
R值解密那些通訊——他們能算出過去的工作階段金鑰,用來解密錄下的流量。
攻擊模型#
例如你可以主張前述 3G/4G 協定是安全的,因為被動攻擊者找不到工作階段金鑰;但你也可以主張它不安全,因為一旦金鑰
K外洩,所有過去與未來的通訊都會被危及。
依協定所洩漏的資訊,有三種主要攻擊模型(由弱到強):
竊聽者(eavesdropper):觀察兩個合法方之間交換的訊息,並能記錄、修改、丟棄或注入訊息。要防範竊聽者,金鑰協商協定不得洩漏任何關於所建立共享秘密的資訊。
資料外洩(data leak):攻擊者取得一次或多次協定執行的工作階段金鑰與所有暫時秘密(如上例中的
SK),但沒有取得長期秘密(如K)。入侵/淪陷(breach / corruption):攻擊者取得一方或多方的長期金鑰。
一旦發生入侵,安全性就無法再達成——攻擊者能在後續的協定工作階段中冒充其中一方或雙方。
儘管如此,攻擊者不該能還原取得金鑰之前那些工作階段的秘密。
安全目標#
金鑰協商協定可以被設計來滿足數個安全目標。以下是四個最相關的(由簡單到精巧):
鑑別(Authentication)#
每一方都應能鑑別對方,也就是協定應允許雙向鑑別。
當一個協定鑑別了雙方,就稱為鑑別式金鑰協商(AKA)。
金鑰控制(Key control)#
任何一方都不該能選定最終的共享秘密,或把它強迫落在某個特定子集內。
前述的 3G/4G 金鑰協商協定缺乏這個性質:業者選擇的
R值完全決定了最終的共享金鑰。
前向保密(Forward secrecy)#
保證即使所有長期秘密都被曝光,先前協定執行所產生的共享秘密仍無法被算出——即使攻擊者錄下了所有先前的執行過程,或曾能注入、修改先前的訊息。
具備前向保密的協定保證:即使你被迫把裝置與其秘密交給某個當局,他們也無法解密你先前的加密通訊。
(3G/4G 金鑰協商協定不提供前向保密。)
抗金鑰洩漏冒充(KCI resistance)#
KCI(key-compromise impersonation)發生在攻擊者攻破某一方的長期金鑰,並能用它冒充另一方時。
3G/4G 金鑰協商協定容許平凡的 KCI,因為雙方共用同一把金鑰
K。理想上,金鑰協商協定應該防止這類攻擊。
效能#
金鑰協商協定不只要安全,也要有效率。考量因素包括:
- 交換的訊息數量
- 訊息的長度
- 實作協定的計算量
- 能否做預先計算來省時間
一般而言,交換的訊息越少越短,協定就越有效率;而且互動性越低越好——這樣任一方都不必等收到訊息才能送出下一則。
衡量協定效率的常見指標是它的往返次數(round trips)——送出一則訊息並收到回應所需的時間。
往返時間通常是協定延遲的主因,但要執行的計算量也算數:需要的計算越少越好,能事先做的預先計算越多越好。
例如 3G/4G 金鑰協商協定交換兩則各幾百位元的訊息,且必須按特定順序送出。這個協定可以用預先計算來省時間——業者可以事先挑好許多
R值、預先算好對應的SK、V1、V2,全部存進資料庫。在這個情況下,預先計算還有一個好處:降低長期金鑰的曝光。