Bootstrap

OTP概念及实现原理简析 安当加密

越来越多的信息系统基于安全的考虑加入了多因素认证的功能,实现多因素认证有多种方案,OTP就是其中一种实现相对简单便捷的方案。本文概要介绍了OTP的概念、原理和实现步骤。

一、什么是OTP

OTP:One Time Password,又称一次性口令、一次性密码、动态密码、单次有效密码。

OTP基于专门的算法每隔一定的时间间隔生成一个不可预测的随机数字组合。

OTP的密码有效期仅在一次会话或者交易过程中,因此不容易受到重放攻击。

OTP一般分为计次使用和计时使用两种,计次使用的OTP产出后,可在不限时间内使用;

计时使用的OTP则可设置密码有效时间,从30秒到两分钟不等,而OTP在进行认证之后即废弃不用,下次认证必须使用新的密码,降低了不经授权访问限制资源可能性。

获取一次性密码的方法一般有以下几种:

1、手机短信:这种方式非常普及,可用于信息系统登录,交易时二次验证,信息系统密码遗失时的找回验证等,因为手机的普及,这种方式非常普及,但对于中间人攻击抵抗性低。

2、手机令牌:手机上的APP,软件生成动态密码,用户在信息系统中输入后在服务端完成验证。也可以直接通过与服务端的交互更便捷完成验证过程。这种方式如果移动设备有系统漏洞,存在密钥泄露风险。更换手机时,也需要完成令牌的转移或在新手机上重新生成令牌。

3、硬件令牌:在网银业务中比较普遍,比如银行的U盾,在设定的大额交易场景下,需要使用硬件令牌生成动态口令完成身份确认。由于单独的硬件需要电池,存在寿命问题,令牌遗失一般也需要去营业网点注销后再重新申领。

4、纸张:某些系统采用预打印方式提供一次性密码,比较少见。

二、HOTP与TOTP的差异

HOTP:HMAC-based One-Time Password ,基于 HMAC 算法加密的一次性密码。事件同步,通过某一特定的事件次序及相同的种子值作为输入,通过 HASH 算法运算出一致的密码。

TOTP:Time-based One-Time Password写,基于时间戳算法的一次性密码。 时间同步,基于客户端的动态口令和动态口令验证服务器的时间比对,一般每 60 秒产生一个新口令,要求客户端和服务器能够十分精确的保持正确的时钟,客户端和服务端基于时间计算的动态口令才能一致。

OTP 基本原理计算 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 位转成字符串返回。

HOTP 只是将其中的参数 C 变成了随机数,一般规定 HOTP 的散列函数使用 SHA2,即:基于 SHA-256 or SHA-512 [SHA2] 的散列函数做事件同步验证;

TOTP 只是将其中的参数 C 变成了由时间戳产生的数字:

C = (T - T0) / X; T 表示当前 Unix 时间戳:T0 一般取值为 0,也就是 1970 年 1 月 1 日。X 表示时间步数,也就是说多长时间产生一个动态密码,这个时间间隔就是时间步数 X,系统默认是 30 秒;

三、OTP认证原理

下图展示了OTP认证的过程:

Step1:在服务器端:,将用户账号与令牌种子建立关联。

Step2:当用户登录时,输入账号和动态令牌口令并将其提交至服务器,对比校验完成认证过程。

在实际的业务部署中,为了用户使用的便捷性,可以采用消息推送确认的方式,只需要用户的手机令牌处于运行状态,即可免去输入认证码的过程。

四、OTP的实现

根据以上的介绍,一个信息系统要集成OTP的认证方式,需要完成以下的工作:

1、开发手机令牌

2、开发认证的服务端,服务端需要完成令牌种子生成、令牌种子分发、动态口令生成等功能。

3、在OTP认证的服务端需要将业务系统的用户与分发的令牌建立关联,这样才能完成最终的登录验证。

;