
2026/10/03 14:45
メモリ安全な WebP 画像のデコード
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
WebP Decoder(WPD)は、より高速かつセキュリティに優れたライブラリとして、従来の WebP デコーダーを置き換えることを目的とした新たな Rust ベースのライブラリです。その主な成就是、libwebp に見られるように以前の C インプレメンテーションで問題となっていた重要なメモリ安全性の脆弱性を解決することです。WPD は、生粋のパフォーマンスチューニングよりも検証されたメモリの安全性を優先することで、Chromium などの主要ブラウザにおいてメモリバグが約 70% の高深刻度クラッシュを引き起こすという事実を直接対処しています。これらの厳格な安全策にもかかわらず、ベンチマークの結果は WPD が単スレッドおよびマルチスレッドの両環境において、その前身よりも著しく高速であることを示しています。WPD は、ICC/EXIF データ抽出や組み込みクロップ機能など完全な機能互換性を維持しつつ、高度なコード最適化を必要な場合にのみ選択的に適用することでこの性能を実現しています。BSD 2-Clause ライセンスの下で公開されているオープンソースプロジェクトである WPD は、開発者向けにパフォーマンスや機能性を損なうことなく、商用利用にも安全で堅牢な代替手段を提供しています。
本文
WPD: libwebp より高速かつ安全な Rust ベース WebP デコーダー
Wpd は、既存の libwebp よりも高速でありながら安全な WebP デコーダーです。
- セキュリティ強化: CVE-2023-4863 などの脆弱性による攻撃から Web を保護することを目的としています。
- パフォーマンス向上:
- 単一スレッド環境でも現状維持を打破した高速化を実現します。
- 複数スレッド構成において、libwebp よりも優れた並行処理能力を提供します。
ソースコード: https://github.com/halidecx/wpd
セーフティ(安全性)
イメージデコーダーや画像処理ライブラリは、OS レベルからブラウザプロセスまで幅広く利用されていますが、複雑で信頼性のない入力データを処理するためメモリ安全性の脆弱性を孕みやすい傾向があります。
現状の課題
- CVE-2023-4863: Chrome, Firefox, Signal, Microsoft Teams などに影響し、数十億台のデバイスを標的にする可能性があります。
- CISA は野生環境での悪用を確認しており、「Known Exploited Vulnerabilities」カタログに登録されています。
- libwebp の限界:
- 過去に比べて安全性は向上していますが、「十分にファスティング(well-fuzzed)」という事実だけでメモリ安全性の問題は完全に解決されていません。
- Chromium チームによると、高重大度のセキュリティバグの約**70%**がメモリ安全性に関連する問題から発生しています。
WPD の解決策
WPD はRustで記述され、パフォーマンス向上のために手書きのアセンブリルーチンを採用していますが、安全性は最優先に設計されています。
- SIMD コードの制御: デコーダー内の手書き SIMD コードは、リスクが低い領域に限られ、慎重な範囲限定が行われています。
- 完全な検証可能性:
- 消費者向け環境強化目的の場合は、手書きアセンブリを無効化してコンパイル可能。
- これにより、非 SIMD コード部分には完全な検証可能なメモリ安全性が保証されます。
- 唯一の
コードは、審査済みのunsafe
ライブラリの一部に限られています。zerocopy
これは、完全な
unsafe C を使用した手書き SIMD インプリメンテーションを持つ libwebp と比較し、著しい改善をもたらします。
パフォーマンス
WPD は安全であるだけでなく、画像 WebP ファイルの処理速度も同等以上の水準を達成しています。安全性向上によるパフォーマンス低下を回避しつつ、さらに高速化を実現しました。
ベンチマーク結果(libwebp 比較)
| 環境 | 圧縮方式 | 性能向上 |
|---|---|---|
| 単一スレッド | 有損圧縮 | 1.19 倍高速 |
| 単一スレッド | 無損圧縮 | 2.74 倍高速 |
| 複数スレッド | 有損圧縮 | 2.68 倍高速 |
| 複数スレッド | 無損圧縮 | 3.19 倍高速 |
- テスト環境:
0.2.4 と libwebp (コミット a1d89ff) を使用。image-webp - 複数スレッドでの優位性: アニメーション WebP コンテンツと静止画の混在テストにより、並列画像デコーディングの利点が効果的に発揮されました。
- 単一スレッドでの優位性: 純粋なアルゴリズムの改善によります。
機能
libwebp との機能同等性が目標であり、あらゆるユースケースがアップグレードで恩恵を受けます。
image-webp と比較しても代替品として機能し、追加機能を備えています。
主要機能比較
| カテゴリ | image-webp | libwebp | WPD |
|---|---|---|---|
| 基本デコーディング | ☑ | ☑ | ☑ |
| (有損/無損 WebP) | |||
| (アニメーション含む) | |||
| 出力フォーマット | ☑ / ⚠¹ | ☑ / ⚠² | ☑ |
| (RGB, RGBA など) | |||
| (BGR, YUV420P 等追加対応) | |||
| 変換・加工機能 | ☐ / ☐³ | ☑ | ☑ |
| (クロップ、スケール、反転など) | |||
| 最適化とスケーラビリティ | ☐ / ☐ | ☑ / ☐³ | ☑ |
| (並列前読み込み、明示的スレッド数制御等) | |||
| インターフェース | Rust API | C ABI | 両対応 |
- 注釈:
- ¹: libwebp ではコンポジットキャンバスを返す必要あり。
- ²: ローレベルの VP8 デコーダー公開(呼出側での抽出が必要)。
- ³: スレッド数はブール値の有効化のみで指定可能。
補足: WPD のサブフレームモードでは、クロップ・スケール・反転を除き、部分行 API はアニメーションおよび変換済み出力を除外します。
目標
- オープンソースコミュニティへの還元:
- このプロジェクトは、我々のオープンソースカタログへの第 3 目の追加(
,fcvvdp
に加わる)です。fmetrics - WPD のリリースにより、公式クローズドソースである Iris-WebP や未リリースの Aperture よりも多数の主要なオープンソースプロジェクトを所有します。
- このプロジェクトは、我々のオープンソースカタログへの第 3 目の追加(
- コミットメント:
- 将来もこの比率をさらにオープンソース側に傾け、当社のオープンソースワークを第一級のサポートターゲットとして支援します。
- クローズドエンコーダーに対する姿勢と同じ方針で取り組みます。
セキュリティパートナーシップとライセンス
- セキュリティ目標の追求: 世界中で重要なソフトウェアの保護に携わるサイバーセキュリティ企業とのパートナーシップを探しています。
- 利用無料: WPD は無料でご提供いたします。
- フィードバック: ご懸念や改善点は遠慮なくお知らせください。適切に対処・対応いたします!
ライセンス情報
WPD は、最も寛容なオープンソースライセンスであるBSD 2-Clause Licenseで公開されています。