Hotp
HOTP 如何保持同步?
我對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 不包含任何“完整性”一詞的實例,所以我不知道你的最後一個問題是關於什麼的。