One-Time-Password

為什麼不只為一次性密碼 (OTP) 生成隨機字元串?

  • March 27, 2022

http://en.wikipedia.org/wiki/One-time_password#How_OTPs_are_generated_and_distributed

為什麼有這麼多生成 OTP 的方法,為什麼不只使用隨機字元串?

僅使用隨機字元串是簡單且通常合理的解決方案。但是,如果您擁有大量客戶群,它可能會變得過於昂貴,因為所有這些隨機字元串都需要儲存。


但簡而言之,這些更複雜的方案主要是為了減少儲存需求和所需的熵量。注意:我在前兩個回复的基礎上部分建構了這個回复。

減少所需的熵和儲存要求

僅生成隨機字元串意味著需要生成和儲存比許多經過深思熟慮的 OTP 機制更多的隨機位。例如,S/KEY 只需要生成和儲存一個值,即使可以有例如一百個密碼,從而將儲存成本降低到(理論上)多達百分之一的隨機字元串。因為需要較少的隨機位(熵),所以 OTP 機制更容易測試和驗證。

(注意:為了順利處理轉換和過期,通常需要儲存多個值。)。

我在某種程度上同意 md_1976,但是,我不同意儲存在伺服器上的資訊量。基於時間的 OTP 方案通常仍然需要一些關於使用者帳戶的資訊,例如使用者身份驗證設備(硬體設備)的序列號。如果有基於時間的 OTP 的軟體實現,伺服器可能需要知道使用者設備的公鑰,或者伺服器和設備可能需要共享密鑰。基於時間的 OTP 方案的一個可能問題是它們往往需要特殊的客戶端軟體或硬體。另一方面,傳統的 OTP 方案甚至可以通過例如信件和電話網路工作。

在具有客戶端硬體設備的基於時間的方案中,每個帳戶要儲存的典型資訊可以是設備的序列號和/或其他辨識碼。

儲存值的大小

出於比較成本的目的。(未考慮可能的其他值,例如帳戶 ID 或時間戳。)

  • 原始 S/KEY (RFC 1760) - 這是基於 MD4 雜湊函式,被認為是損壞的。不建議使用。
  • OTP (RFC 2289),基於 MD4/MD5 或 SHA1。每個 OTP 密鑰需要 64 位儲存。
  • HOTP (RFC 4226):共享密鑰為 128 位或更多(推薦 160 位)。
  • TOTP (RFC 6238):使用與 HOTP 相同大小的共享密鑰。

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