Hmac

為什麼 HOTP 和 TOTP 實現都使用 6 位而不是更多?

  • August 19, 2013

在想了一段時間之後,我正在檢查 RFC。在RFC 4226 - HOTP: An HMAC-Based One-Time Password Algorithm中,它在附錄中聲明:

安全性方面的一個簡單增強是從 HMAC-SHA-1 值中提取更多數字。

例如,計算 HOTP 值以 10^8 為模來建構 8 位 HOTP 值會將攻擊者的成功機率從 sv/10^6 降低到 sv/10^8。

這可以提供提高可用性的機會,例如,通過增加 T 和/或 s,同時仍然實現總體上更好的安全性。例如,s = 10 和 10v/10^8 = v/10^7 < v/10^6,這是 s = 1 時 6 位程式碼的理論最優值。

在檢查實現時,我沒有意識到從 HMAC-SHA1 結果中提取 8 個(或更多)數字有什麼問題。

這僅僅是通過節省使用者編寫 10 位而不是 4 位來改善使用者體驗的問題嗎?還是有我失踪的數學原因?

為什麼停在8位數?10 位數字將更加安全。或者 12. HOTP 算法的輸出是 160 位,所以你可以一直到大約 48 位。

底線:6 位數字對於大多數應用程序來說**已經足夠安全了,這才是最重要的。**任何更多對於使用者來說都是不方便的,並且在硬體令牌中使用時會稍微貴一些(8 位顯示器與 6 位顯示器)。

正如您所猜測的那樣,這是出於使用者體驗的原因,但安全性並沒有您想像的那麼嚴重。

大多數實現使用 6 位 HOTP/TOTP 方案,並設計方案的實現以提供他們熟悉的安全級別。

對於 HOTP,讓 6 位足夠安全的關鍵參數是節流行為。與合理的前瞻視窗大小結合使用時 $ s $ ,暴力攻擊成功的機率足夠低,因為帳戶或客戶端將無法嘗試大量猜測。

TOTP 的限制參數是相同的,因為它基於 HOTP。安全計算不同,但適用相同的原則。

反之當然是不恰當地選擇前瞻/後視或節流行為確實會打開一個 6 位十進制 OTP 來以高成功機率進行暴力攻擊。

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