关键信息 漏洞描述 标题: Breaking Bad: How Compilers Break Constant-Time Implementations 作者: Moritz Schneider, Daniele Lain, Ivan Puddu, Nicolas Dutly, Srdjan Čapkun 机构: ETH Zurich 摘要 内容: 现代编译器在编译安全关键库时会破坏常量时间实现的防护措施。这些防护措施通常作为特定代码模式的指南来使用或避免。例如,通过在编译时选择秘密依赖的分支来执行算术运算。然而,这些技术在编译后仅在它们持续存在时才有意义。本文研究了现代编译器如何破坏由防御性编程技术引入的防护措施。特别是,研究了编译器如何破坏使用常量时间编程技术来防止侧信道攻击的高级常量时间实现。研究了44,604个不同目标的动态分析,特别是针对最广泛部署的安全关键库,这些库旨在提供侧信道防护。研究发现,一些编译器引入的秘密依赖操作存在于一些最高度保护的安全关键库中,即使在高级源代码被正式验证为无侧信道的情况下也是如此。 关键点 研究方法: 使用工具对44,604个不同目标进行动态分析。 研究对象: 最广泛部署的安全关键库,包括x86-64、x86-1386、armv7、aarch64、RISC-V和MIPS-32。 发现: 发现编译器引入的秘密依赖操作存在于一些最高度保护的安全关键库中。 结论: 现代编译器在编译安全关键库时会破坏常量时间实现的防护措施,即使在高级源代码被正式验证为无侧信道的情况下也是如此。 实验结果 目标: 44,604个不同目标。 研究对象: 最广泛部署的安全关键库。 发现: 发现编译器引入的秘密依赖操作存在于一些最高度保护的安全关键库中。 实验结论 结论: 现代编译器在编译安全关键库时会破坏常量时间实现的防护措施,即使在高级源代码被正式验证为无侧信道的情况下也是如此。 总结 本文研究了现代编译器如何破坏由防御性编程技术引入的防护措施,特别是针对常量时间实现的防护措施。研究发现,一些编译器引入的秘密依赖操作存在于一些最高度保护的安全关键库中,即使在高级源代码被正式验证为无侧信道的情况下也是如此。