Cecilia Asked: 2023-02-27 22:40:55 +0800 CST2023-02-27 22:40:55 +0800 CST 2023-02-27 22:40:55 +0800 CST 可能受时间跳跃严重影响的软件示例有哪些? 772 chrony 文档警告 警告:某些软件会受到系统时间中此类跳跃的严重影响。(这就是 chronyd 正常使用回转的原因。)文档 但是文档没有给出示例。将受到严重影响的软件示例有哪些?操作系统或任何后台进程是否存在风险? chrony 7 个回答 Voted Best Answer Romeo Ninov 2023-02-27T22:59:10+08:002023-02-27T22:59:10+08:00 这是一个悬而未决的问题,但让我举一些例子: 数据库——它们中的大多数依赖于大量的精确时间来存储记录、索引等 安全 - 精确的时间对于安全将操作映射到时间和间隙非常重要,否则不接受时间重复 数字签名 - 通常签名文档的一部分是时间戳,所以错误的时间可能会使签名无效 调度软件 - 可能会跳过或重复两次作业,具体取决于时间跳跃方向。 集群软件——可能任何集群都需要同步,一个或多个节点的任何跳转都可能产生不可预测的结果。 Guntram Blohm 2023-02-28T19:08:49+08:002023-02-28T19:08:49+08:00 所有与实时硬件交互的软件。如果你有一个烤面包 20 秒的烤面包机,而且它的软件愚蠢到可以对照挂钟,如果你在等待烤面包时校正时钟,你得到的面包要么是白面包,要么是烧焦的面包。 实际上,控制任何类型工业设备的所有应用程序都需要精确计时,例如,“打开阀门 5.3 秒以获得正确的流体量”。关闭超过几毫秒会毁掉你的产品。 使用电机定位任何东西的应用程序将使用步进电机(速度较慢)或末端开关来确定何时停止。但通常情况下,您不会在每个重要位置都有开关,因此您会执行一些“xm/s 用于 A 毫秒,然后 ym/s 用于 B 毫秒”的逻辑。现在想象你的 NTP 守护进程在这个逻辑运行时调整时间甚至一毫秒...... Selali Adobor 2023-03-01T08:37:51+08:002023-03-01T08:37:51+08:00 我最近遇到了一个可追溯到 1999 年的错误,该错误同时影响 JVM 和 Android 运行时:https://bugs.java.com/bugdatabase/view_bug.do ?bug_id=4290274 ... 当使用 scheduleAtFixedRate() 安排任务后一分钟将系统时钟提前设置时,会(意外地)触发两次额外的执行。 我在一台以 1970 年纪元作为当前时间开始的设备上工作,然后稍后收到正确的网络时间。有时,第 3 方库会在设置时间之前初始化,导致它经历 50 年的时间跳跃。 结果是scheduleAtFixedRate试图赶上大约 50 年的调用……这大约是 2700万次背靠背调用,它们之间没有延迟。 这将导致 GC 失控并通常使系统陷入停滞,直到它重新启动 Kingsley 2023-03-01T18:06:35+08:002023-03-01T18:06:35+08:00 我们遇到了车载嵌入式系统的问题,其中时钟会显着浪费时间(由于电气问题)。但是无线连接时断时续,所以时间只是偶尔校正一下。结果是,当车辆最终接收到无线信号,然后接收到 NTP 更新时,时钟将显着向前跳动。 各种系统正在检查某些事物的“最后有效”时间,例如 GPS 读数等。尽管仅在 0.5 秒前更新,但突然间所有这些都“过时”了。 显然,重新配置可以解决问题,但这是一个问题。 Radovan Garabík 2023-03-02T18:03:57+08:002023-03-02T18:03:57+08:00 Dovecot IMAP 服务器受到影响,并且(在旧版本中)如果它检测到系统时间向后跳转,它会(故意)自杀。在 v2.0 中,它至少尝试补救这种情况。 请参阅https://wiki.dovecot.org/TimeMovedBackwards Halfgaar 2023-03-02T18:32:16+08:002023-03-02T18:32:16+08:00 它已经在评论中,但我想我也会将其作为答案发布: 本应使用稳定单调时钟但未使用的应用程序也会受到影响。例如,如果软件使用当前时间检查客户端保持活动状态,则时间跳跃可能会踢出所有客户端。 我经常看到软件使用了错误的时钟。 filo 2023-03-02T18:53:10+08:002023-03-02T18:53:10+08:00 很多例子... 图表 1 - Cloudflare闰秒漏洞 图表 2 - F-22 猛禽日期变更线漏洞 图表 3 - 787 梦想飞机发动机控制器时间环绕(时间归零的极端示例)
这是一个悬而未决的问题,但让我举一些例子:
所有与实时硬件交互的软件。如果你有一个烤面包 20 秒的烤面包机,而且它的软件愚蠢到可以对照挂钟,如果你在等待烤面包时校正时钟,你得到的面包要么是白面包,要么是烧焦的面包。
实际上,控制任何类型工业设备的所有应用程序都需要精确计时,例如,“打开阀门 5.3 秒以获得正确的流体量”。关闭超过几毫秒会毁掉你的产品。
使用电机定位任何东西的应用程序将使用步进电机(速度较慢)或末端开关来确定何时停止。但通常情况下,您不会在每个重要位置都有开关,因此您会执行一些“xm/s 用于 A 毫秒,然后 ym/s 用于 B 毫秒”的逻辑。现在想象你的 NTP 守护进程在这个逻辑运行时调整时间甚至一毫秒......
我最近遇到了一个可追溯到 1999 年的错误,该错误同时影响 JVM 和 Android 运行时:https://bugs.java.com/bugdatabase/view_bug.do ?bug_id=4290274
我在一台以 1970 年纪元作为当前时间开始的设备上工作,然后稍后收到正确的网络时间。有时,第 3 方库会在设置时间之前初始化,导致它经历 50 年的时间跳跃。
结果是
scheduleAtFixedRate
试图赶上大约 50 年的调用……这大约是 2700万次背靠背调用,它们之间没有延迟。这将导致 GC 失控并通常使系统陷入停滞,直到它重新启动
我们遇到了车载嵌入式系统的问题,其中时钟会显着浪费时间(由于电气问题)。但是无线连接时断时续,所以时间只是偶尔校正一下。结果是,当车辆最终接收到无线信号,然后接收到 NTP 更新时,时钟将显着向前跳动。
各种系统正在检查某些事物的“最后有效”时间,例如 GPS 读数等。尽管仅在 0.5 秒前更新,但突然间所有这些都“过时”了。
显然,重新配置可以解决问题,但这是一个问题。
Dovecot IMAP 服务器受到影响,并且(在旧版本中)如果它检测到系统时间向后跳转,它会(故意)自杀。在 v2.0 中,它至少尝试补救这种情况。
请参阅https://wiki.dovecot.org/TimeMovedBackwards
它已经在评论中,但我想我也会将其作为答案发布:
本应使用稳定单调时钟但未使用的应用程序也会受到影响。例如,如果软件使用当前时间检查客户端保持活动状态,则时间跳跃可能会踢出所有客户端。
我经常看到软件使用了错误的时钟。
很多例子...