典型的信道包括:随秘密位变化的执行时间(Kocher,1996年);通过共享缓存观察到的、依赖秘密的内存访问(Flush+Reload 及类似方法);智能卡和微控制器的功耗与电磁轨迹;以及让设备输出错误签名的故障注入(电压或时钟毛刺、激光、Rowhammer),从这样的签名可以算出密钥。远程计时同样切实可行:Lucky Thirteen(2013年)就通过网络攻击了 TLS 的 CBC 填充检查。
非对称密码学尤其容易受到影响,因为标量乘法和模幂运算要按密钥或 nonce 的各个位循环。防御手段包括:常量时间代码(没有依赖秘密的分支、内存索引或可变时间指令)、对标量和消息做盲化、采用统一阶梯算法的完备公式,以及针对故障攻击,在发布签名前先验证签名并使用对冲 nonce。
对开发者来说,实用的原则是:使用仍在维护、在常量时间实现方面有可靠记录的库(BoringSSL、OpenSSL、libsodium、Go 的 crypto 库、RustCrypto、noble 系列库),切勿自己重新实现算术运算。在带有 JIT 编译器或垃圾回收的语言中,常量时间行为只能尽力而为,这一点在共享主机和浏览器中尤为重要。