也许你们中的一些人知道谷歌的 2-Factor-Authentication;首先谷歌生成一个固定密码(例如“abcd”)。 如果您登录,系统会要求您输入密码,应用程序可以生成该密码,或者您可以使用 10 个预设密码中的一个。有趣的是,您不必使用一个 pin,该应用程序会在不使用网络访问的情况下随机生成一个。
这是怎么做到的?我知道如何用一个特定的针来做,但你怎么能用几个“随机”针呢?
谢谢, 马克
最佳答案
这可以通过类似 HOTP 的系统实现(基于哈希的 OTP)。 The RFC详细解释它是如何工作的,但简而言之:
- 服务器生成随 secret 钥并与 OTP 生成器共享。
- 服务器和 OTP 生成器都将计数器初始化为 0。
- 当用户从 OTP 生成器请求新 key 时,它会增加计数器,计算 HMAC它使用共享 key ,并以指定方式对部分哈希进行编码,从而生成数字代码。
- 当服务器收到 OTP 代码时,它会执行相同的计算,如果匹配则接受它。如果没有,它会再次尝试使用其他几个(更大的)计数器 ID,以防用户跳过一个或多个 ID。
预先生成的 OTP 列表只是如上所述提前生成。
关于algorithm - 如何使用一个密码创建图钉(又名 Google 2-Factor-Auth),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6331247/