TOTP 的安全問題
我對密碼學很陌生,我一直在研究 TOTP(基於時間的 OTP),雖然我了解了計算的工作原理,但我無法弄清楚為什麼使用 TOTP 會使系統更安全。
這是我所理解的。TOTP 用於 2FA,因此第一個因素是您的使用者名和密碼。正如我們所知,這本身並不是很安全,因此我們使用第二個因素,這裡是 OTP。
因此,對於 TOTP,伺服器和客戶端都有一個密鑰。所以我的問題是,如果攻擊者獲得了這個秘密的訪問權,他是否不能像我係統上的客戶端軟體一樣容易地生成 OTP,因為 HOTP(key,counter) 對所有人來說都是一樣的?所以為了確保 TOTP 有用,我必須確保客戶端的密鑰是安全的?假設我正在製作一個供公眾使用的軟體,它使用基於 TOTP 的身份驗證。那麼我會為每個客戶端附加一個不同的秘密並在伺服器端維護一個數據庫以匹配秘密伺服器端嗎?
如果不是,在這種情況下,在客戶端和伺服器上擁有相同秘密的安全方法是什麼?
所以我的問題是,如果攻擊者獲得了這個秘密的訪問權,他是否不能像我係統上的客戶端軟體一樣容易地生成 OTP,因為 HOTP(key,counter) 對所有人來說都是一樣的?
是的,如果攻擊者知道了您的共享秘密,他可以隨時計算 OTP。但這不太可能,因為每個秘密都是唯一的(不能重複使用,例如使用密碼)並且從不傳輸(除了最初的協議)直接破解伺服器或客戶端的令牌是獲得它的唯一可能性。
所以為了確保 TOTP 有用,我必須確保客戶端的密鑰是安全的?
正確的。
假設我正在製作一個供公眾使用的軟體,它使用基於 TOTP 的身份驗證。那麼我會為每個客戶端附加一個不同的秘密並在伺服器端維護一個數據庫以匹配秘密伺服器端嗎?
是的。每個使用者在您的服務上都有不同的密鑰。如果您將其儲存在數據庫中或通過某些確定性計算從主密鑰中獲取,則取決於您的實施。