我见过很多双因素身份验证应用程序,例如谷歌身份验证应用程序。
该应用程序离线工作,并且每 30 秒重置手机上的密钥。
那么服务器如何知道哪些密钥是有效的?
我无法理解这一点?
如果我自己创建这样一个应用程序。我怎样才能这样做?
Google 身份验证器使用基于时间的一次性密码算法。它使用当前时间和共享密钥来计算代码。只要设备和服务器设置了正确的时间,生成的代码就会有效。
Google 身份验证器使用 2 种不同的方法:
“基于时间”的版本(TOTP)非常容易保持同步。 (您的设备...和远程服务器...必须具有相同/正确的时间。)
“基于计数器”的版本 (HOTP) 保持同步(即使您的移动设备处于飞行模式)并以某种方式每 30 秒更新一次内部计数器...远程服务器也会执行相同的操作。
我只使用过 #1...因为 Google 不太清楚 #2 计数器如何在移动设备和远程服务器之间没有任何通信的情况下保持“同步”(每 30 秒更改一次)。
我知道,我迟到了,但我最近发布了一个关于“Google 身份验证器如何工作?”同一主题的视频。它深入回答了这个问题并探讨了 TOTP 协议背后的工作。