Skip to main content

個人情報を仮名化してクラウドLLMに安全に渡すためのツール

Project description

DataAirlock Logo

DataAirlock

PyPI version Python License Security Status

LLMを安全に使うためのローカル仮名化パイプライン

English Documentation | 不具合報告


課題

機密データをLLMに送信することはできません。

患者記録、顧客情報、社内文書——ChatGPTやClaudeなどのクラウドAIに送信した時点で、データの管理権を失います。GDPRはこれを禁止しています。個人情報保護法もこれを禁止しています。御社のセキュリティポリシーもこれを禁止しているはずです。

DataAirlockは、LLM使用前にデータをローカルで仮名化することでこの課題を解決します。

個人情報は可逆的なセマンティックトークン(例:PERSON_001)に置換されます。暗号化されたマッピングはローカルに保存されます。LLM処理後、データを元の形式に復元できます。これはGDPRに準拠した仮名化(pseudonymization)であり、不可逆的な匿名化(anonymization)ではありません。


免責事項

本ツールは個人情報の検出・仮名化を100%保証するものではありません。 出力データは必ずユーザー自身の目で確認してください。 開発者は本ツール使用によるデータの漏洩や損害について一切の責任を負いません。


仕組み

flowchart LR
    subgraph Local["ローカル環境(あなたのPC)"]
        A[("機密データ<br/>山田太郎, 090-1234-5678")] --> B["DataAirlock<br/>仮名化"]
        B --> C[("仮名化データ<br/>PERSON_001, PHONE_001")]
        F["DataAirlock<br/>復元"] --> G[("復元済み結果<br/>山田太郎, 090-1234-5678")]
    end

    subgraph Cloud["クラウド LLM"]
        D["Claude Code<br/>Codex, GPT..."]
    end

    C -.->|"安全に送信"| D
    D -.->|"分析結果"| E[("結果<br/>PERSON_001の来院回数...")]
    E --> F

    style A fill:#ffe0e0,stroke:#cc0000
    style G fill:#e0ffe0,stroke:#00cc00
    style C fill:#fff3cd,stroke:#cc9900
    style E fill:#fff3cd,stroke:#cc9900
    style D fill:#e0e0ff,stroke:#0000cc
  1. 入力 — 個人情報を含むドキュメントやデータセットを読み込む
  2. 仮名化 — DataAirlockが個人情報を検出し、セマンティックトークンに置換
  3. 処理 — 仮名化されたデータを安全にLLMへ送信
  4. 復元 — LLMの出力結果を元のデータに復元

なぜ仮名化(pseudonymization)であり、匿名化(anonymization)ではないのか

匿名化(anonymization) 仮名化(pseudonymization)
可逆性 不可逆 キーにより復元可能
元データ 永久に失われる 復元可能
GDPRでの定義 第26条(適用範囲外) 第4条(5)(リスク軽減措置)
用途 公開データセット 処理ワークフロー

DataAirlockは仮名化を行います。 データは復元可能です。これは意図的な設計であり、LLMの処理結果を実際のエンティティにマッピングし直すワークフローに必要な機能です。


特徴

  • ローカル処理 — 仮名化・復元はすべてローカルで実行。生データがクラウドに送信されることはありません
  • セマンティックトークンPATIENT_001等の意味のあるIDでLLMが文脈を理解
  • 暗号化マッピング — トークンと元データの対応表はFernet(AES-128-CBC)で暗号化
  • ワンコマンド復元 — 分析結果を元のデータに即座に復元
  • CLI完結 — ターミナルで完結、Claude Code や他のCLIツールとシームレスに連携

クイックスタート

インストール

pip install dataairlock

オプション機能を含める場合:

# LLM検出機能(Ollama連携)
pip install dataairlock[ollama]

# Web UI(Streamlit)
pip install dataairlock[streamlit]

# すべての機能
pip install dataairlock[all]

基本的な使い方

