什么是一次性密码 OTP ?
一次性密码(One Time Password),简称 OTP,是只能使用一次的密码。每次做身份认证时都会生成一个新的密码,在使用一次之后立即失效,不能重复使用。这种密码只能使用一次,因此即使攻击者能够窃取到密码,也无法再次使用该密码进行身份认证。
一次性密码的优点
- 安全性高,一次性密码只能使用一次,所以即使攻击者能够截获密码,也无法再次使用该密码进行第二次认证。
- 易于使用,一次性密码通常是通过短信、电子邮件或专用的身份验证应用程序发送给用户的,通常是4到8位的数字、字母或数字字母组合,用户只需要输入收到的密码并且很方便输入。
- 无需记忆,与传统的静态密码不同,用户不需要记住一次性密码,降低了用户的认知负担,并减少了因忘记密码而导致的问题。
接下来看一下一次性密码实现的几种方式。
基于时间的一次性密码(Time-based One-Time Password,TOTP)
密码的有效性依赖当前的时间,每个密码都有一个固定的有效期,例如30秒或60秒。在这个时间窗口结束后,密码会自动失效,系统会生成一个新的密码。
这种方法的优点是不依赖于网络连接,因此即使在没有网络连接的情况下,用户也可以生成密码。这种方法的缺点是对时间的同步要求较高,需要客户端和服务器之间的时间保持精确同步,并且用户必须在指定的时间窗口内输入密码,否则密码就会失效。
之前有写过一篇文章对 TOTP 进行了详细的讲解,可以参考《基于时间的一次性密码 TOTP 详解》。
基于哈希的一次性密码(Hash-based One-Time Password,HOTP)
密码的生成依赖一个密钥和一个计数器。每当用户请求一个新的密码时,计数器就会增加,然后使用哈希函数和密钥生成一个新的密码。这种方法的优点是不依赖时间,因此用户可以在任何时间输入密码。相应的缺点是如果计数器的值在服务器和用户设备之间不同步,就可能导致问题。
基于短信的一次性密码(SMS-based One-Time Password,SOTP)
密码需要通过短信发送给用户,当用户需要进行身份认证时,系统会发送一个密码到用户的手机。这种方法的优点是很方便直观,相应的缺点是依赖手机网络,如果用户没有手机信号或者手机被盗,就无法接收密码。此外,这种方法也容易受到短信劫持的攻击。
基于电子邮件的一次性密码(Email-based One-Time Password,EOTP)
密码通过电子邮件发送给用户。与基于短信的一次性密码类似,这种方法的优点是很容易理解和使用。相应的缺点是依赖电子邮件,如果用户无法访问自己的电子邮件,就无法接收密码。此外,这种方法也容易受到电子邮件劫持的攻击。
小结
理论上来说,一次性密码是最安全的。但目前还没有理想的一次性密码的实现方式,大多数情况下,一次性密码的使用场景还是用于辅助身份认证。