安全

お客様の財務データをどのように保護するか

TL;DR: Bank Statement Parser はすべてのデータをローカルで処理し、デフォルトで PII を秘匿化し、XXE 攻撃に対して XML 解析を強化し、LLM を Ollama 経由でローカル実行し、SHA-256 ハッシュロック依存関係と CycloneDX SBOM を同梱しています。

設計によるセキュリティ

Bank Statement Parser は、機密の財務データを処理するために構築されています。すべての設計上の決定は、セキュリティ、プライバシー、監査可能性を優先します。

ゼロクラウド依存

すべての処理はランタイム内でローカルに行われます。確定的パーサーはネットワーク呼び出しを一切行いません。ハイブリッド PDF パイプラインは Ollama を使用してローカル LLM 推論を行います。クラウド API にデータが送信されることはありません。XML パーサーは no_network=Trueresolve_entities=Falseload_dtd=False で明示的に構成され、送信アクセスを防止します。

PII 秘匿化

個人を特定できる情報(名前、IBAN、住所)は、CLI 出力およびストリーミングモードで自動的に秘匿化されます。デフォルトでオンです。

XML セキュリティ(XXE 保護)

すべての XML 解析は lxml の強化設定を使用します:

ZIP アーカイブのセキュリティ

iter_secure_xml_entries() は抽出前にすべての ZIP メンバーを検証します:

パストラバーサル防止

入力検証により危険なファイルパスをブロックします:

残高検証(ゴールデンルール)

すべての PDF 抽出は opening balance + credits − debits == closing balance の式で検証されます。結果は VERIFIED、DISCREPANCY、FAILED とタグ付けされます。不一致は --type review でインタラクティブにレビューできます。

確定的出力

構造化形式(CAMT、PAIN.001、CSV、OFX、QFX、MT940)の場合、同じ入力ファイルを指定すると、パーサーは毎回バイト同一の出力を生成します。ランダム性、モデル推論、ヒューリスティックサンプリングはありません。これは以下の場面で重要です:

サプライチェーンセキュリティ

ローカルで検証する

python -m pytest                          # 718 tests, 100% branch coverage
python scripts/verify_locked_hashes.py    # SHA-256 hash verification
git log --show-signature -1               # Verify commit signature