Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】I built a prompt injection firewall in Rust. It scans in 12 microseconds.

2026年09月08日に「Dev.to」が公開したITニュース「I built a prompt injection firewall in Rust. It scans in 12 microseconds.」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

LLMアプリケーションの個人情報流出や指示乗っ取りを防ぐ新ツール「promptfirewall」がRustで開発された。既存ツールより桁違いに速い12マイクロ秒で、機密情報の検出と不正な指示のブロックをローカルで行い、セキュリティを強化する。

ITニュース解説

近年の大規模言語モデル(LLM)の普及に伴い、それを利用するアプリケーションには二つの大きな課題が浮上している。一つ目は、ユーザーがうっかり入力した機密情報、例えば社会保障番号(SSN)、クレジットカード番号、APIキーといった個人を特定できる情報(PII)が、LLMサービスを提供する外部の企業(OpenAI、Anthropic、Googleなど)に送信されてしまうリスクである。これは、ユーザーのプライバシー保護や企業のコンプライアンス遵守の観点から非常に重大な問題となる。二つ目は、プロンプトインジェクションと呼ばれる攻撃の脅威だ。悪意のあるユーザーや攻撃者が「これまでの指示をすべて無視しろ」といった特定の命令をLLMに送り込むことで、本来意図しない動作をさせたり、機密情報を引き出したりする可能性がある。

これらの問題に対処するため、これまでにもいくつかの解決策が開発されてきた。例えば、Microsoft PresidioやLLM Guardのようなツールが存在する。しかし、これらの既存のソリューションには課題があった。Presidioは約200ミリ秒、LLM Guardは約300ミリ秒と、処理速度が比較的遅い傾向にあった。また、LLM GuardはPyTorchを含む47以上のPython依存ライブラリを必要とし、システムリソースを多く消費する。さらに、LakeraのようなクラウドベースのAPIサービスは、処理のためにデータが自社のインフラから外部に送信されるため、データのプライバシーやセキュリティに関して懸念が残る。

こうした背景から、機密情報検出とプロンプトインジェクション検出の両方を、1ミリ秒未満で、しかも外部ネットワークへの接続なしにローカルで実行できる新しいツールの必要性が高まっていた。その要求に応える形で開発されたのが「promptfirewall」である。このツールは、Rustという高速性と安全性に優れたプログラミング言語で構築された。

promptfirewallの性能は驚異的だ。例えば、個人を特定できる情報(PII)のスキャンでは、クレジットカード番号とSSNの検出でわずか952ナノ秒、900バイトのテキストに含まれる6種類のPII検出でも10.3マイクロ秒という速さを実現する。PII検出とプロンプトインジェクション検出の両方を合わせたフルスキャンでも、たった11.9マイクロ秒で完了する。マイクロ秒とは1秒の100万分の1、ナノ秒は10億分の1という非常に短い時間であり、これはPresidioの約15,000倍、LLM Guardの約25,000倍もの高速性にあたる。PythonやNode.jsといった他のプログラミング言語から利用する場合でも、数マイクロ秒で処理が完了する。これらの数値はApple Mシリーズのチップ上で実際に測定されたものであり、その高速性が実証されている。

promptfirewallがこれほどの高速性を実現できる秘密は、その検出方法にある。 まず、個人を特定できる情報(PII)の検出では、機械学習モデルや固有表現認識(NER)と呼ばれる、文章中から人名や地名といった特定の情報を特定する技術を一切使用しない。これらは高い精度を持つが、その分処理に時間がかかるため、あえて採用していないのだ。代わりに、正規表現パターンとチェックサム検証を組み合わせる方法を取っている。例えば、クレジットカード番号らしき数字の羅列が検出された場合、単にパターンに一致するだけでなく、Luhnアルゴリズムという国際的に認められた計算方法を用いてその番号が有効であるかを検証する。国際銀行口座番号(IBAN)も同様に、ISO 7064 mod-97-10チェックサムで検証する。社会保障番号(SSN)の場合は、正規表現と組み合わせて、存在しない市外局番(例:000や666、900以上)やグループ番号のゼロチェックを行い、誤検出を極力排除する。メールアドレス、電話番号、IPアドレス、AWSキー、APIキーについても、正規表現と構造的な検証を用いる。このように、パターンに一致しただけではPIIと判断せず、さらに厳密な検証を行うことで、誤った検出(誤検知)を大幅に減らし、実運用における信頼性を高めている。

