参考

  1. 动态令牌-(OTP,HOTP,TOTP)-基本原理
  2. 使用OTP动态口令(每分钟变一次)进行登录认证
  3. 动态口令技术介绍 (什么时动态口令、传统的静态密码有何缺点、其他解决方法、与USBKey相比)
  4. 数字身份认证技术面面观
  5. OTP的原理与实现
  6. MOTP https://www.changingtec.com/motp.html

    什么是OTP?

    OTP即One-time Password动态口令,又称一次性密码(相对于静态密码而言),是根据专门的算法每隔60秒生成一个与时间相关的、不可预测的随机数字组合,每个口令只能使用一次,每天可以产生43200个密码。OTP是一项安全便捷的帐号防盗技术,有效保护交易和登录的认证安全。

    • 中文名 OTP
    • 全称 One-timePassword
    • 别名 动态口令
    • 产生密码个数 43200个密码/天
    • 用途 安全便捷的帐号防盗技术
    • 目的 有效保护交易和登录的认证安全
    • 形式 时间同步事件同步挑战/应答
    • 缺点 根本上不能确定用户的身份
    • 系统 认证服务器集群、令牌、服务站点
    • 特点 无需记忆,双重保险,迅速知情
    • 芯片 若使用硬件Token,一次性烧录的语音IC;若使用手机Token,则由App保存。

      原理介绍

      计算OTP串的公式
      1. 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.