RFC 5683閱讀筆記 PAK

RFC5683閱讀筆記

Password-Authenticated Key(PAK) Diffie-Hellman Exchange

摘要

Diffie-Hellman(簡稱DH)密鑰交換是最早的密鑰交換算法之一,使得通信雙方能在非安全的信道中安全的交換密鑰,用於加密後續的通信消息。

在本文檔中提出了一種算法用於在未經身份鑑別的Diffie-Hellman算法中添加雙向的身份鑑別,這種算法稱爲Password-Authenticated Key(PAK)交換,它允許雙方在執行Diffie-Hellman密鑰交換時進行身份鑑別。

文檔認爲這種協議足夠安全可以抵擋所有的主動攻擊和被動攻擊,而且不允許任何的攻擊者獲得可以用於進行字典攻擊的信息。

文檔規定

  • A 代表實體Alice
  • B 代表實體Bob
  • Ra是指由A選擇的隨機祕密指數
  • Rb是指由B選擇的隨機祕密指數
  • Xab表示由B得出的值(X可能由A計算)
  • Yba表示由A得出的值(Y可能由B計算)
  • 當a除以b時,a mod b表示最小的非負餘數
  • Hi(u)表示在字符串u上計算的商定函數(例如基於SHA-1,SHA-256等),各種H()充當獨立的隨機函數,H1(u)和H2(u)是關鍵推導函數,H3(u)、H4(u)和H5(u)是哈希函數。
  • s | t表示字符串S和T的串聯
  • ^表示冪
  • 乘、除和求冪運算都是針對一個p元域執行的,也就是說
    • ab 始終表示ab(mod p)
    • a/b 始終表示a*x(mod p),x表示b模p的乘法逆
    • ab始終表示ab(mod p)

Diffie-Hellman密鑰交換算法簡述

目的

使兩個用戶能夠安全的交換密鑰,以便在後續的通信中使用該密鑰對消息進行加密。

密鑰交換過程

在這個過程中擁有的全局公開變量,素數p和p的本原根g。

用戶A和用戶B分別產生祕密的兩個隨機數Xa和Xb。

過程如下:

  • A→B:用戶A計算:Ya=g^Xa mod p,並把Ya發送給用戶B
  • B→A:用戶B計算:Yb=g^Xb mod p,並把Yb發送給用戶A
  • 用戶A計算:K=(Yb)^Xa mod p
  • 用戶B計算:K=(Ya)^Xb mod p
  • 這樣用戶A和B 都擁有了會話密鑰K

安全性

安全型是基於離散對數計算的複雜性。

攻擊者只能通過g、b、Ya、Yb來計算,需要計算複雜的離散對數。

1. 概述

PAK具有如下優點:

  • 它提供了一個安全的、經過身份鑑別的密鑰交換協議。
  • 當使用密碼時可以安全的方式離線字典攻擊
  • 它可以確保轉發的保密性
  • 它已經被證明和Diffie-Hellman交換密鑰方案一樣安全。

2. PAK流程

Diffie-Hellam交換密鑰協議要求消息的發送者和接收者都創建自己的祕密,隨機數,並且可以交換各自密碼數字的冪。

PAK有兩個用戶,A和B,並且它們共享滿足以下條件的祕密密碼PW:

  • H1(A|B|PW) != 0
  • H2(A|B|PW) != 0

文檔也精心選擇了全局Diffie-Hellman公開的常數,素數p和生成器g,以便:

  • 安全素數p足以使離散對數的計算不可行
  • g以p爲模的冪涵蓋從1到p-1的p-1個整數的整個範圍

最初,A選擇一個祕密隨機指數Ra並計算g ^ Ra;B選擇一個祕密隨機指數Rb並計算g ^ Rb。爲了提高效率,可以爲Ra和Rb使用短指數,只要大於某個長度就可以。

  • A→B:{A, X = H1(A|B|PW)*(g^Ra)}(上述PW前提條件確保X!= 0)。
    • B收到Q(Q = X),驗證Q!= 0(如果Q = 0,則B中止過程);將Q除以H1(A|B|PW)得到Xab,即g^Ra的恢復值。
  • B→A:{Y = H2(A|B|PW)*(g^Rb), S1 = H3(A|B|PW|Xab|gRb|(Xab)Rb)}(以上關於PW的前提條件確保Y!= 0)
    • A驗證Y!=0;將Y除以H2(A|B|PW)得到Yba,即g^Rb的恢復值,並計算S1’= H3(A|B|PW|gRa|Yba|(Yba)Ra);通過檢查S1’= S1對Bob進行身份驗證;如果通過驗證,則設置密鑰K = H5(A|B|PW|gRa|Yba|(Yba)Ra)。
  • A→B::S2 = H4(A|B|PW|gRa|Yba|(Yba)Ra)
    • B計算S2’= H4(A|B|PW|Xab|gRb|(Xab)Rb)並通過檢查S2’= S2來鑑別A;如果通過驗證,則設置K=H5(A|B|PW|Xab|gRb|(Xab)Rb)。

如果以上任何驗證失敗,則協議停止;否則,雙方必須相互鑑別並建立密鑰。

3. 參數選擇

