背景
前两天项目有个类似动态口令的功能要实现,团队最终决定使用OTP算法来实现:前端先向后端请求获取用户的密钥(secret),将之保存在缓存中,之后前端根据该secret,使用OTP算法中的TOTP方式生成6位动态密码,将6位动态密码传到后台验证。
OTP
1.1 简介
OTP(One-Time-Password):一次性密码,也称为动态口令。是使用密码技术实现的在客户端和服务端之间通过共享密钥的一种认证技术,是一种强认证技术,是增强目前静态密码口令认证的一种非常方便的技术手段,是一种重要的双因素认证技术。
1.2 OTP认证原理
动态口令的基本认证原理是在认证双方共享密钥,也称种子密钥,并使用同一个种子密钥对某一个事件计数、或时间值、或异步挑战数进行密码算法计算,使用的算法有对称算法、HASH、HMAC,之后比较计算值是否一致进行认证。可以做到一次一个动态口令,使用后作废,口令长度通常为6-8个数字,使用方便,与通常的静态口令认证方式类似。
1.3 OTP实现方式
- 时间同步(TOTP)
- 事件同步(HOTP)
- 挑战/应答(OCRA)
本文内容主要是小程序使用OTP算法踩坑总结,不对OTP算法的三种实现方式的工作原理进行详细介绍,有兴趣的朋友自行查找相关资料。
踩坑记录
2.1 后端使用的otp库说明
opt算法有许多现成的库可以直接调用&#x