Hash

使用客戶端隨機數的正確方法是什麼?

  • June 9, 2021

我已經為我的一個客戶實現了一個 API,它依賴於nonces和一個shared secret。結構:

  1. 客戶站點 ( CS ) 從 My App ( MA ) 請求 nonce,發布他們的使用者名
  2. MA驗證使用者名是否有效,然後生成一個隨機數作為響應
  • nonce僅對給定的使用者有效,並且僅在 1 分鐘內有效。
  1. CS使用nonce進行有用的 API 呼叫;文章看起來像這樣:
  • 使用者名、nonce(來自第 2 步)、cnonce(由CS生成)、payload(有用的 API 呼叫)和 hash 這是 nonce、payload、共享密鑰和客戶端 nonce 的 sha1 雜湊。
  1. MA確認隨機數對給定的使用者名有效(然後使隨機數失效以供將來使用),然後使用給定使用者名的共享密鑰以及隨機數和提供的客戶端隨機數來散列有效負載並確認散列匹配給定雜湊。

如果匹配,則執行負載中指定的 API 呼叫。

我的問題:我是否正確地使用了nonce的概念?我很難看到它的用處。

客戶端 nonce 用於保護客戶端免受重放攻擊。如果沒有客戶端 nonce,攻擊者可以攔截 CS 對 nonce 的初始請求,並使用伺服器之前使用的舊 nonce 進行響應。然後,客戶端將使用那個舊的 nonce 並使用它進行 API 呼叫,攻擊者將再次攔截它,並且攻擊者將發回真正的伺服器在第一次使用 nonce 時實際發送的響應。總而言之,重放攻擊就是讓客戶端與伺服器的老鬼進行互動。客戶端 nonce 允許客戶端確保他正在與“新鮮且活躍”的伺服器交談。

如果客戶端有足夠大的本地記憶體來呼叫所有以前使用的隨機數,則不需要客戶端隨機數——這種記憶體可以抵抗重啟,並且可以在共享秘密生命的整個持續時間內儲存所有隨機數。這很少實用。

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