0%

LTE NAS 金鑰計算

最近在實做 LTE 網路 Attach 流程 Non-access Stratum (NAS) 層加密及 MAC 值計算時,重新看了一次 \(K_{NASint}\)\(K_{NASenc}\) 的計算方式,因此寫一篇文章紀錄以供日後參考。

計算 \(K_{NASint}\)\(K_{NASenc}\) 需要 \(K_{asme}\) 及 Key derivation function (\(KDF\))。 \(K_{asme}\) 可以透過 LTE 鑒權的流程取得。

EPS Key Hierarchy from TS 33.401 V15.10.0 6.2

Generic KDF

\(KDF\)[1] 的定義如下: \[ KDF = HMAC-SHA256(K_{asme}, S) \]

可以看到它需要的兩個參數為 \(K_{asme}\) 及字串 \(S\)[1],其中 \(S\) 的定義如下: \[ S = FC || P_{0} || L_{0} || P_{1} || L_{1} ... P_{n} || L_{n} \]

\(FC\) 用於區別演算法的使用時機,\(P_{n}\) 代表輸入的參數,在此會用到的有兩個參數 \(P_{0}\)\(P_{1}\),分別為演算法的類別及演算法的編號,\(L_{n}\) 代表著參數的長度,以兩個 byte 來表示,採用 big-endian 格式。

參數 \(P_{0}\)

參數 \(P_{0}\) 為演算法的類別,長度為 1 byte,具體參數參閱下表[3]:

Algorithm distinguisher Value
NAS-enc-alg 0x01
NAS-int-alg 0x02
RRC-enc-alg 0x03
RRC-enc-alg 0x04
UP-enc-alg 0x05
UP-enc-alg 0x06

參數 \(P_{1}\)

參數 \(P_{1}\) 為演算法的編號,長度為 1 byte,具體參數請參閱下表[4]:

Algorithm identifier Value
EEA0 0x0
128-EEA1 0x1
128-EEA2 0x2
128-EEA3 0x3
EIA0 0x0
128-EIA1 0x1
128-EIA2 0x2
128-EIA3 0x3

\(K_{NASint}\)\(K_{NASenc}\)

計算 \(K_{NASint}\)\(K_{NASenc}\) 時要將 \(FC\) 設為 \(0x15\),因此兩個 \(S\) 值分別為:

\(EIA1\)\(K_{NASint}\)\(S = 0x15 || NAS-int-alg || 0x0001 || EIA1 || 0x0001\)

\(EEA1\)\(K_{NASenc}\)\(S = 0x15 || NAS-enc-alg || 0x0001 || EEA1 || 0x0001\)

得到 \(S\) 值後再用 \(KDF\) 算出 256-bit 長度的 HMAC,注意因為 LTE 使用的金鑰長度為 128-bit,故最後只取尾巴的 128-bit 作為 Key

References

  1. TS 33.220 V15.4.0 B.2
  2. TS 33.401 V15.10.0 A.2
  3. TS 33.401 V15.10.0 Table A.7-1
  4. TS 33.401 V15.10.0 5.1.3.2/5.1.4.2