参考
- 动态令牌-(OTP,HOTP,TOTP)-基本原理
- 使用OTP动态口令(每分钟变一次)进行登录认证
- 动态口令技术介绍 (什么时动态口令、传统的静态密码有何缺点、其他解决方法、与USBKey相比)
- 数字身份认证技术面面观
- OTP的原理与实现
MOTP https://www.changingtec.com/motp.html
什么是OTP?
OTP即One-time Password,动态口令,又称一次性密码(相对于静态密码而言),是根据专门的算法每隔60秒生成一个与时间相关的、不可预测的随机数字组合,每个口令只能使用一次,每天可以产生43200个密码。OTP是一项安全便捷的帐号防盗技术,有效保护交易和登录的认证安全。
- 中文名 OTP
- 全称 One-timePassword
- 别名 动态口令
- 产生密码个数 43200个密码/天
- 用途 安全便捷的帐号防盗技术
- 目的 有效保护交易和登录的认证安全
- 形式 时间同步、事件同步、挑战/应答
- 缺点 根本上不能确定用户的身份
- 系统 认证服务器集群、令牌、服务站点
- 特点 无需记忆,双重保险,迅速知情
- 芯片 若使用硬件Token,一次性烧录的语音IC;若使用手机Token,则由App保存。
原理介绍
计算OTP串的公式
其中,OTP(K,C) = Truncate(HMAC-SHA-1(K,C))
K表示秘钥串;
C是一个数字,表示随机数;
HMAC-SHA-1表示使用SHA-1做HMAC;
Truncate是一个函数,就是怎么截取加密后的串,并取加密后串的哪些字段组成一个数字。
对HMAC-SHA-1方式加密来说,Truncate实现如下。
- HMAC-SHA-1加密后的长度得到一个20字节的密串;
- 取这个20字节的密串的最后一个字节,取这字节的低4位,作为截取加密串的下标偏移量;
- 按照下标偏移量开始,获取4个字节,按照大端方式组成一个整数;
- 截取这个整数的后6位或者8位转成字符串返回。
OTP从技术来分有三种形式, 时间同步、事件同步、挑战/应答。
(1) 时间同步
原理是基于 动态令牌和 动态口令验证服务器的时间比对,基于 时间同步的 令牌,一般每60秒产生一个新口令,要求服务器能够十分精确的保持正确的时钟,同时对其令牌的晶振频率有严格的要求,这种技术对应的终端是硬件令牌。
(2)事件同步
基于事件同步的令牌,其原理是通过某一特定的事件次序及相同的种子值作为输入,通过HASH算法中运算出一致的密码。
(3)挑战/应答
常用于的网上业务,在网站/应答上输入 服务端下发的 挑战码, 动态令牌输入该挑战码,通过内置的算法生成一个6/8位的随机数字,口令一次有效,这种技术目前应用最为普遍,包括刮刮卡、短信密码、动态令牌也有挑战/应答形式。
PS:刮刮卡的原理及实现
TOTP(Time-based One-Time Password)基于时间的动态口令
是时间同步,基于客户端的动态口令和动态口令验证服务器的时间比对,一般每60秒产生一个新口令,要求客户端和服务器能够十分精确的保持正确的时钟,客户端和服务端基于时间计算的动态口令才能一致。
HOTP (HMAC-based One-Time Password)基于HMAC的动态口令
是事件同步,通过某一特定的事件次序及相同的种子值作为输入,通过HASH算法运算出一致的密码。
RFC参考
RFC 4226 One-Time Password and HMAC-based One-Time Password.
RFC 6238 Time-based One-Time Password.
RFC 2104 HMAC Keyed-Hashing for Message Authentication.