Hmac
使用具有相同密鑰和不同時間計數器的 TOTP 是否安全?
如果我使用 TOTP 生成具有不同“到期”時間的程式碼,對 HMAC 使用相同的密鑰,我會產生某種弱點嗎?
是的,根據RFC 6238生成 TOTP 就可以了;這是因為在生成 HMAC 之前,時間與秘密相結合。這意味著實際上不可能僅根據密鑰導出時間(或有關時間的資訊,例如時差),因為使用的散列算法中存在雪崩效應。
目前還不清楚您要做什麼,所以我無法給出明確的答案。但是,在您沒有提供更多詳細資訊的情況下,預設答案是,無論您在做什麼,它都可能不安全。
具體來說,TOTP ( RFC 6238 ) 密鑰是從兩個輸入生成的:
- 一個固定的密鑰,和
- 一個增量計數器,計算自(任意)開始紀元以來經過的(任意)時間步數。
雖然原則上您可以為兩個計數器序列選擇紀元和時間步長值,以便計數器值在可預見的將來不會重疊,但這並不是 TOTP 的用途。事實上,有一些 TOTP 實現甚至不允許您從預設值更改紀元或時間步長。
相反,確保兩個 TOTP 輸出序列不會重疊(例如,為不同目的生成不同的密碼)的正確且安全的方法是為它們使用單獨的密鑰。
請注意,出於某些目的,使用密鑰導出函式(例如 HKDF ( RFC 5869 ))從單個主密鑰導出單獨的密鑰可能很方便,該函式基於相同的加密工具(散列函式和 HMAC) TOTP 是。例如,如果您的伺服器需要與許多客戶端進行身份驗證,而不為每個客戶端儲存單獨的 TOTP 密鑰,您可以從儲存在伺服器上的主密鑰派生每個客戶端密鑰,從而允許伺服器重新派生客戶端密鑰根據需要。