标签:
引用:http://www.cnblogs.com/wangxin201492/p/5030943.html
OTP(One-Time Password)
译为一次性密码,也称动态口令。是使用密码技术实现的在客户端和服务器之间通过共享秘密的一种认证技术,是一种强认证技术,是增强目前静态口令认证的一种非常方便技术手段,是一种重要的双因素认证技术。
动态口令的基本认证原理是在认证双方共享密钥,也称种子密钥,并使用的同一个种子密钥对某一个事件计数、或时间值、或者是异步挑战数进行密码算法计算,使用的算法有对称算法
、HASH
、HMAC
,之后比较计算值是否一致进行认证。可以做到一次一个动态口令,使用后作废,口令长度通常为6-8个数字,使用方便,与通常的静态口令认证方式类似.
TOTP
)HOTP
)OCRA
)HOTP(HMAC-base On-Time Password)
译为基于HMAC的一次性密码,也称事件同步的动态密码。
$$ HTOP(K,C) = Truncate(HMAC-SHA-1(K,C))$$
客户端和服务器事先协商好一个密钥K
,用于一次性密码的生成过程。此外,客户端和服务器各有一个计数器C
,并且事先将计数值同步。而Truncate
是为了获得一个符合HTOP
要求的值。
TOTP(Time-base One-Time Password)
译为基于时间的一次性密码,也称时间同步的动态密码.
$$TOTP = Truncate(HMAC-SHA-1(K,T))$$TOTP
是HOTP
的一个变种,将HOTP
中的计数器C
替换为依托时间的参数T
,T是由当前时间(CurrentUnixTime
、初始时间(T0)、步长(X)决定的。即:
$$ T = (Current Unix time - T0) / X $$
CurrentUnixTime
:当前的Unix时间。T0
: 开始计步初始化时间,默认为0X
: 步长,默认情况下为30sint32
,因为它在2038年将超出上限。该算法的安全性和健壮性完全依赖于其关键实现环节HOTP
。
安全性分析的结果是:在所有的测试中,该算法的结果均匀的、独立的分布。这个分析显示,最好的攻击和破解TOTP(HOTP)
的方法是暴力破解。而在算法要求环节,要求key必须有足够的随机性。
在同一个步长内,动态密码生成的结果是一样的。当一个验证系统获得这个动态密码的时候,它并不知道动态密码的生产者是在哪个步长内产生的密码。由于网络的原因,客户端生成密码的时间和服务器接受密码的时间可能差距会很大,很有可能使得这2个时间不在同一个步长内。当一个动态密码产生在一个步长的结尾,服务器收到的密码很有可能在下一个步长的开始。
验证系统应该设置一个策略允许动态密码的传输时延,不应该只验证当前步长的动态密码,还应该验证之前几个步长的动态密码。但越大的传输时延窗口设置,就会带来越大的风险被攻击,我们推荐最多设置一个时延窗口来兼容传输延时。
步长大小的设置,直接影响安全性和可用性:
30s
,这个默认值是在权衡了安全性和可用性的基础上提出的。标签:
原文地址:http://www.cnblogs.com/50614090/p/5848409.html