背景知识:
最近发现公司内部登录内网OA系统需要输入从公司开发的虎符小程序中获得一串验证码后完成二次验证才能给予登录,而公司的虎符小程序中生成验证码的逻辑就是TOTP
是什么:
OTP:One-time Password,译为一次性密码,也称动态口令。是使用密码技术实现的在客户端和服务器之间通过共享秘密的一种认证技术,是一种强认证技术,是增强目前静态口令认证的一种非常方便技术手段,是一种重要的双因素认证技术。
认证原理:
动态口令的基本认证原理是在认证双方共享密钥,也称种子密钥,并使用的同一个种子密钥对某一个事件计数、或时间值、或者是异步挑战数进行密码算法计算,使用的算法有对称算法、HASH、HMAC,之后比较计算值是否一致进行认证。可以做到一次一个动态口令,使用后作废,口令长度通常为6-8个数字,使用方便,与通常的静态口令认证方式类似.
实现方式:
- 时间同步(TOTP)
- 事件同步(HOTP)
- 挑战/应答(OCRA)
HOTP、TOTP工作原理
客户端和服务器事先协商好一个密钥K,用于一次性密码的生成过程。此外,客户端和服务器各有一个计数器C,并且事先将计数值同步。而Truncate是为了获得一个符合HTOP要求的值。
TOTP是HOTP的一个变种,将HOTP中的计数器C替换为依托时间的参数T,T是由当前时间(CurrentUnixTime、初始时间(T0)、步长(X)决定的。
TOTP的要求
- 客户端和服务器必须能够彼此知道或者推算出对方的Unix Time
- 客户端和服务器端必须共享一个密钥
- 算法必须使用HOTP作为其关键实现环节
- 客户端和服务器端必须使用相同的步长X
- 每一个客户端必须拥有不同的密钥
- 密钥的生成必须足够随机
- 密钥必须储存在防篡改的设备上,而且不能在不安全的情况下被访问或使用。
- 对该算法中T的实现必须大于int32,因为它在2038年将超出上限。
- T0和X的协商必须在之前的步骤中就已经做好了。
TOTP:Time-base One-time Password 基于时间的一次性密码,也称为时间同步的动态密码。
安全性考虑:
1、安全性分析:key必须具有足够的灵活性
2、时延兼容:由于网络原因,客户端生成的密码的时间可能和服务器接收密码的时间差距可能很大,两个时间可能不在一个步长里面,是否需要一个策略允许动态密码的传输延时。
3、步长的设置范围:默认推荐步长为30s。