正規表現サービス拒否攻撃(ReDoS)は、セキュリティ分野で長く続く問題です。バックトラッキングを採用する正規表現エンジンでは、巧妙に細工された「邪悪なパターン」と特定の入力が組み合わさると、マッチング時間が入力長に対して指数関数的に増加し、サーバーリソースを枯渇させます。Python標準ライブラリのreモジュールもこの問題に悩まされています。しかし、Ville Laurikari氏が開発したTRE正規表現エンジンは、バックトラッキングをサポートしないことで、この脆弱性を根本的に排除しています。この特性はすでにRedisの作者であるantirez氏によってRedisに統合されています。この事実に触発されたSimon Willison氏は、2026年5月4日に研究ブログを公開し、Claude AIアシスタントを使用して実験的なPython ctypesバインディングを構築し、TREの悪意ある正規表現に対するロバスト性を体系的にテストしました。テスト結果は、TREが有名な「邪悪なパターン」(例:(a|aa)+b)を処理する際、入力サイズが1000万文字に達しても、Pythonのreモジュールが非常に短い入力を処理するよりも高速であることを示しました。さらに重要なことに、TREの計算量は入力長に対して線形に増加しますが、reモジュールでは指数関数的に爆発します。具体的なベンチマークでは、入力長が増加するにつれてreモジュールのマッチング時間がミリ秒から数分以上に急上昇するのに対し、TREは常にミリ秒単位の応答を維持しました。この性能差により、TREはユーザー入力の正規表現を処理する際の理想的な選択肢となります。
Willison氏のバインディング実装は非常にシンプルで、Pythonのctypesライブラリを使用してTREのC言語APIを直接呼び出しています。彼はGitHub上で完全なコードとドキュメントを提供しており、TREライブラリのインストール方法、動的リンクライブラリのコンパイル方法、そしてバインディングを使用したマッチングの例を含んでいます。開発者は既存のPythonプロジェクトにTREを簡単に統合でき、reモジュールの呼び出しを置き換えるだけです。ただし、TREはバックトラッキングをサポートしていないため、後方参照や先読み/後読みアサーションなどの高度な正規表現機能を処理できません。これらの機能が必要なアプリケーションでは、引き続きreモジュールや他のエンジンを使用する必要があります。しかし、Webアプリケーションの入力検証、ファイアウォールルールのマッチング、ログコンテンツのフィルタリングなど、セキュリティが重要なほとんどのシナリオでは、TREがより安全な代替手段を提供します。
Willison氏の研究は、ReDoS攻撃に対するTREの優れた耐性をさらに確認するとともに、大規模言語モデル(Claudeなど)が開発ツールや実験的なコードを補助する可能性を示しました。この成果はPythonコミュニティだけでなく、他のプログラミング言語の正規表現ライブラリ設計にも参考になります。サイバー攻撃の手法が進化し続ける中、ReDoS耐性のある正規表現エンジンを選択することは、堅牢なシステムを構築する上で重要な要素です。