动态密码-OTP
2021-05-25 10:28:36 阿炯

动态密码(英语:One-Time Password,简称OTP),又称一次性密码或单次有效密码,是指计算机系统或其他数字设备上只能使用一次的密码,有效期为只有一次登录会话或交易。OTP 避免了一些与传统基于(静态)密码认证相关系的缺点;一些实现还纳入了双因素认证,确保单次有效密码需要访问一个人有的某件事物(如内置 OTP 计算机的小钥匙挂件设备)以及一个人知道的某件事物(如 PIN)。


动态口令(OTP,One-Time Password)是使用密码技术实现的在客户端和服务器之间通过共享秘密的一种认证技术,是一种强认证技术,是增强目前静态口令认证的一种非常方便技术手段,是一种重要的双因素认证技术,动态口令认证技术包括客户端用于生成口令产生器的,动态令牌,是一个硬件设备,和用于管理令牌及口令认证的后台动态口令认证系统组成。

相对于静态密码,OTP 最重要的优点是它们不容易受到重放攻击(replay attack)。这意味着管理记录已用于登录到服务或进行交易的 OTP 的潜在入侵者将无法滥用它,因为它将不再有效。第二个主要优点是,使用多个系统相同(或类似)密码的用户,如果其中一个密码被攻击者获得,不是对所有的系统都容易变得脆弱。许多 OTP 系统也旨在确保会话不能轻易被截获或没有前一个会话期间产生不可预测数据的知识模拟,从而进一步减少攻击面。一次性密码是根据专门算法、每隔多少(60)秒生成一个不可预测的随机数字组合。

OTP 已被作为传统密码一个可能的替代以及增强方式讨论。不利的是,OTP 人类难以记忆,因此它们需要额外的技术来运作。一般的静态密码在安全性上容易因为木马与键盘侧录程序等而被窃取,而只要花上相当程度的时间,也有可能被暴力破解。为了解决一般密码容易遭到破解情况,因此开发出一次性密码的解决方案。

OTP分为两种技术算法HOTP(基于次数 RFC 4226)和TOTP(基于时间 RFC 6238)标准。而目前开源的Google Authenticator工具很好的实现了OTP移动端APP的使用与密钥管理。为了在企业运维安全加固需求可以开发自己的后端的OTP认证服务器和统一用户认证管理中心,结合Google的这个工具可快速整合用户的移动端动态密钥的生成。可适用的双因素场景:网络设备的认证(Radius协议)、企业内部开发的应用系统认证集成。


如上图,是一种基于时间同步的OTP计算方式,是通过客户端和服务器持有相同的密钥并基于时间基数,服务端和客户端采用相同的Hash算法,计算出长度为六位的校验码。当客户端和服务端计算出的校验码相同是,那么验证通过。由于客户端需要存储密钥和计算校验码的载体,Google Authenticator提供了手机端的APP进行密钥存储和校验码计算。下面我们以这两款客户端为例,实现在应用采用OTP进行权限验证,主要流程如下图:

 
动态密码的产生方式,主要是以时间差做为服务器与密代码生成器的同步条件。在需要登录的时候,就利用密代码生成器产生动态密码,OTP一般分为计次使用以及计时使用两种,计次使用的OTP产出后,可在不限时间内使用;计时使用的OTP则可设置密码有效时间,从30秒到两分钟不等,而OTP在进行认证之后即废弃不用,下次认证必须使用新的密码,增加了试图不经授权访问有限制资源的难度。


OTP 从技术来分有三种形式, 时间同步、事件同步、挑战/应答。

(1)时间同步
原理是基于动态令牌和动态口令验证服务器的时间比对,基于时间同步的令牌,一般每60秒产生一个新口令,要求服务器能够十分精确的保持正确的时钟,同时对其令牌的晶振频率有严格的要求,这种技术对应的终端是硬件令牌。

(2)事件同步
基于事件同步的令牌,其原理是通过某一特定的事件次序及相同的种子值作为输入,通过HASH算法中运算出一致的密码。

(3)挑战/应答
常用于的网上业务,在网站/应答上输入服务端下发的挑战码,动态令牌输入该挑战码,通过内置的算法上生成一个6/8位的随机数字,口令一次有效,这种技术目前应用最为普遍,包括刮刮卡、短信密码、动态令牌也有挑战/应答形式。

优势

动态密码的解决方案有以下几个优点:
1)、解决用户在记忆与保存密码上的困难。
2)、由于密码只能使用一次,而且因为是动态产生,所以不可预测,也只有一次的使用有效性,可以大为提升使用的安全程度。

基于这些优点,有越来越多的银行金融业甚至是游戏业使用OTP解决方案,来提升保护其用户的安全性。

劣势

一次性密码多数需要手机号码收取短信,而电信商或服务供应商问题可能导致延迟收取或无法收取短信,会影响用家使用体验。

有多种工业标准算法,如SHA-1,可以生成OTP。所有这些算法都使用两个输入来生成OTP码:一个种子和一个移动因子。种子是在身份验证服务器上建立新帐户时创建的静态值(密钥)。虽然种子没有改变,但每次请求新的OTP时,移动因子都会改变。如何产生移动因子是HOTP和TOTP的最大区别。

HOTP

HOTP中的“H”表示基于散列的消息认证码(HMAC)。用外行的话说,基于HMAC的一次性密码算法(HOTP)是一种基于事件的OTP,其中每个代码中的移动因子基于一个计数器。


每次请求和验证HOTP时,移动因子都会基于计数器递增。生成的代码在您主动请求另一个代码并通过身份验证服务器验证之前是有效的。每次验证代码并且用户获得访问权限时,OTP生成器和服务器都会同步。Yubiko的Yubikey是使用HOTP的OTP生成器的一个例子。

Computes HMAC-based One-time Password (RFC 4226).

HOTP(K,C) = Truncate(HMAC-SHA-1(K,C))

Step 1: Generate an HMAC-SHA-1 value
Let HS = HMAC-SHA-1(K,C)

Step 2: Generate a 4-byte string (Dynamic Truncation)
Let Sbits = DT(HS)

Step 3: Compute an HOTP value
Let Snum = StToNum(Sbits)    # Convert S to a number in 0..2^{31}-1
Return D = Snum mod 10^Digit    # D us a number in the range 0..10^{Digit}-1


TOTP

基于时间的一次性口令(TOTP)是一种基于时间的OTP。TOTP的种子是静态的,就像HOTP一样,但是TOTP中的移动因子是基于时间的,而不是基于计数器的。


每个密码有效的时间量称为timestep。通常时间步长通常为30秒或60秒。如果您没有在该时间窗口中使用密码,它将不再有效,需要请求一个新密码才能访问相关应用程序。

Computes Time-based One-time Password (RFC 6238).

TOTP = HOTP(K,T)
T = (Current Unix time - T0) / X

动态密码技术选择(可混合使用)

 硬件令牌短信密码
安全性最高较高
便捷性最高
表现形式硬件,随身携带发送手机短信
移动办公100%解决方案需短信网关支持
实时性较高(依赖网关速率)