【TEE从入门到精通及实战】33 TEE侧信道防御:从缓存时序攻击到恒定时间执行
开篇故事:一个“看不见”的窃听者去年,我帮一家金融科技公司做TEE安全审计。他们用Intel SGX实现了一个密钥管理服务,所有密钥在飞地内生成、存储和使用,内存加密、访问控制全部到位。团队负责人信心满满:“密钥在飞地内,攻击者连内存都读不到,绝对安全。”我笑了笑,问了一个问题:“你们的密钥对比操作是常数时间吗?”他愣住了。我让他跑一个简单的测试:用不同的密钥去解密相同的数据,记录解密时间。结果令人震惊——密钥中1的位数越多,解密时间越长。攻击者只要在飞地外测量1000次API响应时间,就能把密钥的比特位猜个七七八八。这就是侧信道攻击的可怕之处:它不攻击你的加密算法,不攻击你的内存保护,而是攻击你的物理实现——时间、功耗、电磁辐射,这些“看不见”的信息泄露通道。今天,我们就来堵住这些漏洞。痛点拆解:为什么你的TEE应用“裸奔”在侧信道下?常见错误实现:把“安全”等同于“加密”很多开发者认为,只要数据在飞地内加密、代码逻辑正确,就万事大吉。但侧信道攻击利用的是执行时间的差异。看这个反例:# 反例:不安全的密钥比较(时间依赖)def