V8 运行时如何破坏我的常时库

The V8 JavaScript Runtime Undermined My Constant-Time JavaScript Library

V8 运行时如何破坏我的常时库

六年前我撰写了关于侧信道攻击的指南,并开发了 constant-time-js 库用于演示,当时我就警告过编译器或运行时优化可能破坏安全目标。最近,Yayu Wang 发现该库在 V8 运行时中存在侧信道漏洞。V8 的 ToBoolean 机制以及对 -0 和 -1 的不同处理,导致条件选择函数暴露了秘密依赖的指令和数据缓存行为。我们已发布 v0.5.0 修复版本并申请了 CVE。这次经历再次证明,在 JavaScript 中实现真正的常时操作极其困难,因为底层运行时优化可能随时瓦解你的算法保障。

你可以实现算法层面的常时性,但任何更高的保障都超出了当前工作的范围。
  1. i2talics

    我是个安全领域的新手,但侧信道攻击在我看来,似乎根本无法通过在高级语言中编写更好的软件来从根本上解决。这类攻击的整个核心就是绕过你所有的抽象层。继续这样玩“打地鼠”游戏似乎并不太可行。

  2. ErikCorry

    没人是恶意的,你只是试图依赖一个 V8 从未承诺过的特性。

    Wasm 也没有承诺这一点,但在那里你更有可能得到你想要的东西。

  3. ndesaulniers

    很久以前,我曾尝试用 JavaScript 重写 WebRTC 协议栈,但最终没完成。Mozilla 的密码学团队(ekr@)当时建议:“也许别在 dTLS 上这么做。”

同日更多故事

2026-09-14