【问题标题】:CPU Redesign for Spectre and Meltdown针对 Spectre 和 Meltdown 的 CPU 重新设计
【发布时间】:2018-01-13 16:46:31
【问题描述】:

已经发布了很多补丁来修复最近发现的 Spectre 和 Meltdown 安全漏洞。然而,他们都通过禁用 cpu 上某些功能的使用来做到这一点(据我所知)。

所以我想知道被禁用的(预测)功能是否可能会在下一代处理器中恢复?

需要对 cpu 架构进行哪些设计更改?未来还能使用相同的预测算法还是需要对其进行调整?

我正在寻找技术解释,说明存在哪些选项可以恢复补丁前的性能并确保功能安全。

【问题讨论】:

标签: cpu-architecture exploit spectre


【解决方案1】:

我想它可以通过缓存条目中的额外标签(推测 id)来修复,该标签告诉缓存值是否是由推测引入的。当读取(cpu 外部)带有此标记集的条目时,缓存条目是不可见的(跳过)。当推测被选择执行(也就是不被丢弃)时,标签被清除(对于这个推测 id)。对我来说,这听起来一周内就可以解决,但我只是一个软件开发人员,而不是一个 cpu 设计师:-)

编辑:如果我正确理解 cmets,以上内容还不够。我们需要一个重复的 L1 缓存来防止驱逐检测。

【讨论】:

  • 侧通道是通过缓存块的放置和替换。使用典型的模 2 索引,任何被替换的块(通过缓存未命中导致的较慢加载检测到)将具有与索引匹配的地址位(揭示这些位用于推测访问)。与正常 L1 访问具有相同延迟的受害者缓存将删除 L1 延迟 信息通道(适当的替换策略使推测性访问似乎从未发生过)。
  • 所有负载都是在现代 OoO CPU 中推测发生的。它通常被验证(在退休时)是正确的猜测。所以缓存位翻转必须在退休时发生,当该行不被访问时。或者有由错误推测加载的错误预测恢复驱逐行。但这仍然只会阻塞刷新+读取缓存定时侧通道。它不会阻止相反的情况:预取+读取以查找被推测性负载逐出的行。 @Paul 建议与 L1D 并行检查受害者缓存可以停止两个侧通道。
  • 但是没有人可以阻止 ALU 端口压力攻击,其中侧通道正在计时循环运行的速度,并且分支目标注入用于运行使用不同 ALU 端口的东西,具体取决于秘密数据,而不是加载缓存。相关:请参阅我在Would buffering cache changes prevent Meltdown? 上的回答,其中我更详细地讨论了缓存标记位,以及 ALU 侧通道(@PaulA.Clayton 的受害者缓存也无法解决)。但是 ALU 时序不太可靠,所以它会有所帮助。
猜你喜欢
  • 2018-06-20
  • 1970-01-01
  • 2018-10-11
  • 2018-06-20
  • 2018-12-15
  • 2019-01-04
  • 1970-01-01
  • 2011-05-17
  • 2022-11-08
相关资源
最近更新 更多