两步验证,它是如何工作的?

时间:2013-11-28 12:55:32

标签: security authentication cryptography ruby-on-rails-4

因此,作为项目的一部分,我想实现一个两步认证系统(在rails中)

我理解它的原理,

=>客户:用户名和密码

< =服务器:生成PIN码并通过短信/电子邮件发送给客户

=>客户:输入PIN

< =服务器:正常验证客户端

现在我想知道的是基于网络的应用程序,例如rails,PIN需要在每个点保密,所以当从用户名/密码部分重定向到PIN部分时,我需要保留PIN码将代码秘密传递给系统的下一部分(PIN部分)

通过将PIN暂时存储在数据库中以及用户ID,这是唯一可行的方法吗?

1 个答案:

答案 0 :(得分:2)

不,不是那么。

有两种(最常用)类型的一次性密码(OTP,您的术语中的PIN):

  1. 基于时间
  2. 基于计数器
  3. 基于时间的(TOTP)根据当前时间(例如:1970.1.1 00:00的30秒间隔的数量)和一些共享秘密生成一些数字。当收到这样的一次性密码时,服务器会生成一个密码并检查它是否正确。

    在基于计数器的OTP中,您有一个计数器和一个密钥存储在靠近用户ID的数据库中,它用于生成OTP。它可以根据登录尝试递增。

    基于时间的令牌通常更好,因为它们不需要计数器同步(时间同步通常更容易)。最好的例子是Google Authenticator,它实现了RFC6238的标准TOTP。

    有一个Ruby OTP库声称与Google Authenicator兼容,您可能想尝试一下:link

    无法保证其安全性和/或质量,但看起来很有希望。