# 1. ワークスペースを作成(ファイルを仮名化)
dataairlock workspace ./my_project --add data/patients.csv -p mypassword

# 2. Claude Code を起動(仮名化データで作業)
dataairlock wrap ./my_project --shell
# または
cd ./my_project/.airlock && claude

# 3. 結果を復元
dataairlock workspace ./my_project --restore-all -p mypassword

Claude Code との連携

# 対話シェルを起動(.airlock/ 内で作業)
dataairlock wrap ./my_project --shell

# Claude Code を直接起動
dataairlock wrap ./my_project -c "claude"

# 自動復元付きでスクリプト実行
dataairlock wrap ./my_project -c "python analyze.py" --auto-restore -p mypassword

対応する個人情報(PII)

PIIタイプ 仮名化後の形式
患者ID / カルテ番号 PATIENT_001 P001 → PATIENT_001
氏名(漢字) PERSON_001 山田太郎 → PERSON_001
氏名(カナ) PERSON_KANA_001 ヤマダタロウ → PERSON_KANA_001
電話番号 PHONE_001 090-1234-5678 → PHONE_001
メールアドレス EMAIL_001 test@example.com → EMAIL_001
住所 ADDR_001 東京都新宿区... → ADDR_001
生年月日 1990年代(一般化)または BIRTHDATE_001 1990/01/15 → 1990年代
年齢 30代(一般化)または AGE_001 34歳 → 30代
マイナンバー MYNUMBER_001 123456789012 → MYNUMBER_001

コマンド一覧

コマンド 説明
workspace --add ファイルを仮名化してワークスペースに追加
workspace --add-all フォルダ内の全ファイルを一括追加
workspace --status ワークスペースの状態を表示
workspace --restore 結果ファイルを復元
workspace --restore-all output/内の全CSVを一括復元
wrap 仮名化環境内でコマンドを実行
chat ローカルLLM(Ollama)で対話
scan PII検出のみ(仮名化しない)
pseudonymize 単発ファイルの仮名化
restore 単発ファイルの復元
scan-doc Word/PPTのPII検出
pseudonymize-doc Word/PPTの仮名化
restore-doc Word/PPTの復元
profile list 保存されたプロファイル一覧
profile show プロファイルの詳細表示
profile delete プロファイルを削除
profile export プロファイルをJSONにエクスポート
profile import JSONからプロファイルをインポート
profile create-default デフォルトプロファイルを作成

仮名化戦略

戦略 説明 使用例
replace セマンティックトークンに置換(復元可能) 氏名、患者ID、電話番号
generalize 一般化(年代、都道府県等) 生年月日→年代、住所→都道府県
delete 列ごと削除 不要な個人情報列

PII検出モード

DataAirlockは3つの検出モードをサポートしています。

モード 説明 特徴
rule ルールベース(正規表現) 高速、オフライン動作、デフォルト
llm LLM(Ollama)のみ 高精度、曖昧なPIIも検出
hybrid ルール + LLM の併用 最高精度、推奨

CLIでの使用

# ルールベース(デフォルト)
dataairlock scan data.csv

# LLMモード
dataairlock scan data.csv -m llm

# ハイブリッドモード(推奨)
dataairlock scan data.csv -m hybrid

# 仮名化時も指定可能
dataairlock pseudonymize data.csv -m hybrid -p mypassword

TUIでの使用

TUIでは、フォルダ処理時に「LLMを使用してPII検出の精度を向上させますか?」と確認が表示されます。 「はい」を選択すると、検出モードを選択できます。

Ollamaのセットアップ

LLMモードを使用するにはOllamaが必要です:

# macOS
brew install ollama

# Linux
curl -fsSL https://ollama.ai/install.sh | sh

# サーバー起動
ollama serve

# モデルダウンロード
ollama pull llama3.1:8b

ベンチマーク結果

内蔵テストデータ(11列、明確なPII 5列 + 曖昧なPII 2列 + 非PII 4列)での検出精度:

