Hotp

HOTP 如何保持同步?

  • June 13, 2013

我對HOTP的理解是,每個密碼都是唯一的,並且基於一個計數器。

$$ PASSWORD = HOTP_1(K,C) $$ 在哪裡 $ C $ 是一個增量計數器。

我想知道的是,您如何使客戶端和伺服器保持同步?查看目前系統(Google身份驗證器),似乎沒有指示實際的“計數器”編號,但您可以隨意生成連續密碼。

例如,如果您生成的密碼使用 $ C = 5 $ ,但伺服器正在等待 $ C = 3 $ ?

另外,什麼是“完整性檢查”?Google似乎無法提出解決方案。

HOTP 標準描述了重新同步算法(第 7.4 節)。基本上,伺服器會記住最後一個值 $ C $ 提供了正確密碼的計數器。當要驗證新密碼時,伺服器會嘗試 $ C+1 $ , $ C+2 $ …直到一個匹配,或 $ C+w $ 達到了一些 $ w $ 稱為“視窗大小”。

預期的場景如下:客戶端有一個手持設備,它輸出連續的密碼,每個按鈕按下一個新密碼。客戶端可以在兩次登錄嘗試之間按下按鈕幾次。伺服器“打賭”客戶端在嘗試再次登錄之前不會按下按鈕超過 100 次:所以伺服器使用 $ w = 100 $ . 如果您讓您 3 歲的侄子玩一整個下午的 HOTP 設備,很可能它會失去太多同步,並且無法再登錄。

伺服器想保留 $ w $ 小,因為:

  • 的原始效果 $ w $ 是,在任何時候,伺服器都會接受 $ w $ 可能的密碼;越高 $ w $ 也就是說,嘗試隨機密碼的攻擊者登錄的風險越高。
  • 如果密碼錯誤,伺服器上的計算成本與 $ w $ .

但 $ w $ 不能太小,因為不同步的設備意味著額外的成本(服務台的工作量更大),即使有過度活躍的嬰兒也不應該經常發生這種情況。

RFC 4226 不包含任何“完整性”一詞的實例,所以我不知道你的最後一個問題是關於什麼的。

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