一句话:提出基于程序分析与变换的修复方法,消除软件中的指令级与缓存时序侧信道。
本文针对实现安全关键应用的软件中存在的时序侧信道,提出一种基于程序分析与变换的消除方法。该方法以原程序及秘密变量列表(如密钥、安全令牌或口令)为输入,输出经修复变换后的程序;保证其功能等价,并消除指令时序与缓存时序侧信道:任意路径执行所需的 CPU 周期数与秘密数据无关,内存访问的缓存命中/缺失行为也与秘密数据无关。作者在 LLVM 中实现该方法,并在总计 19,708 行 C/C++ 代码的密码库等大量应用上验证,实验表明其可扩展且能有效消除时序侧信道。
We propose a method, based on program analysis and transformation, for eliminating timing side channels in software code that implements security-critical applications. Our method takes as input the original program together with a list of secret variables (e.g., cryptographic keys, security tokens, or passwords) and returns the transformed program as output. The transformed program is guaranteed to be functionally equivalent to the original program and free of both instruction- and cache-timing side channels. Specifically, we ensure that the number of CPU cycles taken to execute any path is independent of the secret data, and the cache behavior of memory accesses, in terms of hits and misses, is independent of the secret data. We have implemented our method in LLVM and validated its effectiveness on a large set of applications, which are cryptographic libraries with 19,708 lines of C/C++ code in total. Our experiments show the method is both scalable for real applications and effective in eliminating timing side channels.
DOI 原文 ·
@inproceedings{paperbot4828,
title = {Eliminating timing side-channel leaks using program repair},
author = {Meng Wu and Shengjian Guo and Patrick Schaumont and Chao Wang},
booktitle = {ISSTA},
year = {2018},
doi = {10.1145/3213846.3213851}
}