algorithm - 如何使用一个密码创建图钉(又名 Google 2-Factor-Auth)

标签 algorithm authentication passwords

也许你们中的一些人知道谷歌的 2-Factor-Authentication;首先谷歌生成一个固定密码(例如“abcd”)。 如果您登录,系统会要求您输入密码,应用程序可以生成该密码,或者您可以使用 10 个预设密码中的一个。有趣的是,您不必使用一个 pin,该应用程序会在不使用网络访问的情况下随机生成一个。

这是怎么做到的?我知道如何用一个特定的针来做,但你怎么能用几个“随机”针呢?

谢谢, 马克

最佳答案

这可以通过类似 HOTP 的系统实现(基于哈希的 OTP)。 The RFC详细解释它是如何工作的,但简而言之:

  1. 服务器生成随 secret 钥并与 OTP 生成器共享。
  2. 服务器和 OTP 生成器都将计数器初始化为 0。
  3. 当用户从 OTP 生成器请求新 key 时,它会增加计数器,计算 HMAC它使用共享 key ,并以指定方式对部分哈希进行编码,从而生成数字代码。
  4. 当服务器收到 OTP 代码时,它会执行相同的计算,如果匹配则接受它。如果没有,它会再次尝试使用其他几个(更大的)计数器 ID,以防用户跳过一个或多个 ID。

预先生成的 OTP 列表只是如上所述提前生成。

关于algorithm - 如何使用一个密码创建图钉(又名 Google 2-Factor-Auth),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6331247/

相关文章:

algorithm - 闭合多边形链与线的交点

algorithm - 三角形中的路径数

node.js - 浏览器上基于 token 的身份验证和 session /本地存储

authentication - 多个IdentityServer联合: Error Unable to unprotect the message.状态

ruby-on-rails - Authlogic 密码的安全性如何?

PHP 密码哈希 - PHPass

actionscript-3 - 如何根据光标位置检测旋转元素的元素转换类型(缩放、移动、旋转)?

arrays - 在 O(n) 时间内找到数组中的 10 个最大整数

authentication - JBoss 服务器上的客户端身份验证

asp.net - asp.net 文本框的默认值 -> TextMode = 密码