成對瞬態密鑰是如何派生或生成的?
我最近在研究 WPA/WPA2 安全性,我想知道 PTK 是如何派生的。我在 IEEE 802.11 標準 (2012) 中找到了這些參數:
PRF - X(PMK, “Pairwise key expansion”, Min(AA,SPA) || Max(AA,SPA) || Min(ANonce,SNonce) || Max(ANonce,SNonce))
其中 X = 256 + TK_bits。TK_bits 的值取決於密碼套件
IEEE 802.11 文件中只有一頁是關於PRF的。
對我來說神秘的是 PRF 或偽隨機函式。它是如何工作的?它有任何算法或方法嗎?我已經搜尋過了,但我沒有找到任何帶有具體數字和分步教程或任何程式碼實現的具體範例。
您連結到的頁面直接提供了計算算法 $ {\rm PRF}(K, A, B, Len) $ :
$ \hspace{2em} \textbf{for }i \leftarrow 0 \textbf{ to } (Len+159)/160 \textbf{ do} \ \hspace{4em} R \leftarrow R \mathbin| \text{H-SHA-1}(K, A, B, i) \ \hspace{2em} \textbf{return } \text{L}(R, 0, Len) $
輔助函式 $ \text{H-SHA-1} $ , 字元串連接運算符 $ | $ 並且參數的含義都定義在頁面上這段程式碼的正上方。輔助函式 $ \rm L $ 您連結到的頁面上似乎沒有定義,但從上下文來看,似乎很可能 $ {\rm L}(R, 0, Len) $ 是為了返回第一個 $ Len $ 位(即第一個 $ Len/8 $ 字節)的字元串 $ R $ . 您可能會在文件前面的某處找到它的精確定義。
(此外,給定的算法沒有指定字元串的初始值 $ R $ ,但它似乎很明顯,它最初是空的。)
在這個算法下面,頁面定義了五個特定的“包裝函式” $ \text{PRF-}X $ , 為了 $ X \in {128, 192, 256, 384, 512} $ , 就像$$ \text{PRF-}X(K, A, B) = \text{PRF}(K, A, B, X). $$ 但是請注意,該頁面還說明了這些包裝函式的不同定義,在頁面的末尾和下一頁的開頭給出,將在某些情況下使用(“當協商的 AKM 為 00-0F- AC:5 或 00-0F-AC:6…")。
在任何情況下,這看起來都是將具有可變輸入長度但固定輸出長度的HMAC偽隨機函式擴展為可變輸出長度 PRF 的常用方法,方法是使用相同的輸入結合遞增計數器重複呼叫它,並連接結果。它看起來與例如HKDF-Expand非常相似,儘管 HKDF 還將先前的 HMAC 輸出作為輸入提供給下一個 HMAC 呼叫,以便(希望)使底層散列函式中的任何密碼分析弱點更難被利用。(有關設計者的基本原理,請參閱HKDF 論文的第 7 節。)