是的,它确实如你所说。该芯片是“防篡改”的,如果有人试图攻击它,它将擦除“种子”(密钥)。这通常通过使用用户不可更换的电池和“陷阱”来实现,一旦设备打开或芯片表面被移除,“陷阱”就会中断设备的电源。然后将密钥存储在 SRAM 中,需要电源来保存密钥。
关键是一个种子,它与当前时间以 60 秒为单位(实际上是当前 UNIX 时间戳/60)相结合,刷新代码。
不,设备不需要精确。相反,服务器将存储最后接受代码的时间。然后服务器会提前一分钟、前一分钟和当前时间接受一个代码,所以如果服务器的当前时间是 23:20,那么它将接受 23:19、23:20 和 23 的代码: 21.
此后,它将存储最后接受代码的时间,例如,如果接受了 23:21 的代码,则它将 23:21 存储在数据库中,并拒绝接受在 23:21 或更早时间生成的任何代码。
现在到有趣的部分:为了防止不精确的令牌与服务器不同步,如果需要在 23:20 时间接受 23:19 代码或 23:21 代码,服务器将存储在其数据库中。这将确保在下次登录时,服务器将使用步数更正代码。
假设您在时钟 23:20 使用 23:19 代码登录。服务器在其数据库中存储“-1”(如果它是 23:21 代码,它将在数据库中存储“+1”)。下次登录时,时钟是 23:40。然后服务器将接受 23:38、23:39 或 23:40 的代码。如果接受 23:38 的代码,它将在数据库中存储“-2”,在 23:39 将在数据库中保留“-1”,在 23:40 将在数据库中存储“0”。
这有效地确保了服务器与您的令牌保持同步。最重要的是,如果令牌“离服务器太远”(由于长时间未使用),系统允许重新同步。这可以由系统管理员完成,或者在要求令牌用户提供来自令牌的 2 个后续代码(如 23:20 和 23:21,或 19:10 和 19:11)时提供自助服务重新同步服务。请注意,服务器永远不会接受在“最后使用的令牌代码”时或之前生成的令牌代码(因为这将允许重用 OTP 代码)。重新同步完成后,令牌将存储与提供的 2 个令牌代码和当前服务器时间的差异,在重新同步中,搜索窗口可能像加/减 50 步(这将允许大约 0、
服务器可以通过生成 50 个先前代码和 50 个未来代码来检测去同步的令牌,如果指定的代码与之匹配,它将自动启动重新同步过程。很多时候,为了防止攻击者使用重新同步过程来查找有效代码,一旦帐户处于重新同步模式,不重新同步就无法登录,这将需要攻击者在代码之后或之前找到确切的代码。成立。