バックアップ・データ保護AI_人工知能セキュリティ

RAG環境を構築して、Thales CTEで
ベクトルDBを暗号化してみた

RAGのベクトルDBをThales CTEで暗号化し、正規アプリ以外の参照を防ぐ検証を行いました。

RAGセキュリティ、聞いたことありますか。

RAGは簡単に言うと、社内情報を検索し、その結果をLLMに渡して回答を生成する仕組みです。実装によっては、検索用のベクトルDBに元文書のチャンクやメタデータが保存されます。元ファイルだけを保護しても、ベクトルDBを直接読み取られると、情報が漏えいする可能性があります。

Thales CTEは、ベクトルDBをファイルシステムレベルで暗号化し、CTEポリシーで許可したユーザーやプロセスだけが平文として読み取れるように制御できます。今回は、許可されたRAGアプリだけがGuardPoint内のベクトルDBを復号して参照できるかを検証しました。確認項目は次の3点です。

① 正規のRAGアプリは、従来どおり検索・回答できる
② 他の未許可プロセスは、ベクトルDBを平文で読み取れない
③ 疑似ツールがファイルをコピーしても、持ち出し先では復号できない(情報流出対策)

■検証環境の概要

<簡易RAG環境>

全部ローカルの小さなRAGです。チャットは RAGCteChatbot.exe、比較用の疑似ツールは RAGCteRansom.exe(コピーのみ)です。

– OS: Windows Server 2025 Datacenter(Build 26100)
– Python 3.14.3 / Ollama 0.34.0 / llama3.2
– Vector DB: SQLite(runtime\vectorstore\sqlite\vectors.sqlite3
– Thales CTE Agent 7.9.0.127(GuardPointはこのフォルダ)

 簡易RAG環境

<CTE設定>

CTE設定

上記はThales CTEエージェントのポリシー設定です。Order順に処理が流れます。

Order1:こちらはLDT使用時の必須設定なので無視してください。

Order2:test-resource-set-1は暗号化対象のベクトルDBが格納されたフォルダ、Test-process-set1には正規アプリ(RAGCteChatbot.exe)が設定されています。Effectにapplykeyが設定されているため、暗号化されたDBを復号化してアプリ上で利用することができます。

Order3:その他の操作は全て、このOrderの設定が適用されます。permit(対象フォルダへのアクセス許可)はあるものの、applykeyがありません。よって、アクセスはできるが復号できないため中身が見れない設定となっています。

対象 Effect 実質的な意味
正規RAGアプリ permit, audit, applykey ファイル操作と平文復号が可能
その他のプロセス permit, audit ファイル操作は許可されるが、平文復号は不可

CTEのいいところは、アプリケーション側で暗復号を意識しなくてよいところです。OSにインストールされたCTEエージェントが動き、許可プロセス・ユーザー・操作だけ、対象データを透過的に暗復号します。

■確認できたこと3つ

①正規アプリは、暗復号を意識せずベクトルDBを参照して回答が返ってきました。CTEログ上でも、復号成功のメッセージが出力されていました。
・簡易チャットボットアプリ

簡易チャットボットアプリ

#当社が取り扱うThales製品「payShield 10K」のマニュアルをインデックス化させています。

・CTEログ (1A,2Mは、復号許可のあるOrder2のポリシー適用を示す)
———–
2026-09-10 23:25:34.302 [CGP] [INFO ] [4172] [CGP2601I] [AUDIT] Policy[test-policy1] User[Administrator\\\\WIN-U1FDI4T8LS2] Process[C:\\Users\\Administrator\\Projects\\RAG-CTE-Lab\\dist\\RAGCteChatbot.exe] Action[read_file] Res[C:\\Users\\Administrator\\Projects\\RAG-CTE-Lab\\runtime\\vectorstore\\sqlite\\vectors.sqlite3] Key[LDT-key-1] Effect[PERMIT Code (1A,2M)]
———–

 

②PowerShell上のpythonコマンドは、同じサーバー・同じユーザーでもDBを読み取れませんでした。「Administratorだから読める」ではなく、「復号してよいプロセスか」で制御できている証拠になります。

・PowerShell上でクエリ失敗(暗号化されているため、DBとして認識できない)
———–
PS C:\Users\Administrator\Projects\RAG-CTE-Lab> .\.venv\Scripts\python.exe -c “import sqlite3,json; p=r’C:\Users\Administrator\Projects\RAG-CTE-Lab\runtime\vectorstore\sqlite\vectors.sqlite3′;
~省略~ 
sqlite3.DatabaseError: file is not a database
PS C:\Users\Administrator\Projects\RAG-CTE-Lab>
———–

・CTEログ(1A,2P,3Mは、復号許可のないOrder3のポリシー適用を示す)
———–
2026-09-11 11:54:00.030 [CGP] [INFO ] [12556] [CGP2601I] [AUDIT] Policy[test-policy1] User[Administrator\\\\WIN-U1FDI4T8LS2] Process[C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python314\\python.exe] Action[read_file] Res[C:\\Users\\Administrator\\Projects\\RAG-CTE-Lab\\runtime\\vectorstore\\sqlite\\vectors.sqlite3] Key[None] Effect[PERMIT Code (1A,2P,3M)]
———–

 

③疑似ツールは、コピーできても窃取先は暗号文のままでした。GuardPointの外でSQLiteとして開いても中身は使えません。

・疑似ツールを実行し、theftフォルダ配下に移動。

theftフォルダ配下に移動させる図

・theft配下の窃取したファイルも、暗号化されていて参照できません。
———–
PS C:\Users\Administrator\Projects\RAG-CTE-Lab> .\.venv\Scripts\python.exe -c “import sqlite3,json; p=r’C:\Users\Administrator\Documents\theft\20260911T055317Z\vectors.sqlite3‘; c=sqlite3.connect(p);
~省略~
sqlite3.DatabaseError: file is not a database
PS C:\Users\Administrator\Projects\RAG-CTE-Lab>
———–

■Tips. 総務省ガイドラインでも述べられているRAGデータ保護

総務省「AIのセキュリティ確保のための技術的対策に係るガイドライン」(令和8年3月)では、RAG等の権限管理について、次の考慮点が示されています。

> RAG用のデータ及びデータストアへの参照権限をユーザーや役割に応じて適切に設定する

出典:[3.4節](https://www.soumu.go.jp/main_content/001064122.pdf)

これは、RAGの利用者や役割に応じて、検索・参照できるデータ範囲を適切に制御することを意味します。

CTEを組み合わせることで、ユーザーやプロセス等に応じたアクセス制御に加え、ベクトルDBをファイルシステムレベルで暗号化できます。正規のRAGアプリには透過的に利用させながら、未許可プロセスによる直接参照や、暗号化データを持ち出された後の復号を防ぐデータ層の対策を追加できます。

■まとめ

フロンティアAI時代の到来に伴い、Security for AI としてAIガードレール、プロンプトセキュリティ等様々な技術領域が進化してきています。今回は、RAGセキュリティの観点で、Thales CTEを使ってベクトルDBの保護を検証してみました。今回はファイルシステム上での検証でしたが、AI基盤でよく使われるコンテナの暗号化にも対応しています。(CTE for k8s)
Thalesはその他にもSecurity for AIを実現する製品を数多く取り揃えていますので、ご興味がある方はお気軽にお問い合わせください!

この記事に関連する製品・サービス