TOTP 2FA 二维码详解

深入解析 otpauth:// URI 格式、base32 密钥及 RFC 6238 TOTP 算法。

什么是 TOTP

TOTP (Time-based One-Time Password,RFC 6238) 是 Google Authenticator、Authy、1Password、Bitwarden 以及所有其他身份验证器应用背后的算法。它基于共享密钥和当前 Unix 时间,每 30 秒生成一个 6 位数字验证码。

otpauth URI

otpauth://totp/Issuer:account@example.com?secret=BASE32SECRET&issuer=Issuer&algorithm=SHA1&digits=6&period=30

URI 方案为 otpauth://,类型为 totp(另一选项是基于计数器的 hotp),随后是标签和查询参数。身份验证器应用解析此 URI 后,只需一次扫描即可将其添加到用户的密码库。

标签

可选格式:Issuer:account@example.comIssuer 前缀与查询参数 issuer 重复,但大多数应用都能识别两者。

密钥

base32 编码的字节串(A-Z 和 2-7,无填充)。建议至少 128 位,大多数服务器使用 160 位(32 个 base32 字符)。密钥绝对不要进行 URL 编码,保持原始 base32 格式即可。

算法、位数、周期

algorithm:SHA1(默认,所有平台均支持)、SHA256 或 SHA512。digits:6(默认)或 8。period:30 秒(默认)或 60。除非有充分理由,否则请保持默认值,部分身份验证器应用不支持非默认选项。

代码计算方式

每 30 秒间隔,验证器执行:HMAC-SHA1(secret, floor(unix_time / 30)),取 HMAC 最后 4 位作为动态偏移量,从该偏移处读取 4 字节,对 31 位进行掩码处理,然后对 106 取模,得到 6 位验证码。

用 Abundera QR 生成

打开 TOTP 生成器,填写发行方(您的品牌名称)、账户(用户的邮箱或用户名)以及 base32 密钥。算法/位数/周期的默认值几乎对所有服务器都适用。下载 PNG 后通过邮件或短信发送给用户,或将其嵌入您的注册流程。

隐私说明

您的 TOTP 密钥是服务器与用户之间的共享凭据,Abundera QR 从不接触它。所有编码均在浏览器中完成。阅读完整隐私政策