3.1 一般注意事項

在一般實現中,必須選擇參數以滿足[BMP00]的算法要求。

3.2 OTASP和WLAN Diffie-Hellman參數和關鍵擴展功能

[OTASP],[TIA683]和[WLAN]將公共參數p和g預先設置爲它們的已經發布過的值。這對於防止攻擊者發送僞造的p和g值,欺騙合法用戶進行不正確的Diffie-Hellman求冪運算以及泄露有關密碼的某些信息是十分必要的。根據[OTASP],[TIA683]和[WLAN],應將g設置爲00001101,將p設置爲以下1024位素數(最高有效位在前):

0xFFFFFFFF 0xFFFFFFFF 0xC90FDAA2 0x2168C234 0xC4C6628B 0x80DC1CD1 0x29024E08 0x8A67CC74 0x020BBEA6 0x3B139B22 0x514A0879 0x8E3404DD 0xEF9519B3 0xCD3A431B 0x302B0A6D 0xF25F1437 0x4FE1356D 0x6D51C245 0xE485B576 0x625E7EC6 0xF44C42E9 0xA637ED6B 0x0BFF5CB6 0xF406B7ED 0xEE386BFB 0x5A899FA5 0xAE9F2411 0x7C4B1FE6 0x49286651 0xECE65381 0xFFFFFFFF 0xFFFFFFFF

此外,如果Diffie-Hellman參數Ra和Rb使用短指數,則它們的最小位數應爲384位。假設素數p爲1024位長而會話密鑰K爲128位長,則獨立的隨機函數H1和H2應分別輸出1152位。H3,H4和H5每個輸出128位。文檔使用FIPS 180 SHA-1散列函數[FIPS180]實例化[WLAN]中的隨機函數,當然也可以使用SHA-256:

H1(z): SHA-1(1|1|z) mod 2^128 | SHA-1(1|2|z) mod 2^128 |…| | SHA-1(1|9|z) mod 2^128 H2(z): SHA-1(2|1|z) mod 2^128 | SHA-1(2|2|z) mod 2^128 |…| | SHA-1(2|9|z) mod 2^128 H3(z): SHA-1(3|len(z)|z|z) mod 2^128

H4(z): SHA-1(4|len(z)|z|z) mod 2^128

H5(z): SHA-1(5|len(z)|z|z) mod 2^128

爲了爲H1和H2創建1152個輸出位,對SHA-1進行了9次調用,並使用每個輸出的128個最低有效位。每次調用SHA-1的輸入有效負載包括:

  • 功能類型的32位,H1設置爲1,H2設置爲2
  • 一個32位計數器值,對於SHA-1的每次調用,該值從1遞增到9
  • 自變量z [for(A|B|PW)

函數H3,H4和H5僅需要調用SHA-1哈希函數,它們各自的有效載荷包括:

  • 32位功能類型(例如,H3爲3)
  • 參數z的位長的32位值
  • 實際變量重複兩次

最後,使用輸出的128個最低有效位。

4. 安全注意事項

  • 身份標識

    • 任何使用PAK的協議都必須指定一種用於生成身份字符串的單個表示形式的方法。
  • 共享密鑰

    • PAK涉及共享密鑰的使用。保護共享價值並隨着時間的流逝管理(限制)它們暴露出來至關重要,可以使用衆所周知的安全策略和措施來實現。如果在兩個以上的實體(例如Alice,Bob和Mallory)之間共享一個祕密,則Mallory可以將自己代表Alice和Bob通信而Bob不能察覺。
  • Diffie-Hellman參數的選擇

    • 必須仔細選擇參數p和g,以免損害共享機密。在PAK協議中只能使用參數p和g的先前商定值。這對於防止攻擊者發送僞造的p和g值並從而以不正確的Diffie-Hellman指數欺騙另一個通信方是很有必要的。每次執行密鑰協商協議時,雙方還需要隨機選擇一個新的指數。如果雙方重新使用相同的值,則“轉發保密”屬性將丟失。
    • 此外,如果使用短指數Ra和Rb,則它們的最小大小應爲384位(假設使用128位會話密鑰)。
  • 防範攻擊

    • 有一個潛在的攻擊,即對乘冪乘積模爲p的乘積組的所謂離散對數攻擊,在這種攻擊中,對手可以構造一個離散對數表以用作“字典”。必須選擇足夠大的素數p來防止這種攻擊。在[WLAN]和[TIA683]中發佈了p的適當1024位值和g的適當值。目前,這已實現。但是,較大的質數(即2048位長甚至更大的質數)肯定會提供更好的保護。重要的是要注意,一旦完成,生成器也必須更換,因此必須非常小心地執行此任務。
    • 攻擊者可以通過反覆猜測密碼並嘗試進行身份驗證來發起在線密碼攻擊。PAK的實現者應考慮採用機制(例如鎖定)來防止此類攻擊。
  • 關於H()函數的建議

    • 假設素數p爲1024位長而會話密鑰K爲128位長,則獨立的隨機函數H1和H2應分別輸出1152位。隨機函數H3,H4和H5應該輸出128位。
發佈了24 篇原創文章 · 獲贊 15 · 訪問量 9832
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章