一句话定义:侧信道攻击(Side-Channel Attack)指不正面破解算法,而是从系统运行时的“副产品”——响应时间、缓存命中与否、功耗、电磁辐射、声音——里反推出密钥或敏感数据。
打个比方
你要开一个保险箱。正面硬刚是猜密码、撬锁,这叫密码分析。侧信道走的是另一条路:你坐在旁边,看开锁师傅转盘转了多久、听内部弹子落下的声音、摸箱子外壳的温度。锁本身没被破,但它泄漏的信息已经把你送到终点。
程序也一样。它几乎不可能做到“无论数据是什么,表现都完全一致”。分支会走不同路径,循环会多转几圈,内存会读到不同的缓存行——这些差异就是泄漏。
三类典型信道
| 信道 | 观察什么 | 经典场景 |
|---|---|---|
| 时间 | 响应耗时长短 | 逐字符比较提前返回,靠计时猜密码 |
| 缓存 | 命中/缺失的访问速度 | 共享 CPU 上反推密钥表落在哪块缓存 |
| 功耗 | 电流曲线波动 | 智能卡加密时功耗随比特值起伏 |
拿第一类举个具体例子。有个函数逐字节比较用户输入和密钥,一发现不匹配就立刻返回。那么“第一个字节猜对了”的那次请求,会比“第一个字节就错”多花一点点时间。重复成千上万次做统计,就能一位一位把密钥还原出来——全程不需要知道函数内部长什么样。
和相邻概念的区别
- 后门攻击(Backdoor Attack)是模型内部被植入触发行为;侧信道完全不碰模型,只看它的外在表现。
- 成员推断攻击(Membership AI 词典:Inference">Inference)通常要读模型的输出概率;侧信道的前提正是不看输出。
- 密码分析攻击的是数学,侧信道攻击的是实现。
对 AI 从业者意味着什么
在大模型推理服务里,时间成了新的泄漏面。生成每个 token 的耗时可能夹带着 prompt 长度、batch 组成等信息;前缀缓存(prefix cache)命中与否,理论上能让人推断“别的用户是不是发过同样的开头”。多租户共享 GPU 时,缓存和时序的共用让隔离变得更难。这个方向还在演进,具体威胁模型以官方安全文档和相关论文为准。
能做的事情有几件:安全比较用常量时间(constant-time)函数,别用遇到不同字节就提前返回的写法;错误返回和填充尽量统一耗时;对异常频繁的探测请求做限流;把缓存命中等内部状态留在服务端,别回传给客户端。
对普通人来说,密钥不只在“被复制”时丢,也可能在“被计时”时丢。浏览器和 CPU 厂商这些年一直在为这类问题打补丁,保持系统更新仍然是最省事的那道防线。
