Hmac
HMAC SHA256 用於使用隨機 nonce 派生會話密鑰
我需要派生會話密鑰才能在移動應用程序和藍牙設備之間創建應用層安全通道。我的方案類似於 使用 HMAC 和 counter 的方案。
前提是移動應用程序和 BLE 設備之間已經共享相同的密鑰 $ K $ (256 位)通過配置過程,我計劃通過以下步驟派生會話密鑰:
- 讓 $ A $ 是從移動應用程序生成的 16 字節隨機數和 $ B $ 是 BLE 設備生成的 16 字節隨機數。兩者都被視為 nonce 或 IV。
- 手機app隨機發送 $ R_A $ 到 BLE 設備 $ A $ 並且 BLE 設備發送它的隨機 $ R_B $ 到移動應用 $ B $ 在不安全的通信渠道上。
- 移動應用程序和 BLE 設備都使用以下方法派生會話密鑰:
會話密鑰 = $ \text{HMAC-SHA256}(K, R_A||R_B) $
隨機的 $ R_A $ 和 $ R_B $ 都是串聯的。
現在雙方將共享相同的會話密鑰,用於即將使用 AES 進行的通信。我使用這個方案是因為我的 BLE 設備在不對稱方法的處理能力上受到限制。
實施這種派生會話密鑰的方案是否安全?
是的,它是安全的,因為 KDF 是安全的,正如您連結到的問題的答案所示。
但是,您應該記住以下幾點:
- KDF 的結果未經驗證;如果初始共享密鑰不正確,您只有在使用會話密鑰後才能發現。如果您想使用會話密鑰進行身份驗證,這很難實現(您可能希望在會話期間使用顯式身份驗證而不是隱式身份驗證)。
- 雙方現在共享一個會話密鑰,因此在使用 encrypt-then-MAC 時可能需要小心。
- 雙方使用共享一個會話密鑰,可能用於雙向通信,這意味著您可以重播消息,而不僅僅是來自 $ A $ 至 $ B $ ,但也從 $ A $ 至 $ B $ 然後重播到 $ A $ .
- 該計劃不會提供任何臨時 Diffie-Hellman 可以提供的前向保密。
例如,除了計算加密密鑰和 MAC 密鑰之外,您還可以使用單字節標籤,可能還可以使用第三個標籤來創建可以交換以驗證實體的值。
您可以包括身份 $ ID_A $ 和 $ ID_B $ 在 MAC 計算中,例如 $ ID_A || ID_B || R_A || R_B $ 發送自 $ A $ 至 $ B $ .