pyca/cryptographyにおけるOpenSSLの現状
概要
pyca/cryptographyのメンテナーがOpenSSLの方向性に深刻な懸念を表明。
OpenSSL 3でのパフォーマンス低下やAPI複雑化が主要な問題点。
テストやメモリ安全性の不十分さも指摘。
今後はOpenSSL依存度を下げる方針を明確化。
LibreSSL/BoringSSL/AWS-LCなど他実装への移行を検討中。
OpenSSLの現状と問題点
- pyca/cryptographyは12年間OpenSSLを中核に利用してきた実績。
- OpenSSL 3以降、パフォーマンス低下やAPIの複雑化が顕著。
- pre-Heartbleed時代: メンテナンス不足と技術的停滞。
- Heartbleed直後: CI導入やリリース体制強化など大幅改善。
- OpenSSL 3リリース以降: API刷新や内部構造の大規模変更による後退。
- パフォーマンス、複雑性、APIの使い勝手、テスト・検証、メモリ安全性で問題発生。
- 他のOpenSSLフォーク(LibreSSL/BoringSSL/AWS-LC等)は同様の問題を回避。
パフォーマンスの問題
- OpenSSL 3はOpenSSL 1.1.1と比較してパフォーマンス大幅低下。
- 例: 楕円曲線公開鍵の読み込みが最大8倍遅くなる事例。
- 開発元から「パフォーマンス低下は想定内」との回答。
- Rustによる独自実装へ移行した結果、10倍高速化など顕著な改善。
- 基本的な最適化(コピー・アロケーション・ロック回避等)のみで大幅な性能向上。
複雑化とAPIの問題
- OpenSSL 3でOSSL_PARAM導入、API呼び出しが冗長化・難解化。
- 通常の引数渡しでなく、キー・バリュー配列でのパラメータ指定。
- APIの冗長さ: ML-KEMカプセル化でOpenSSLは37行・6回の失敗可能性、BoringSSLは19行・3回。
- 内部実装も複雑化し、カスタムPerlプリプロセッサ導入など可読性低下。
- Providers API導入でアルゴリズムの動的差し替えが可能に。
- 不要な複雑化とパフォーマンス低下、バグの温床。
- ソースコードの可読性低下: 間接呼び出し・オプション分岐・ifdef乱用などで理解困難。
テストと検証体制の問題
- OpenSSLはテスト自動化の優先度が低い。
- テストカバレッジ不足: リリース前のバグ検出が不十分、コミュニティ頼り。
- CIの不安定さ: 重大バグがCIで検出されても「フレーク」として無視。
- 例: OpenSSL 3.0.4のRSAバッファオーバーフロー。
- Intel SDE等の先進的なテスト手法未活用。
- **形式手法(フォーマルベリフィケーション)**の導入遅れ。
メモリ安全性の問題
- Rust導入でpyca/cryptographyはメモリ安全性を強化。
- OpenSSLはメモリ安全性向上の取り組みが皆無。
- セキュリティ重視ライブラリとしては、メモリ安全言語への移行が必要。
根本原因と資金問題
- 資金不足が主因ではない。OpenSSLは十分な資金と人員を保有。
- 設計判断の妥当性に疑問。フォーク先(BoringSSL等)は同様の選択をしていない。
今後の方針
- 新機能におけるOpenSSL実装の必須化を廃止。
- LibreSSL/BoringSSL/AWS-LCのみ対応APIを追加予定(例: ML-KEM, ML-DSA)。
- バイナリ配布物(wheels)のリンク先をOpenSSLフォークへ切り替え検討。
- OpenSSL非対応への移行も視野。
- 非OpenSSL由来の暗号ライブラリも積極的に調査・追跡。
まとめ
- OpenSSL 3の方向性に危機感。
- パフォーマンス・API・テスト・メモリ安全性で他実装に劣後。
- 依存度低減と他実装への移行を進める方針。
- コミュニティ全体での議論・対応を促す声明。