> totp | authenticator | generator <

根據 Base32 金鑰產生以時間為基礎(TOTP)與以計數器為基礎(HOTP)的一次性密碼。可用來測試 2FA 設定、排查與驗證器 App 的驗證碼差異、建立 otpauth:// URI,全程在瀏覽器本機完成。

------

------

金鑰不會離開你的瀏覽器。不過仍請避免在公用電腦上貼上真實的正式環境金鑰。

OTPAUTH URI

需要用於驗證器 App 的 QR Code?請將 URI 貼到 QR Code 產生器

[01]

附倒數計時的即時驗證碼

貼上 Base32 金鑰即可看到目前與下一個驗證碼,每個週期自動更新,並以進度條顯示剩餘有效時間。

[02]

SHA-1、SHA-256、SHA-512

可選 6、7 或 8 位及任意週期。HMAC 透過 Web Crypto API 計算,與 RFC 4226 和 RFC 6238 的測試向量一致。

[03]

otpauth URI 建立與匯入

為驗證器 App 建立 otpauth:// URI,或匯入既有 URI 自動填入所有欄位。不會上傳任何資料。

>> 技術說明

一次性密碼的運作原理:

HOTP(RFC 4226)計算 HMAC(金鑰, 計數器),並將結果截斷為 6–8 位數字。TOTP(RFC 6238)是計數器為 Unix 時間除以週期(通常 30 秒)的 HOTP,因此驗證碼每個週期變化一次,雙方不必通訊即可得到相同結果。共用金鑰通常以 Base32 文字或內含 otpauth:// URI 的 QR Code 交換。

範例:

RFC 6238 test vector (SHA-1) secret = GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ time = 59 -> counter = 59 / 30 = 1 code (8 digits) = 94287082

為什麼使用此 TOTP 產生器:

  • >開發登入功能時測試與除錯雙重驗證
  • >查明驗證器 App 與伺服器驗證碼不一致的原因
  • >建立具有正確發行者、演算法、位數與週期的 otpauth:// URI
  • >透過 Unix 時間輸入欄核對固定時間點的驗證碼

>> 常見問題

問:TOTP 是如何運作的?

答:App 與伺服器共用一把金鑰。雙方都用金鑰與目前的時間步(Unix 時間除以週期,預設 30 秒)計算 HMAC,並截斷為 6 位驗證碼。只要兩邊時鐘一致,得到的驗證碼就相同。

問:在這裡輸入金鑰安全嗎?

答:計算完全在瀏覽器內透過 Web Crypto API 完成,不會向任何伺服器傳送資料。但 TOTP 金鑰就是你帳號的鑰匙:請勿在共用或不受信任的電腦上貼上真實的正式環境金鑰,除錯時請使用測試帳號。

問:為什麼我的驗證碼與驗證器 App 不一致?

答:最常見的原因是時鐘不準(TOTP 需要誤差在幾秒以內的準確時間)、演算法/位數/週期不同,或金鑰抄寫有誤。請確認選擇了絕大多數服務使用的 SHA-1、6 位、30 秒。

問:TOTP 和 HOTP 有什麼差別?

答:HOTP 使用的計數器只在驗證碼被使用時才遞增,因此驗證碼在用掉之前一直有效。TOTP 的計數器來自時鐘,驗證碼每個週期自動失效。在面向一般使用者的 2FA 中,TOTP 常見得多。

問:什麼是 otpauth:// URI?

答:它是啟用 2FA 時所掃描 QR Code 內的文字,例如 otpauth://totp/Example:user@example.com?secret=...&issuer=Example,包含金鑰、發行者、帳號,以及可選的演算法、位數與週期。貼到匯入欄即可擷取金鑰。

問:驗證器 App 支援哪些設定?

答:Google Authenticator 等許多 App 會忽略演算法、位數與週期參數,一律使用 SHA-1、6 位、30 秒。除非確定 App 與伺服器支援其他設定,否則請使用這些預設值。

HOTP 計數器達到最大值時會怎樣?

計數器使用精確的無符號 64 位整數,範圍為 0–18446744073709551615。達到最大值時不顯示下一組碼,遞增按鈕停用,不會回繞。匯入 HOTP URI 必須有一個明確的十進位計數器,不接受小數、指數寫法或重複參數。

其他語言