RAG(Retrieval-Augmented Generation)を構築する際、社内文書やマニュアル、顧客データを「埋め込みベクトル(Embedding Vector)」に変換し、Pinecone・Qdrant・Weaviate・pgvectorといったベクトルDBに保存している企業は急増しています。
このとき多くの開発者は、「ベクトルは数字の羅列なので、もし漏洩しても元の文章は復元できない」と考えています。実際、Chroma・Faiss・Pineconeといった主要なベクトルDBベンダーも、長年「embeddingを保存することは安全」と説明してきました。
しかし、この前提はすでに崩れています。
2023年にCornell大学の研究チームが発表した「vec2text」は、OpenAIのtext-embedding-ada-002のような汎用埋め込みモデルから、元のテキストを92%以上の精度で復元できることを実証しました。2024〜2025年にはZSinvert、ALGEN、GEIAといった後続研究が次々に登場し、「事前学習なし」「少数サンプルのみ」「ブラックボックスAPI経由」でもベクトルから元テキストを再構成できる手法が確立されつつあります。
つまり、ベクトルDBに保存された埋め込みベクトルが流出すれば、PII(個人情報)・社内機密・顧客データの「中身」まで攻撃者に復元され得る——これが「Embedding Inversion Attack(埋め込み反転攻撃)」と呼ばれるリスクです。
欧米のセキュリティ研究者の間では既知の脅威ですが、日本語での実務向け解説はほぼ存在しません。本記事では、攻撃の仕組み・主要なベクトルDBでの設定上の注意点・ノイズ注入や差分プライバシーによる防御策・PIIマスキング戦略まで、RAGを運用するすべての企業が知っておくべき内容を整理します。
そもそもEmbedding Inversion Attackとは何か
埋め込みベクトルの基本
埋め込みベクトル(embedding)とは、テキスト・画像・音声などをAIが扱える「数値の配列」に変換したものです。例えばOpenAIのtext-embedding-3-smallは、任意の文章を1,536次元の浮動小数点数の配列に変換します。
RAGでは、社内文書を細かいチャンクに分割し、それぞれをこの数値配列に変換してベクトルDBに保存します。ユーザーが質問すると、質問文も同じく数値配列に変換され、「最も近いベクトル」を検索することで関連文書を取り出します。
長らく業界の常識として、「embeddingは元のテキストを意味的に圧縮した不可逆な数値表現」と説明されてきました。実際、ベクトルDBベンダーの多くは「embeddingを保存することは生テキストを保存するより安全」と説明し、ユーザーに機密データのアップロードを推奨してきました。
「不可逆」の前提が崩れた瞬間
2023年、Cornell TechのJack Morrisらが発表した論文「Text Embeddings Reveal (Almost) As Much As Text」(vec2text論文)は、この前提を根底から覆しました。
vec2textは、埋め込みベクトルから元のテキストを反復的に再構成する手法です。OpenAIのtext-embedding-ada-002やGTRなどの主要な埋め込みモデルに対して、32トークン程度の文章であれば92%以上の精度で完全復元できることが示されました。
その後、後続研究が急速に進展しています。
| 攻撃手法 | 発表年 | 特徴 |
|---|---|---|
| vec2text(Morris et al.) | 2023 | 埋め込みごとに専用モデルを訓練。500万ペアのデータと2日間のGPU訓練が必要だが復元精度は最高水準 |
| GEIA(Li et al.) | 2023 | 生成型埋め込み反転攻撃。デコーダLLMへのプロンプトとして埋め込みを利用 |
| Transferable Attack(Chen et al.) | 2024 | モデルへのクエリなしで反転を実行。臨床データセットで実証 |
| ALGEN | 2025 | 少数サンプル(few-shot)のみで反転攻撃を実現 |
| ZSinvert(Zhang et al., Cornell) | 2025 | ゼロショット。埋め込みごとの専用モデル訓練が不要で、あらゆる埋め込みに汎用的に適用可能 |
初期のvec2textは「攻撃に膨大な準備が必要」という弱点がありましたが、ZSinvertやALGENの登場により、事前訓練ほぼなし・少数サンプル・あらゆる埋め込みモデルに対して有効な攻撃が現実のものになりました。これは「特殊な研究者でなければ実行できない攻撃」から「一定のスキルを持つ攻撃者なら誰でも実行可能な攻撃」への転換を意味します。
何が復元されるのか——具体的なリスクシナリオ
埋め込み反転攻撃により、以下のような情報が復元される可能性があります。
- PII(個人情報):氏名、メールアドレス、電話番号、住所が含まれた文章
- 医療・健康情報:症状、診断結果、処方箋情報
- 社内機密:人事情報、給与データ、未公開の事業計画、M&A検討資料
- 顧客データ:問い合わせ履歴、クレーム内容、購買履歴
- ソースコード・設計書:開発中のシステムの構成、APIキー、認証情報
- 法務・契約情報:契約書のドラフト、紛争中の事案の詳細
RAGシステムはまさに、こうした「企業の知識資産」を埋め込みに変換して保存することを目的としています。攻撃者がベクトルDBにアクセスできれば、生テキストを直接窃取するのと同等の被害が発生し得るのです。
主要ベクトルDBでの「ベクトル取り出し」リスク
攻撃者が埋め込み反転攻撃を実行するには、まず「ベクトル本体」を入手する必要があります。主要なベクトルDBで、ベクトルそのものがどこまで取り出せるかを整理します。
Pinecone
マネージドベクトルDBの代表格。fetch APIでIDを指定すれば、保存されたベクトル本体を取得できます。デフォルトでは認証されたAPIキーがあれば誰でもベクトルを取り出せるため、APIキーの漏洩・権限管理の不備が直接的なリスクになります。クエリ結果にinclude_values=trueを指定すると検索結果のベクトルも返却されます。
Qdrant
セルフホスト可能なオープンソースベクトルDB。retrieve APIや検索リクエストのwith_vector=trueパラメータでベクトルを取得可能。デフォルト設定ではAPI keyなしで起動するケースもあり、設定不備のままインターネットに公開された事例が報告されています。
Weaviate
GraphQLベースのクエリで、_additional { vector }を指定するとベクトルを返却。RBAC(ロールベースアクセス制御)機能はあるものの、デフォルトでは無効化されているケースが多く、適切な設定が必要です。
pgvector(PostgreSQL拡張)
PostgreSQL上で動作する軽量な選択肢。ベクトルは通常のテーブルカラムとして保存されるため、SELECT権限があれば誰でも取得可能。Row-Level Security(RLS)を適切に設定しないと、アプリケーションのSQLインジェクション脆弱性などから一括取得される危険があります。
Chroma・Faiss
軽量な開発向けベクトルストア。Faissはローカルファイル(.index形式)として保存されるため、ファイルシステムへのアクセスが直接ベクトル流出につながります。「PoCで使い始めたFaissのインデックスファイルがGitHubの公開リポジトリにコミットされていた」という事例は珍しくありません。
共通する盲点:多くのベクトルDBは「メタデータ(元テキスト)の暗号化」には注意を払うものの、「ベクトル本体」は数値配列に過ぎないという認識から、暗号化対象として扱われないケースが多く見られます。しかし、Embedding Inversion Attackの登場により、ベクトル本体も生テキストと同等の機密性を持つと認識すべき時代になりました。
多層防御設計——5つのレイヤー
Embedding Inversion Attackへの対策は、単一の手法では不十分です。攻撃者の侵入経路と復元手法は多様であり、複数の防御レイヤーを組み合わせる「多層防御(Defense in Depth)」が必要です。
レイヤー1:埋め込み生成前のPIIマスキング
最も根本的な対策は、「そもそも機密情報を埋め込みに変換しない」ことです。
- PII検出ライブラリの活用:Microsoft Presidio、AWS Comprehend、Google Cloud DLPなどを使い、文書中の氏名・メールアドレス・電話番号・マイナンバー等を検出
- マスキング・トークン化:検出したPIIを
[NAME_001]のようなプレースホルダーに置換してから埋め込み生成 - Named Entity Recognition(NER):日本語ではGiNZA、spaCy(ja_core_news_lg)などで固有表現を抽出してマスキング
- 機密度分類:文書を「公開可」「社内限」「機密」「極秘」に分類し、埋め込み対象を「公開可」「社内限」のみに限定
RAGの検索結果として返す段階で、マスキングされたプレースホルダーを元の値に復元する仕組み(vault管理)を組み合わせることで、検索体験を損なわずに機密保護が可能です。
レイヤー2:差分プライバシー(ノイズ注入)
vec2text論文の著者ら自身が、防御策として「埋め込みへのガウシアンノイズ注入」を提案しています。これは差分プライバシー(Differential Privacy)の枠組みで、ベクトルの各次元に小さなランダムノイズを加える手法です。
- 効果:vec2textのような訓練ベース攻撃に対しては高い防御効果。ノイズスケールを大きくするほど反転精度(BLEU値)は低下
- トレードオフ:ノイズが大きすぎると検索精度(nDCG@10)も低下。実務では「検索品質を維持しつつ反転攻撃を妨害する」最適なノイズスケールの調整が必要
- 限界:ZSinvert等の新しい攻撃手法は、ノイズ耐性を一定程度持つことが報告されている
実装は比較的容易で、埋め込み生成後にnumpy.random.normal(0, sigma, size=embedding.shape)のようなコードでノイズを加えるだけです。ただし、ノイズスケールsigmaのチューニングはデータセット依存で、A/Bテストによる最適化が推奨されます。
レイヤー3:次元削減・量子化
2025年の研究で、量子化(Quantization)が埋め込み反転攻撃に対して有効な防御手段であることが示されました。
- PCA次元削減:1,536次元の埋め込みを256〜512次元程度に削減することで、復元に必要な情報量を意図的に削る
- スカラー量子化:float32→int8への変換で精度を意図的に落とす。検索性能(nDCG@10)はほぼ維持しつつ、vec2textのBLEU値を大きく低下させる効果が報告されている
- プロダクト量子化(PQ):FaissやScaNNが採用する手法。検索高速化と防御を同時に実現
- 軽量で展開しやすい:ノイズ注入と異なり、ハイパーパラメータ調整がほぼ不要
ただし、量子化も完全な防御ではなく「センシティブ情報を完全には除去しない」ことが論文で指摘されています。あくまで多層防御の一要素として位置付けるべきです。
レイヤー4:アクセス制御(Row-Level Security)
そもそもベクトルへのアクセス自体を厳格に制限することが、最も基本的かつ効果的な対策です。
- APIキーの最小権限原則:読み取り専用キー、書き込み専用キーを分離。ベクトル本体取得(
include_values=true等)が必要なケースは厳格に制限 - テナント分離:マルチテナント環境では、ネームスペース・コレクション単位で完全に分離
- Row-Level Security:pgvectorではPostgreSQLのRLSポリシーを使い、ユーザー・ロール単位でアクセス可能なベクトルを制限
- ネットワーク分離:ベクトルDBはVPC内に配置し、インターネット直接公開を避ける。Pinecone等のマネージドサービスはPrivate Link / VPC Peeringを利用
- IPアドレス制限:許可されたアプリケーションサーバーのIPからのみ接続を許可
レイヤー5:監査ログとモニタリング
攻撃を完全に防ぐことは現実的に不可能なため、「攻撃の兆候を早期検知する」体制が不可欠です。
- 埋め込み生成ログ:いつ・誰が・どの文書を埋め込みに変換したかを記録
- ベクトル取得ログ:
fetch系API(ベクトル本体を返すリクエスト)のすべてを記録 - 異常検知:短時間に大量のベクトルを取得するパターン、通常業務時間外のアクセス、想定外のIPからのアクセスをアラート
- SIEM連携:Splunk・Datadog・CloudWatch等のSIEMにログを送り、相関分析
- レート制限:APIレベルで「1分あたりN件」などの上限を設定し、一括ダンプを防止
OpenAI Embeddings vs ローカル埋め込みモデルのリスク差
埋め込みモデルの選択そのものが、Embedding Inversion Attackのリスクに影響します。
| モデル | 反転攻撃リスク | 備考 |
|---|---|---|
| OpenAI text-embedding-ada-002 | 高 | vec2text論文で復元実証済み。広く使われており攻撃モデルが流通 |
| OpenAI text-embedding-3-small / large | 中〜高 | 同様の構造。攻撃手法が転移する可能性 |
| Cohere Embed v3 | 中 | クローズドAPI。攻撃モデルの訓練ハードルは相対的に高い |
| multilingual-e5(ローカル) | 中 | オープンソース。エンコーダにアクセスしやすいため攻撃モデル訓練が容易 |
| BGE-M3(ローカル) | 中 | 同上 |
| 独自ファインチューニングモデル | 低〜中 | 攻撃者がモデルにアクセスできなければ訓練ベース攻撃は困難。ただしZSinvert等のゼロショット攻撃には注意 |
「ローカル埋め込みモデルを使えば安全」という単純な話ではなく、モデルの公開度・知名度が高いほど攻撃モデルが流通しやすいという関係があります。一方、独自にファインチューニングしたモデルは、エンコーダ自体が攻撃者から隠蔽されている限り、訓練ベース攻撃のハードルは上がります。
ただし、ZSinvertのようなゼロショット攻撃は「APIへのクエリアクセス」さえあれば実行可能なため、独自モデルでもAPI公開している場合はリスクが残ります。
実務で使えるチェックリスト
RAGを構築・運用している企業が今すぐ確認すべきポイントを整理します。
埋め込み生成段階
- □ 埋め込みに変換する文書の機密度を分類しているか
- □ PII(氏名・メール・電話番号等)を埋め込み変換前にマスキングしているか
- □ マイナンバー・クレジットカード番号等の特定機微情報を除外しているか
- □ 利用する埋め込みモデルの「攻撃実証状況」を把握しているか
ベクトルDB保存段階
- □ ベクトルDBがインターネットに直接公開されていないか
- □ APIキーの権限分離(読み取り専用・書き込み専用)ができているか
- □ ノイズ注入・量子化による反転攻撃対策を導入しているか
- □ pgvector利用時、Row-Level Securityが設定されているか
- □ Faissの
.indexファイルが意図せずGit等にコミットされていないか
運用段階
- □ ベクトル取得API(
fetch等)のすべてのリクエストをログ記録しているか - □ 異常な大量取得パターンを検知できる仕組みがあるか
- □ APIレート制限を設定しているか
- □ インシデント対応手順に「ベクトルDB漏洩時の対応」が含まれているか
- □ 開発環境・PoC環境のベクトルDBにも本番と同等の保護を適用しているか
ガバナンス
- □ 個人情報保護法・GDPR等の観点で「埋め込みベクトル」の法的位置付けを整理しているか
- □ プライバシーポリシーで埋め込み利用について明示しているか
- □ ベンダーとのデータ処理契約(DPA)でベクトルDBの取り扱いを定めているか
特に最後の「法的位置付け」は重要なポイントです。日本の個人情報保護法では、現時点で「個人情報を埋め込みに変換したベクトル」が個人情報に該当するかについて明確なガイドラインはありません。しかし、Embedding Inversion Attackで元情報が復元可能である以上、「個人情報を含む埋め込みベクトル」は個人情報そのものとして扱うのが安全側のスタンスです。
よくある質問(Q&A)
Q1. 自社のRAGはOpenAI APIを直接呼んでいるだけ。ベクトルDBは使っていない場合もリスクはある?
毎回リアルタイムで埋め込みを生成し、検索後に破棄する方式であれば、永続化されたベクトルからの反転攻撃リスクは低くなります。ただし、ログにベクトルが残っている、キャッシュに保存されているなどのケースは注意が必要です。また、OpenAI側のサーバーへの埋め込み送信そのものに機密データを含めるべきかは、別途検討が必要です。
Q2. ベクトルDBに保存しているのは公開情報のマニュアルだけ。それでも対策は必要?
真に公開情報のみであれば、Embedding Inversion Attackの脅威は限定的です。ただし、「公開マニュアル」と思っていた文書に内部用語・顧客固有名・未公開価格などが混在しているケースは多く、棚卸しを推奨します。
Q3. ノイズ注入をすると検索精度が落ちる。導入する価値はある?
適切なノイズスケール(典型的には標準偏差0.01〜0.1程度)であれば、検索精度の低下は数%以内に抑えられることが多くの研究で示されています。一方、反転攻撃のBLEU値は大幅に低下します。「機密データを扱うインデックス」と「公開データのインデックス」を分離し、前者にのみノイズ注入を適用するのも実務的な選択肢です。
Q4. 中小企業でも対策が必要?コストが見合わない気がする。
むしろ中小企業こそリスク管理の観点で重要です。大企業はSOC(セキュリティオペレーションセンター)で異常検知ができますが、中小企業は侵入後に長期間気づかないケースが多くあります。最低限「PIIマスキング」「アクセス制御」「監査ログ」の3つを押さえるだけでも、リスクは大幅に下がります。
Q5. SaaSベンダーが提供するRAG機能を使っている場合、対策はベンダー任せでよい?
ベンダーがどこまで対策しているかは契約・SLA・セキュリティホワイトペーパーで確認すべきです。「埋め込みベクトルの保管方法」「アクセスログの提供」「PIIマスキング機能の有無」「ベクトルDB漏洩時のインシデント通知義務」を最低限確認することをおすすめします。Embedding Inversion Attackについて明示的に言及しているベンダーは、現時点ではまだ少数派です。
まとめ——「ベクトルは安全」という常識を捨てる
本記事の要点を整理します。
1. 「埋め込みベクトルは不可逆」は過去の常識。 vec2text・ZSinvert・ALGEN等の研究により、埋め込みから元テキストを高精度で復元する攻撃が実用段階に入っています。
2. ベクトルDBの設定不備が直接的な漏洩経路になる。 Pinecone・Qdrant・Weaviate・pgvectorのいずれも、APIキー管理・ネットワーク分離・アクセス制御の不備からベクトル本体が流出するリスクがあります。
3. 多層防御が必須。 PIIマスキング・差分プライバシー(ノイズ注入)・量子化・アクセス制御・監査ログの5レイヤーを組み合わせることで、現実的なリスク低減が可能になります。
4. 「埋め込みベクトル=個人情報」として扱う。 法的にグレーな現状でも、安全側に倒した運用設計が、将来の規制強化や訴訟リスクへの最良の備えになります。
RAGは2026年現在、企業のAI活用における最も標準的なアーキテクチャになりつつあります。だからこそ、「ベクトルDBに何を入れているのか」「それは反転攻撃に耐えられるのか」を改めて棚卸しするタイミングです。本記事のチェックリストを、自社RAG環境の点検にぜひ役立ててください。
参考リンク
- Morris et al. “Text Embeddings Reveal (Almost) As Much As Text”(vec2text原論文、2023)
- vec2text 公式GitHubリポジトリ
- Zhang et al. “Universal Zero-shot Embedding Inversion”(ZSinvert論文、2025)
- “ALGEN: Few-shot Inversion Attacks on Textual Embeddings”(2025)
- “Transferable Embedding Inversion Attack”(2024)
- The Gradient: “Do text embeddings perfectly encode text?”(解説記事)
- Microsoft Presidio(PII検出ライブラリ)
免責事項: 本記事は2026年4月時点の公開情報・学術論文に基づく情報提供であり、特定のセキュリティ製品・サービスの推奨や、法的アドバイスを目的とするものではありません。実際のセキュリティ対策の導入にあたっては、自社の環境・要件に応じた専門家による評価をおすすめします。Embedding Inversion Attackの研究は急速に進展しているため、最新の攻撃・防御手法は学術論文や各ベクトルDBベンダーのセキュリティドキュメントを継続的に確認してください。

コメント