[论文解读] Robust and Efficient Elimination of Cache and Timing Side Channels
本文提出了一种低开销的跨语言防护机制,通过使用程序员注解隔离敏感函数、应用安全的时间填充以及懒惰清除共享硬件状态,彻底消除时序和缓存侧信道泄露。该机制在SSL/TLS服务器上实现的性能开销低于5%,同时可抵御C、C++和Java程序中的本地与远程攻击。
Timing and cache side channels provide powerful attacks against many sensitive operations including cryptographic implementations. Existing defenses cannot protect against all classes of such attacks without incurring prohibitive performance overhead. A popular strategy for defending against all classes of these attacks is to modify the implementation so that the timing and cache access patterns of every hardware instruction is independent of the secret inputs. However, this solution is architecture-specific, brittle, and difficult to get right. In this paper, we propose and evaluate a robust low-overhead technique for mitigating timing and cache channels. Our solution requires only minimal source code changes and works across multiple languages/platforms. We report the experimental results of applying our solution to protect several C, C++, and Java programs. Our results demonstrate that our solution successfully eliminates the timing and cache side-channel leaks while incurring significantly lower performance overhead than existing approaches.
研究动机与目标
- 解决在极低性能代价下保护软件免受本地与远程时序和缓存侧信道攻击的挑战。
- 开发一种可跨编程语言和硬件架构移植的防护机制,无需低级汇编或专用硬件支持。
- 相比现有方案(如静态代码转换或激进的缓存刷新)降低性能开销。
- 确保即使在Java等语言的运行时优化以及不同处理器时序特性下仍具备安全性。
- 提供一种实用的应用层解决方案,仅需极少的源代码修改和操作系统的支持。
提出的方法
- 使用程序员定义的注解识别并隔离处理敏感数据的函数,从而限制保护范围。
- 将依赖秘密的时序变化与不依赖秘密的时序变化分离,仅对前者应用时间填充,以避免泄露。
- 利用现有的操作系统调度器和硬件特性(如内存层次结构)将受保护函数的执行与不受信进程隔离。
- 设计一种使用粗粒度原语的安全延迟循环机制,防止延迟本身引入时序泄露。
- 实现一种懒惰状态清除策略,在切换到不受信进程时才清除共享硬件资源(如缓存、分支预测器),从而降低开销。
- 将防护机制集成到Linux内核中,从系统层面强制实施隔离与时序独立性。
实验结果
研究问题
- RQ1能否构建一种防护机制,在极低性能开销下同时抵御本地与远程时序和缓存侧信道攻击?
- RQ2如何安全地应用时序填充,而不会因填充机制本身引入新的侧信道?
- RQ3能否设计一种解决方案,实现跨多种编程语言和硬件平台的可移植性,且无需低级或架构特定的修改?
- RQ4在保持对共享硬件资源强隔离的前提下,保护敏感函数的性能代价是多少?
- RQ5如何利用现有的操作系统和硬件特性,最大限度减少对定制或侵入性修改的需求?
主要发现
- 所提出的防护机制在保护SSL/TLS服务器完整状态机免受所有已知时序与缓存侧信道攻击时,性能开销低于5%。
- 该方案在C、C++和Java程序中成功消除了时序与缓存侧信道泄露,且仅需极少的源代码修改。
- 与每次敏感函数调用后立即清除状态相比,懒惰状态清除显著降低了开销。
- 安全延迟循环机制有效防止了延迟原语本身引发的泄露,这是朴素实现中的常见漏洞。
- 该防护机制在多种架构上均有效,即使在JVM的运行时优化环境下也表现良好,而此前的方法在该环境下会失效。
- 该方法对架构差异具有鲁棒性,在不同处理器型号或调度行为下均能稳定运行。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。