编译器的两面性:如何破坏与修复常量时间代码
开发者依赖常量时间编程来防止时序侧信道攻击。但编译器的优化可能会悄无声息地重新引入泄漏,从而破坏这些努力。尽管近期研究测量了此类泄漏的程度,但开发者仍缺乏可操作的见解:哪些优化通道负责,以及如何在不修改编译器的情况下禁用它们,仍然不清楚。
在本文中,我们对编译器优化如何破坏常量时间代码进行了定性分析。我们构建了一个编译器引入的常量时间违规数据集,并分析了两个广泛使用的编译器(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)