Authentication

基於 HMAC 的密鑰交換

  • September 30, 2019

Alice 和 Bob 需要共享公鑰來簽署/驗證臨時密鑰。他們有一個秘密密鑰 $ K $ .

  1. Alice 生成一個 32 字節的隨機數 $ A $ , 計算 $ \operatorname{HMAC-SHA256}(K, M||A) $ 並向 Bob 發送雜湊和純文字 $ M $ , $ A $
  2. Bob 計算 $ \operatorname{HMAC-SHA256}(K, M||A) $ 檢查雜湊
  3. 如果雜湊匹配,Bob 計算 $ N=\operatorname{HKDF}(A||K) $
  4. Bob 加密他的公鑰 $ E_N(\mathit{PubKeyBob}) $ 使用 AES 256 GCM,並將密碼發送給 Alice
  5. 愛麗絲計算 $ N $ 並解密密碼,加密她的公鑰 $ E_N(\mathit{PubKeyAlice}) $ ,並將密碼發送給 Bob
  6. Bob 解密了密碼,他們都擁有彼此的公鑰

這是共享公鑰的安全方式嗎?

如果他們有預共享密鑰 $ K $ 並且想要驗證公鑰,最簡單的方法是讓 Alice 計算 $ T = HMAC(K, PubKeyAlice) $ 並且寄出 $ (PubKeyAlice,T) $ 給鮑勃。這驗證了 Alice 的公鑰。無需對其進行加密,因為無論如何它都是公共價值。

引用自:https://crypto.stackexchange.com/questions/74696