2af动态密码¶
python 实现的动态密码
基本概念¶
共享密钥(Secret Key): TOTP算法基于一个共享的密钥,该密钥在服务提供商和用户设备之间进行共享。这个密钥用于生成和验证验证码。
时间戳(Timestamp): TOTP算法使用时间戳作为输入之一。时间戳通常表示为从某个特定时间点(例如UNIX纪元)开始经过的秒数。
哈希函数(Hash Function): TOTP算法使用哈希函数对共享密钥和时间戳的组合进行哈希运算,以生成验证码。
时间步长(Time Step): TOTP算法中的时间步长定义了验证码的变化频率。在实践中,常用的步长是30秒或60秒。
标准工作原理¶
1、生成密钥(Secret Key): 服务提供商生成一个随机的密钥,并将其与用户设备共享。
2、相同的算法(服务商、用户)生成验证码(One-Time Password,OTP):默认sha1算法,一般有算法,如sha256、sha512、gost34.11.256 等。
首先,计算当前时间戳除以时间步长(Step Size)的余数,以确定当前时间窗口。
使用当前时间窗口的时间戳和共享密钥作为输入,通过哈希函数生成验证码。
哈希函数的输出通常是一个固定长度的哈希值,然后从中提取一段数字作为验证码。
3、验证验证码:
用户提供其设备生成的验证码。发送给服务商。
如果服务器生成的验证码与用户提供的验证码相匹配,则验证成功。
我的使用¶
密钥仅仅保留在系统、当用户执行某些 通过 GET 操作向系统提交表单时,表单里自动附加一份2AF验证码。
即可简单保障 get 请求的安全性,
下方简单演示了如何使用 pyotp 库生成2AF密钥和验证码,以及验证过程