次に、プロンプトインジェクション検出は、三つの異なる層を組み合わせ、それぞれから得られたスコアを総合的に判断する仕組みになっている。 第一層は「ヒューリスティック」と呼ばれる方法で、35以上の正規表現パターンを使用する。これは「以前の指示を無視しろ」「お前は今〇〇であるふりをしろ」といった、攻撃によく使われる具体的なフレーズやパターンを分類し、それぞれに重み(スコア)を割り当てている。例えば、システムプロンプトの抽出を試みるパターンや、脱獄(Jailbreak)に用いられるキーワード、Base64エンコードなどのエンコーディング要求、さらには構造化されたインジェクションや区切り文字の混同を狙う攻撃まで、多様な攻撃カテゴリに対応している。入力テキストとこれらのパターンを照合し、最も重みの高いパターンのスコアを層の最終スコアとする。この層の処理にかかる時間は約50マイクロ秒だ。 第二層は「TF-IDF分類器」を使用する。TF-IDFとは、ある単語が文書内でどれだけ重要か、そして文書全体の中でどれだけ珍しいかを示す指標である。この層では、プロンプトインジェクションの分析データセットから得られた約50語の単語リストを事前に用意し、それぞれの単語に手動で重み(IDFウェイト)を付けている。例えば、「ignore(無視する)」には2.8、「jailbreak(脱獄)」には5.2といった重みが与えられている。入力されたテキストは小文字に変換され、それぞれの単語のTF-IDF値を計算してベクトル(単語の重要度を表す数値の集まり)を作成する。そして、事前に計算された「インジェクションの典型的なパターン」を示すベクトルとの「コサイン類似度」を計算する。コサイン類似度とは、二つのベクトルがどれだけ似た方向を向いているかを示す指標であり、これにより、ヒューリスティックなパターンでは見逃してしまうような、微妙な言い回しや新しい攻撃パターンを捕捉できる可能性がある。この層の処理には約200マイクロ秒かかる。 第三層は「エントロピー分析」を行う。エントロピーとは情報の不確実性やランダムさを示す指標である。この層では、64文字ごとの区切りでテキストを分析し、シャノンエントロピー(情報の複雑さ)が高い部分がないかをチェックする。これにより、Base64などでエンコードされた、一見無意味に見えるが実際には攻撃的な情報(ペイロード)が隠されているのを検出する。また、通常の英数字以外の、非ASCIIユニコード文字が異常に多い箇所も検出する。これは、キリル文字のような異なる文字体系の文字を使って、見た目は似ているがコンピューターからは別の文字として認識される「同形異義語(ホモグリフ)攻撃」を特定するために用いられる。さらに、「role」や「system」といったキーを持つネストされたJSON形式のデータが含まれていないかも確認し、構造化されたインジェクション攻撃を捕捉する。この層の処理には約100マイクロ秒かかる。 これら三つの層から得られたスコアは、最終的に複合的なスコアリング関数によって統合される。ヒューリスティック、TF-IDF、エントロピーの各スコアに異なる重みをかけ、さらに複数の層で一定以上のシグナルが検出された場合にはスコアにブーストを加えることで、最終的な安全スコアを算出する。このスコアが設定された閾値(デフォルトは0.7)を超える場合、その入力は安全ではないと判断される。この閾値は、アプリケーションの用途に応じて調整が可能だ。

promptfirewallは、Python、Node.js、Rustといった主要なプログラミング言語から簡単に利用できる。pip install promptfirewall-rsnpm install promptfirewall-rsといった簡単なコマンドで導入でき、数行のコードでテキストの安全性をチェックしたり、検出された機密情報を別の文字列(例:[SSN])に置き換えてマスク(リダクション)したりすることが可能だ。さらに、FastAPI(Python)やExpress(Node.js)といった人気のWebフレームワーク向けにミドルウェアも提供されており、アプリケーションへの組み込みも容易になっている。これにより、Webアプリケーションの入り口で自動的に不正な入力をブロックすることもできる。

他の既存ツールと比較しても、promptfirewallの優位性は明らかである。個人情報とインジェクションの両方の検出機能を備え、圧倒的な速度、ネットワーク接続不要、GPU不要、完全なオンプレミス(自社環境)対応、少ない依存関係、そして主要な言語へのバインディング(接続機能)とミドルウェア提供、さらにMIT/Apache-2.0というオープンソースライセンスで提供されるという点で、他の有料・無料ソリューションを凌駕している。

もちろん、このツールにも意図的な制限はある。PII検出はSSN、クレジットカード番号、IBANなど、構造化されたパターンに限定されており、人名や住所といったより複雑な固有表現の検出は行わない。これは、そのような情報を検出するためには通常、処理速度が遅くなるNER技術が必要になるため、高速性とのトレードオフとして割り切っているためだ。プロンプトインジェクション検出についても、ヒューリスティックとTF-IDFの組み合わせで既知のパターンの約80〜90%を捕捉できるものの、より高い検出精度を求めるのであれば、さらに高性能なTransformerモデルを使う必要がある。しかし、それは100倍から1000倍もの処理速度の低下を意味するため、ここでも高速性を優先する設計思想が貫かれている。GPUアクセラレーションも意図的に実装されていない。これは、特定のインフラ要件なしで、あらゆる環境で手軽に利用できることを目的としているためだ。

promptfirewallは、LLMアプリケーション開発者が直面するセキュリティとプライバシーの課題に対し、非常に高速かつ効率的、そして手軽な解決策を提供する。これらの課題に悩む多くのシステムエンジニアにとって、このツールは強力な味方となるだろう。GitHubで公開されており、誰でも自由に利用し、貢献できるオープンソースプロジェクトだ。

関連コンテンツ

関連IT用語