Hmac

對於 HMAC 來說,隨機數是否足夠“秘密”?

  • November 13, 2015

我們正在實現一個與 Web 服務通信的移動應用程序,並且在首次安裝時,使用者將其設備 ID 發送到 Web 服務(通過 TLS,此時未經身份驗證)——這將確定我們的系統是否知道使用者的設備。如果設備未知,使用者必須使用使用者名和密碼進行身份驗證才能關聯設備。當 Web 服務響應請求使用者名和密碼的移動應用程序時,響應包括一個 nonce,僅對該請求和響應有效。

請求使用者名/密碼後,客戶端會生成一個 cnonce 和一個 HMAC:

hash_hmac(sha256, nonce || deviceid || cnonce, nonce) 

使用之前提供的隨機數作為鍵。當 Web 服務收到響應時,提供的 nonce 無效。

由於此移動應用程序被認為是在惡意設備上,我們不希望在應用程序中儲存可以恢復的密鑰。

在上面的範例中使用 nonce 作為 hmac 的密鑰是否安全?

不,nonce 不適合作為 HMAC 密鑰,因為任何人都可以查看傳輸中的 nonce。另一方面,如果 TLS 連接確實提供了足夠的安全性,那麼您將不需要 HMAC。

可以將 nonce 用作一次性程式碼,但您不需要 HMAC。如果攻擊者可以獲得隨機數發送給客戶端,那麼攻擊者總是可以通過重做 HMAC 計算來用另一個隨機數替換原始隨機數。

請注意,如果您不能信任客戶端應用程序,您的解決方案空間可能是空的。這聽起來很像嘗試實施 DRM 方案。

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