V8ランタイムが私の定数時間JavaScriptライブラリを無効化した

The V8 JavaScript Runtime Undermined My Constant-Time JavaScript Library

V8ランタイムが私の定数時間JavaScriptライブラリを無効化した

暗号実装におけるサイドチャネル攻撃を防ぐため、6年前にconstant-time-jsというデモ用ライブラリを公開していた。しかし、University of British ColumbiaのYayu Wangらが、V8のToBooleanや-0の扱い、true/false Oddballオブジェクトへの直接アクセスによって秘密依存のキャッシュ挙動が生じることを発見。報告を検証し、boolean型や負数マスクを避けるパッチを適用してv0.5.0をリリース、CVEも取得した。

同一のロード命令がtrueでは0x...0cc、falseでは0x...0b0にアクセスする。命令アドレスは同一でも、そのデータオペランドが二つの異なるキャッシュラインを通じて条件を明かすのだ。
  1. i2talics

    私はセキュリティに関しては素人なのですが、サイドチャネル攻撃というのは、高水準言語でより良いソフトウェアを書くことでは根本的に対処できないもののように思えます。要は、そうした攻撃はあらゆる抽象化の下に潜り込むわけです。このようにモグラ叩きを続けるのは、特に持続可能とは思えません。

  2. ErikCorry

    誰も悪意があったわけではなく、あなたがV8が決して約束しなかった特性に依存しようとしただけです。

    Wasmもそれを約束してはいませんが、そこでは望むものが得られる可能性がずっと高いです。

  3. ndesaulniers

    ずっと前にJavaScriptでWebRTCスタックを再実装しようとしていて、結局終わらなかった。Mozillaの暗号担当者(ekr@)は「dTLSについては、たぶんやめたほうがいい」と提案してくれた。

この日のほかの記事

2026-09-14