距重新生成 6s · RFC 6238 TOTP · 在本地计算——密钥绝不会离开浏览器。
功能说明
从 Base32 密钥生成基于时间的一次性密码(TOTP,RFC 6238)- 与认证器应用用于 2FA 的算法相同。算法(SHA1、SHA256、SHA512)、位数(6 或 8 位)和以秒为单位的周期都可以调整。进度条随周期逐渐耗尽;清空的瞬间,新的验证码出现。显示每秒刷新一次。
使用方法
- 输入 2FA 设置中的 Base32 secret -
otpauth://二维码背后的那串字符。 - 把算法、位数和周期设置为与服务端配置一致。默认值(SHA1、6 位、30 秒)适用于大多数服务。
- 盯住进度条,在验证码仍有效时复制它。
大号显示用细空格分隔数字以便阅读(123 456),但 Copy 复制的是原始数字(123456),因此粘贴的内容不会被破坏。分享链接编码了密钥和全部选项 - 请把它当作密码对待,因为其中的密钥能打开你的账户。
示例
- 密钥
JBSWY3DPEHPK3PXP、SHA1、6 位、30 秒:一个每 30 秒重新生成的滚动 6 位验证码。 - 非 Base32 字符串(小写字母、空格、位置不对的
0或1)显示Invalid Base32 secret.而不是验证码。
TOTP 的工作原理
TOTP 验证码是一个以时间为键的
HMACHMACA construction that combines a hash function with a secret key to prove a message is intact and came from someone holding the key.
。你的应用和服务器持有相同的密钥并读取相同的时钟;从这两个输入,双方派生出相同的短数字。密钥只在设置时经过网络一次,此后再也不会。配方,一步一步:
T = floor(unix_time / period) # 30 s steps: T advances every 30 s
mac = HMAC(secret, T as 8 big-endian bytes) # SHA1, SHA256, or SHA512
off = last byte of mac, low 4 bits # an offset (0..15) into the digest
num = 4 bytes at that offset, top bit cleared, mod 10^digits
code = num, zero-padded to the digit count
- 验证码为什么会过期。 周期结束后
T改变,HMACHMACA construction that combines a hash function with a secret key to prove a message is intact and came from someone holding the key.
的输入随之改变,验证码也就改变。没有任何东西删除旧验证码;只是新的时刻哈希出了一个新的数字。 - 时钟漂移为什么会让登录失败。 服务器通常接受当前步长加减一步之内的验证码。偏移超出这个范围,你算出的验证码就属于服务器拒绝的那个步长。
- 密钥为什么是 Base32。 Base32 只使用 A-Z 和 2-7:没有小写、没有
0、没有1、没有易混淆的字符对。人可以毫无歧义地照着二维码的回退文本重新输入设置密钥。
补充说明
- 私密: 密钥只在本地用于计算验证码 - 永远不会离开浏览器。
- 本工具生成验证码;它不是密码库。请把真实密钥保存在密码管理器中。
- 8 位和 SHA256/SHA512 供有此类要求的服务使用(RFC 6238 允许全部三种算法)。大多数服务使用默认值。
- 相关工具: Password Strength Analyser、
HMACHMACA construction that combines a hash function with a secret key to prove a message is intact and came from someone holding the key.
Generator、Password Generator。