当电脑时钟偏差仅一秒时会发生什么

你的电脑或智能手机的时钟看起来非常准确。然而,计算机内置的时钟(晶体振荡器)每天会偏差几秒到几十秒。如果不加以校正,TLS 证书验证会失败,双因素认证的一次性密码会失效,日志时间戳变得不可靠,分布式系统的数据完整性会崩溃。

NTP(网络时间协议)就是通过互联网校正这种"时钟漂移"的协议。

NTP - 自 1985 年以来守护时间的协议

NTP 由 David L. Mills 于 1985 年设计,是至今仍在运行的最古老的互联网协议之一。NTP 使用称为 Stratum 的层级结构运作。

  • Stratum 0:原子钟和 GPS 接收器等高精度时间源。不直接连接到网络
  • Stratum 1:直接连接到 Stratum 0 的 NTP 服务器。被称为"主参考时钟"
  • Stratum 2:从 Stratum 1 获取时间的服务器。许多公共 NTP 服务器在此层级运行
  • Stratum 3 及以下:依次从下层服务器获取时间的服务器。最大到 Stratum 15

NTP 不是简单地复制服务器的时间,它测量并补偿网络延迟。它从多个服务器获取时间,并使用算法统计选择最可靠的值。

时钟偏差会导致什么问题

TLS 证书验证

TLS 证书有有效期(Not Before / Not After)。如果客户端的时钟严重偏差,可能会将有效证书判定为"已过期",或将尚未生效的证书判定为"有效"。证书透明度机制也依赖于准确的时间。

TOTP(基于时间的一次性密码)

Google Authenticator 等认证器应用根据当前时间生成每 30 秒变化一次的代码。如果服务器和客户端的时钟相差超过 30 秒,代码就不会匹配,登录变得不可能。

Kerberos 认证

Active Directory 中使用的 Kerberos 认证默认不容忍超过 5 分钟的时钟差异。如果企业网络中的 NTP 宕机,所有员工都可能被锁定。

分布式数据库

Google Spanner 等分布式数据库通过时间确定事务顺序。Google 开发了名为 TrueTime 的专有时间同步系统,结合原子钟和 GPS 实现微秒级精度。

日志可靠性

调查安全事件时,需要按时间顺序关联多台服务器的日志。如果时钟不同步,就无法准确重建事件之间的因果关系。

闰秒 - 时间同步的最大敌人

由于地球自转速度不恒定,偶尔会插入"闰秒"来校正原子钟时间(UTC)与基于地球自转的时间之间的偏差。在 23:59:59 之后添加一个通常不存在的秒,23:59:60。

在 2012 年闰秒插入期间,Linux 内核的一个 Bug 导致 Reddit、Gawker、LinkedIn 等服务发生故障。许多软件假设"一分钟有 60 秒",没有考虑第 61 秒的情况。

为此,Google 开发了一种叫"闰秒涂抹"的技术。不是一次性插入闰秒,而是在 24 小时内逐渐调整时间。2022 年,国际度量衡大会 (CGPM) 通过决议,将在 2035 年前废除闰秒。

总结

时间同步是互联网"隐形基础设施"中最不起眼的部分之一,但其重要性不可估量。TLS、2FA、Kerberos、分布式数据库、日志分析,所有这些都依赖于准确的时间。当你在 IP 确认酱上查看连接信息时,支撑那次通信的 TLS 握手也依赖于精确的时间同步。

本文相关术语

TLS 证书有效期验证需要准确的时间。时钟漂移会导致证书错误。 双因素认证 TOTP 根据当前时间生成代码,时钟漂移可能导致无法登录。 IP 地址 连接 NTP 服务器时也使用 IP 地址。 DNS DNSSEC 签名验证也需要准确的时间。 HTTPS 通过 TLS 证书有效期检查依赖于时间同步。