Hash

實施一次性密碼的推薦方法?

  • August 3, 2017

我需要有關實現以下功能所需的流程/命令的幫助:

我正在建模一個 OTP 系統,其中使用者會請求一個 OTP,而應用程序會向他發送一個。稍後使用者將使用 OTP 來使用某些功能或東西,並且 OTP 需要進行驗證。約束:

  • OTP 不能儲存在 Clear 中。
  • 需要使用 Thales payShield 9000,我有可用的,發送 HOST COMMANDS。

這是過程:

  • 應用 A 使用使用者帳戶請求 OTP
  • 應用程序 B 為該使用者帳戶生成 OTP 並將其發送到應用程序 A
  • App B 不能明文儲存 OTP,所以它必須使用 HSM 以某種方式儲存可以稍後驗證的 OTP
  • 稍後,應用 A 將 OTP 發送給應用 B,應用 B 對其進行驗證(使用 HSM),然後繼續將批准發送給應用 A

如果這沒有意義,我很抱歉,我不知道我在做什麼。

我不完全理解您所描述的方案,尤其是您的應用程序 A 和 B 之間的互動。我將嘗試描述基於 OTP 的身份驗證的合理 HSM 用法。

我認為您對通常如何處理典型的 OTP 有一點誤解。無需儲存OTP,它始終在使用時計算。典型的場景是,使用者(他的 OTP 計算應用程序)和伺服器都儲存了一個共享密鑰。根據該秘密和一些附加資訊(如使用 TOTP 時的時間戳,或使用 HOTP 時的計數器),使用 HMAC 算法計算一次性密碼。

這個 HMAC 計算可以在軟體(如果您在手機上使用普通應用程序,如 FreeOTP)或硬體(如 PKCS#11 令牌)中完成。在您的情況下,伺服器端可以使用儲存使用者機密的 HSM 來進行 HMAC 計算。對於真正的大規模多使用者設置,您可能必須在 HSM 上從主密鑰動態創建共享密鑰,以克服儲存限制。

HOTPTOTP的 RFC 中概述瞭如何計算 6 位數字(或您需要的任何長度)OTP 的具體過程。

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