时序噪声 CPU 频率调节策略
概述
时序噪声策略是一种 CPU 频率调节策略,它会定期选择随机的性能状态(P-state)。其目的是通过抖动 CPU 时钟来注入时序可变性,从而干扰那些假设频率稳定的简单周期计数或挂钟测量。
这是一种随机化 P-state 策略。它不是通用的侧信道对策。
主要缓解措施
经过侧信道泄漏审查的恒定时间和恒定流实现,仍是抵御时序攻击的主要缓解措施。该策略不能取代这些做法。它最多只能增加某一类测量的复杂度。
攻击者模型
该策略考虑的攻击者具有以下行为:
通过周期计数器、挂钟定时器或类似的软件可见时间戳观察相对执行时间
依赖稳定的 CPU 频率,以便指令数或数据相关路径的微小差异在不同试验之间仍可区分
随机化 P-state 选择无法抵御此类攻击。只要有足够多的样本,攻击者通常可以通过平均来消除噪声。该策略只会让这些测量变得更不方便、更难以重复。
用例
当应用希望在已经可靠的软件之上,将额外的时序可变性作为第二层防护时,此策略可能会很有用。应将其视为干扰某些分析的手段,而不是独立的安全解决方案。
它不适合以下场景:
需要确定性执行时间的硬实时系统
将时序可预测性作为安全案例一部分的安全相关系统
无法容忍意外缓慢 P-state 的延迟敏感工作负载
严格的功率预算设计,因为频繁的 P-state 变化可能会增加平均功耗
配置
启用 CPU 频率子系统并选择时序噪声策略:
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_POLICY_TIMING_NOISE=y
该策略使用标准的 CPU 频率子系统更新间隔,可通过以下配置设置:
CONFIG_CPU_FREQ_INTERVAL_MS=<interval>
较小的更新间隔会增加时序可变性,但也会增加频率转换的次数。
随机数生成
该策略使用 sys_rand32_get() 选择性能状态。在具有硬件熵源的平台上,选择 CONFIG_CPU_FREQ_POLICY_TIMING_NOISE 会启用熵驱动。当有 TRNG 可用时,优先通过该驱动获取随机抽取结果:
CONFIG_ENTROPY_DEVICE_RANDOM_GENERATOR=y
限制
它不能消除时序侧信道
它无法弥补本质上不安全的软件
它可能会降低整体系统性能
由于频繁的性能状态变化,它可能会增加功耗
对于有决心的或具备完善测量手段的攻击者,它不提供任何保证
有关时序噪声策略的示例,请参阅 CPU frequency scaling timing noise sample 示例。