为什么除非系统范围内启用地理定位,否则 2FA 会失败?
提供的解决方案(https://debiankalilinuxtips.substack.com/p/automatic-datetime-sync) 的日期/时间同步无法解决需要全系统地理位置同步的 2fa 问题。
目前找到的唯一解决方案是打开系统范围内的地理位置->允许系统同步->关闭地理位置->继续访问网站并使用 2FA。
这不是 vpn 或隧道的问题。系统同步到 vpn/vps 出口节点的地理位置时间,并且 2fa 对该地理位置感到满意。物理系统位置和同步 vpn 虚拟位置之间的时间差为 4 小时。如果 vpn 是 2fa 系统同步要求的原因,那么 4 小时的差异将阻止 2fa 工作。
有人可以从基本层面解释为什么系统范围的地理位置同步是必要的,以及是否可以进行 cli 欺骗以允许 2fa 顺利运行,但不将整个系统暴露于地理位置。
所有关于 2fa 的“白皮书”都解释说,它的工作原理是将当前时间添加到预定义的种子中,从而生成一个唯一的 6 位代码,该代码仅在短时间内有效。这并没有解释哪些系统详细信息是必要的。请解释为什么需要/如何将区域时区传递给 2fa,而不是检查本地系统详细信息。
$ timedatectl
Local time: Fri 2022-01-28 07:41:04 MST
Universal time: Fri 2022-01-28 14:41:04 UTC
RTC time: Fri 2022-01-28 14:41:04
Time zone: America/Phoenix (MST, -0700)
System clock synchronized: no
NTP service: n/a
RTC in local TZ: no
答案1
好的。
因此,您所引用的 2FA 工具(包括 Google Authenticator)都使用 TOTP。这是一个基于(时间)的(O)ne-(时间)时间(密码)。
它的工作原理是,在设置 TOTP 时,您的计算机和服务器之间共享一次密钥或“秘密”(这就是 QR 码的用途)。然后双方执行基于当前时间和该秘密的算法,以便:
- 即使有人看到输出(您在 2FA 提示中输入的信息),他们也无法预测下一个输出。
- 输出随时间而变化,通常每分钟一次或两次(这就是为什么每次输入都会得到一组不同的数字)。
由于服务器和计算机是分开工作的,因此要获得相同的答案,它们必须使用相同的基线信息,这意味着相同的秘密(密钥)和相同的时间。一般来说,即使我们使用不同的数字(24 小时制与 12 小时制,带 AM/PM)和不同的时区,我们对现在的时间都有相同的理解。TOTP 计算使用自 1970 年 1 月 1 日午夜以来的秒数(UTC 时区)。(请参阅此处的文档,第 4.2 节:[https://tools.ietf.org/id/draft-mraihi-totp-timebased-08.html#rfc.section.4])
现在,您所引用的自动时间设置功能(systemd timesyncd 功能或 NTP)足以准确设置时间以使用 TOTP。任何时区选择都无关紧要,无论是自动还是手动(除非您在更改时区时更改时间,而不是让计算机更新时钟)
如果您愿意耐心地将计算机时钟设置为几秒钟之内的时间,并且如果它能够很好地保持准确的时间,那么您可能可以不使用自动时间同步,而仍能使用 TOTP 工作,但在这种情况下,您还需要小心选择的时区(以便计算机知道自 1970 年 1 月 1 日午夜 UTC 以来的秒数),并且您可能需要确保时钟手动保持准确(就像您需要手动更改慢或快的挂钟一样)
请注意,您不必使用你的时区,但你必须确保设置的时间是准确的现在,在您设置的时区内。