モード Precision Recall F1スコア 処理時間
rule 1.000 0.714 0.833 0.002秒
llm 1.000 0.429 0.600 15.6秒
hybrid 1.000 0.857 0.923 10.1秒

ハイブリッドモードはルールのみと比較してF1スコアが+10.8%向上し、「担当者」列(「営業部 山本」など)の曖昧なPIIも検出できました。


プロファイル機能

PII処理設定をプロファイルとして保存し、次回以降の作業で再利用できます。 定型業務(例: 毎月の患者データ処理)で同じ設定を繰り返し入力する手間を省けます。

TUIでの使用

TUIでPIIを検出すると、プロファイルの使用を選択できます:

プロファイルを使用しますか?
  > 既存のプロファイルを使用
    新規に設定(プロファイル保存可)
    今回のみ設定(保存しない)

CLIでの使用

# プロファイル一覧を表示
dataairlock profile list

# デフォルトプロファイルを作成
dataairlock profile create-default

# プロファイルの詳細を表示
dataairlock profile show 医療データ

# チームで共有(エクスポート/インポート)
dataairlock profile export 医療データ -o ./medical_profile.json
dataairlock profile import ./medical_profile.json

プロファイル保存先

~/.config/dataairlock/profiles/
├── default.json
├── 医療データ.json
└── 人事データ.json

ディレクトリ構成

my_project/
├── .airlock/                    # ワークスペース(Git管理OK)
│   ├── data/                    # 仮名化済みデータ
│   │   └── patients.csv         # PATIENT_001, PERSON_001...
│   ├── output/                  # LLMの出力先
│   ├── PROMPT.md                # LLM用プロンプトテンプレート
│   └── README.md
├── .airlock_mappings/           # マッピングファイル(Git管理NG)
│   └── patients.mapping.enc     # 暗号化されたマッピング
└── results/                     # 復元済み結果
    └── analysis.csv             # 山田太郎, 090-1234-5678...

セキュリティ

  • 暗号化マッピングファイル — Fernet(AES-128-CBC)で暗号化
  • パスワード必須 — 復元にはパスワードが必要
  • ローカル処理 — 仮名化・復元はすべてローカルで実行。生データがクラウドに送信されることはありません。
  • Git除外.airlock_mappings/.gitignore に自動追加

必要条件

  • Python 3.10+
  • Ollama(chatコマンドおよびLLM検出モードを使う場合のみ)

開発

# クローン
git clone https://github.com/akira0907/dataairlock.git
cd dataairlock

# 開発環境セットアップ
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

# テスト実行
pytest

ライセンス

MIT


作者

@akira0907

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dataairlock-0.4.0.tar.gz (96.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dataairlock-0.4.0-py3-none-any.whl (76.6 kB view details)

Uploaded Python 3

File details

Details for the file dataairlock-0.4.0.tar.gz.

File metadata

  • Download URL: dataairlock-0.4.0.tar.gz
  • Upload date:
  • Size: 96.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for dataairlock-0.4.0.tar.gz
Algorithm Hash digest
SHA256 5bd60f79ed06d9a7c916305b5188c103a291bc839a9d7a499d1ded0c74199a5d
MD5 5a53a7f00a9d98a145f2b90b1e25a3c1
BLAKE2b-256 b07ac0e6a4929425a806814786f855ccffaa4fc74cd7c453ce0e7d3dcb241d78

See more details on using hashes here.

File details

Details for the file dataairlock-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: dataairlock-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 76.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for dataairlock-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7dfa67bae2b6645822dc35c7ffd5f9143dfd7816af909ba45d3e5c3771af72f6
MD5 0c0ce8be5faa9e5b77ef9e360e6e9396
BLAKE2b-256 41fc62f1617f341fc6ac2f5af3e78daf291d7bae984c19a1b7774c9ffab4b0ca

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page