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=30URI 方案为 otpauth://,类型为 totp(另一选项是基于计数器的 hotp),随后是标签和查询参数。身份验证器应用解析此 URI 后,只需一次扫描即可将其添加到用户的密码库。
标签
可选格式:Issuer:account@example.com。Issuer 前缀与查询参数 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 从不接触它。所有编码均在浏览器中完成。阅读完整隐私政策。