编译器的两面性:如何破坏与修复常量时间代码

本文探讨编译器优化如何意外破坏常量时间代码的安全性,导致时序侧信道攻击漏洞。通过分析GCC和LLVM内部机制,识别关键优化通道,并提出无需修改源代码的编译器标志禁用方案,显著降低泄漏风险且性能开销极小。

编译器的两面性:如何破坏与修复常量时间代码

开发者依赖常量时间编程来防止时序侧信道攻击。但编译器的优化可能会悄无声息地重新引入泄漏,从而破坏这些努力。尽管近期研究测量了此类泄漏的程度,但开发者仍缺乏可操作的见解:哪些优化通道负责,以及如何在不修改编译器的情况下禁用它们,仍然不清楚。

在本文中,我们对编译器优化如何破坏常量时间代码进行了定性分析。我们构建了一个编译器引入的常量时间违规数据集,并分析了两个广泛使用的编译器(GCC和LLVM)的内部机制,以识别负责的具体优化通道。我们的关键洞察是,一小部分通道是大多数泄漏的根源。据我们所知,我们也是第一个描述这些通道之间的交互如何导致泄漏的。基于此分析,我们提出了一种原创且实用的缓解措施,无需修改源代码或自定义编译器:通过编译器标志禁用选定的优化通道。我们表明,这种方法显著减少了泄漏,且性能开销最小,为开发者提供了立即可部署的防御。

评论: 11页

主题: 密码学与安全(cs.CR)

引用为: arXiv:2507.06112 [cs.CR](或此版本的 arXiv:2507.06112v1 [cs.CR])

DOI: https://doi.org/10.48550/arXiv.2507.06112

提交历史: 来自Antoine Geimer [查看电子邮件] [v1] 2025年7月8日星期二 15:52:17 UTC(128 KB)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计