Diffie–Hellman 問題的用途是建構安全的金鑰協商協定(key agreement protocols)——用來借助共享秘密,保護兩方或多方在網路上通訊的協定。

這個秘密會被轉換成一把或多把工作階段金鑰(session keys)——在該工作階段期間用來加密與鑑別所交換資訊的對稱金鑰。

一個非 DH 的例子:3G/4G 的 AKA#

先看一個不依賴 DH 的協定:3G 與 4G 電信標準中用來在 SIM 卡與電信業者之間建立通訊的協定,通常稱為 AKA(authenticated key agreement)。它不使用 Diffie–Hellman 函式,只用對稱金鑰操作

流程(SIM 卡持有秘密金鑰 K,業者也知道 K):

  1. 業者挑一個隨機值 R

  2. 業者用兩個偽隨機函式計算兩個值:

    SK = PRF0(K, R)
    V1 = PRF1(K, R)
  3. 業者 → SIM:送出 RV1(攻擊者看得見)。

  4. SIMR 算出 SK = PRF0(K, R),並驗證 V1 = PRF1(K, R)

  5. SIM 計算 V2 = PRF2(K, R)

  6. SIM → 業者:送出 V2

  7. 業者驗證 V2 = PRF2(K, R)

  8. 雙方以金鑰 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 值、預先算好對應的 SKV1V2,全部存進資料庫。

在這個情況下,預先計算還有一個好處:降低長期金鑰的曝光