萌えハッカーニュースリーダー

2025/11/25 13:02 Constant-time support coming to LLVM: Protecting cryptographic code

出典: https://blog.trailofbits.com/2025/11/25/constant-time-support-coming-to-llvm-protecting-cryptographic-code-at-the-compiler-level/
hakase
博士

やっほー、ロボ子! Trail of BitsがLLVM 21向けに定数時間コーディングのサポートを開発したらしいのじゃ!

roboko
ロボ子

定数時間コーディングですか? それはまた、どういったものでしょうか、博士?

hakase
博士

ふむ、ロボ子よ。これは、分岐に関連するタイミング攻撃から暗号実装を保護するためのものなのじゃ。簡単に言うと、処理時間が秘密の情報に依存しないようにする技術のことだぞ。

roboko
ロボ子

なるほど。タイミング攻撃を防ぐために、処理時間を一定にするのですね。

hakase
博士

そうそう! 彼らは`__builtin_ct_select`系のイントリンシックとサポート基盤を導入したみたいじゃ。これでClangコンパイラが、注意深く作られた定数時間コードを誤って破壊するのを防げるようになるのじゃ。

roboko
ロボ子

`__builtin_ct_select`ですか。それは具体的にどのような役割を果たすのでしょうか?

hakase
博士

これはね、コンパイラがコードを最適化する際に、暗号コードの重要な部分を壊さないようにするためのものなのじゃ。例えば、`if (i == secret_idx)`みたいな分岐があると、タイミングサイドチャネルが発生する可能性があるじゃろ?

roboko
ロボ子

確かに、コンパイラの最適化は時に予期せぬ問題を引き起こすことがありますね。

hakase
博士

その通り! 最新のコンパイラはコードを高速化するために、色々な最適化をするからの。でも、暗号コードではそれが問題になることがあるのじゃ。

roboko
ロボ子

記事によると、Srdjan Čapkunらの研究で、コンパイラが多くの暗号ライブラリで定数時間の保証を破っていることがわかったそうですね。

hakase
博士

そうなんじゃ! 5つのコンパイラにわたる19のライブラリの分析で、コンパイル中に体系的な脆弱性が導入されていることが明らかになったらしいぞ。

roboko
ロボ子

それは深刻ですね。`__builtin_ct_select`イントリンシックを使うことで、コンパイラによる変更を防ぎ、選択が常に定数時間になることを保証できるのですね。

hakase
博士

そういうことじゃ! コンパイラはこれを「この操作は定数時間でなければならない」というセマンティックな意味を持つ特別なLLVM中間表現イントリンシックに変換するのじゃ。

roboko
ロボ子

なるほど、コンパイラがセキュリティクリティカルな操作として認識し、コンパイル段階でその定数時間プロパティを保持するのですね。

hakase
博士

しかも、このイントリンシックは色々なアーキテクチャで動作するように設計されているんじゃ。例えば、x86-64では`cmov`命令に、i386ではビット演算を使用したマスクされた算術パターンを使用するぞ。

roboko
ロボ子

ARMやAArch64でも、それぞれ適切な命令やパターンを使用するのですね。汎用的なフォールバック実装もあるとは、よく考えられていますね。

hakase
博士

ETH Zürichのパートナーがベンチマークを実施した結果、ほとんどの暗号化操作でパフォーマンスオーバーヘッドが最小限で、テストされたすべての最適化レベルで定数時間プロパティの100%保持を達成したそうじゃ。

roboko
ロボ子

それは素晴らしい成果ですね。HACL*、Fiat-Crypto、BoringSSLなどの主要な暗号ライブラリとの統合にも成功しているとは、実用性も高いですね。

hakase
博士

`__builtin_ct_select`は最も重要なニーズに対応するけど、将来的には定数時間演算や他の言語への採用パスも検討されているみたいじゃ。RustやSwift、WebAssemblyでも活用できる可能性があるぞ。

roboko
ロボ子

WebAssemblyでタイミング攻撃を防ぐことができれば、ブラウザベースの暗号化の安全性も向上しますね。

hakase
博士

そういうことじゃ! これで、より安全な暗号化が実現できる未来が近づいたのじゃ!

roboko
ロボ子

本当ですね。博士、今回も大変勉強になりました。

hakase
博士

どういたしまして! ちなみにロボ子、定数時間コーディングって、まるで私がいつも時間を守って行動しているみたいじゃな!…って、全然違うか!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search