OTP时间延迟容忍

OTP(one-time password)最常见的形式是TOTP(Time-based one-time passwd),使用手机上的软件扫描二维码后,TOTP软件会自动刷新随机生成的密码,在登录时输入该密码进行验证。

这个功能有一个用户体验上的问题,由于服务器和手机软件上是通过时间窗口来同步的(通常为30秒)。

用户在手机上看到随机密码后,把它输入到页面上,点击提交,数据通过网络传到服务器端,这个过程是需要一段时间的,而服务器最后收到密码进行验证时,可能时间已经进入到了下一个窗口,从而导致验证失败。

另外,在OTP软件上通常都会显示当前密码的到期时间,在用户看到密码快要到期时,会很纠结是快速将密码输入进去还是等待其刷新新的密码。这个选择的过程也是很不友好的。

由于网络延迟始终存在,在rfc6238 5.2规范中明确建议,系统至少容忍一个时间窗口的延迟。

也就是在验证随机密码时,如果密码与当前时间窗口或者上一个时间窗口相同,都可以验证通过。

实际上微软,谷歌的网站上的OTP功能,都是遵循rfc6238规范的(时间窗口为30秒,容忍正负1个时间窗口),在使用时不必担心随机密码是否快要过期,因为刚刚过期的也可以通过验证。

一个小小的OTP功能,就能看出一家公司的产品技术水平。

comments powered by Disqus