Skip to main content

DSGVO-konformes Erkennen und Ersetzen von PII in LLM-Prompts

Project description

privacy-guard

PyPI Python License: MIT Tests PyPI Publish Docker Publish Docker Hub

DSGVO/GDPR-konforme PII-Anonymisierung für LLM-Workflows.

privacy-guard erkennt personenbezogene Daten zuverlässig in deutschem Text, ersetzt sie durch stabile Platzhalter und ermöglicht eine saubere Rückführung nach der Verarbeitung. Kein ML-Inference-Overhead zur Laufzeit für die meisten Detektoren, klare Ergebnisse, API-ready.

privacy-guard hero

Highlights

  • 🔒 Compliance-first: Schutz sensibler Daten vor externen LLMs
  • ⚡ Runtime-freundlich: Regex/Regel-Detektoren ohne schweren Inference-Stack
  • 🔁 Deterministisch: stabile Platzhalter plus verlustfreie Rückführung
  • 🐳 Deploy-ready: Python Package und FastAPI/Docker sofort nutzbar

Warum privacy-guard?

  • Schützt sensible Daten vor dem Versand an externe Modelle
  • Ersetzt PII durch deterministische Platzhalter wie [NAME_1], [IBAN_1]
  • Stellt Originalwerte mit ScanResult.restore() wieder her
  • Löst überlappende Treffer mit Prioritätslogik (z. B. SECRET > IBAN > EMAIL > ...)
  • Unterstützt Python-Package und FastAPI/Docker-Betrieb

Erfasste PII-Typen

Typ Beispiel Hinweis
NAME Dr. Anna Schmidt via spaCy NER (de_core_news_sm)
IBAN DE89 3704 0044 0532 0130 00 inkl. ISO-7064-Prüfung
PHONE +49 89 12345678 deutschsprachige Formate
EMAIL kontakt@example.de RFC-nahe Muster
ADDRESS Hauptstraße 12, 79100 Freiburg regelbasiert
SECRET API-Keys, Tokens, Passwörter 100+ Musterregeln

Zusätzlich: Personen des öffentlichen Lebens werden per interner Liste standardmäßig nicht maskiert.

Installation

Python Package

pip install privacy-guard-scanner

Für den Namensdetektor wird ein spaCy-Modell benötigt:

pip install "de_core_news_sm @ https://github.com/explosion/spacy-models/releases/download/de_core_news_sm-3.8.0/de_core_news_sm-3.8.0-py3-none-any.whl"
# oder:
python -m spacy download de_core_news_sm

API-Stack lokal

pip install -e ".[api]"
uvicorn api.main:app --reload --port 8000

Quickstart (Python)

from privacy_guard import PrivacyScanner

scanner = PrivacyScanner()

result = scanner.scan(
    "Bitte überweise 500 EUR an Hans Müller, "
    "IBAN DE89 3704 0044 0532 0130 00. "
    "Rückfragen an h.mueller@example.de oder +49 89 123456."
)

print(result.anonymised_text)
# Bitte überweise 500 EUR an [NAME_1], IBAN [IBAN_1]. Rückfragen an [EMAIL_1] oder [PHONE_1].

print(result.mapping)
# {'[NAME_1]': 'Hans Müller', '[IBAN_1]': 'DE89 3704 0044 0532 0130 00', ...}

llm_answer = "Vielen Dank, [NAME_1]. Die Daten zu [IBAN_1] sind verarbeitet."
print(result.restore(llm_answer))
# Vielen Dank, Hans Müller. Die Daten zu DE89 3704 0044 0532 0130 00 sind verarbeitet.

Scanner konfigurieren

from privacy_guard import PiiType, PrivacyScanner

scanner = PrivacyScanner(extra_whitelist_names=["Erika Musterfrau"])
scanner.disable_detector(PiiType.NAME)
scanner.enable_detector(PiiType.NAME)

result = scanner.scan("Kontakt: erika@example.de")

Nur bestimmte Findings auswerten:

from privacy_guard import PiiType

secrets = [f for f in result.findings if f.pii_type == PiiType.SECRET]
for finding in secrets:
    print(finding.rule_id, finding.text, finding.confidence)

REST API (Docker)

docker run -p 8000:8000 noxway/privacy-guard:latest

Alternativ via Compose:

docker compose up

Endpunkte

Methode Pfad Beschreibung
GET /health Liveness-Check
POST /scan Vollständiger Scan (Findings + Mapping + anonymisierter Text)
POST /anonymize Nur anonymisierten Text zurückgeben

Request-Body

{
  "text": "Hans Müller, IBAN DE89370400440532013000",
  "detectors": ["IBAN", "EMAIL"],
  "whitelist": ["Hans Müller"]
}

Beispiel mit curl

curl -X POST http://localhost:8000/scan \
  -H "Content-Type: application/json" \
  -d '{"text": "Kontakt: hans@example.de, IBAN DE89370400440532013000", "detectors": ["EMAIL", "IBAN"]}'

API-Konfiguration

Variable Standard Bedeutung
API_KEY leer Wenn gesetzt, muss X-API-Key mitgesendet werden
CORS_ORIGINS * Kommagetrennte Origins, z. B. https://app.example.com

Beispiel:

services:
  api:
    image: noxway/privacy-guard:latest
    ports:
      - "8000:8000"
    environment:
      API_KEY: my-secret-key
      CORS_ORIGINS: https://app.example.com

Roadmap-Ideen

  • Verbesserte Entitäten-Erkennung für Adressen in DACH-Varianten
  • Optionales Audit-Logging für Compliance-Reports
  • Erweiterte Mehrsprachigkeit über Deutsch hinaus

Lizenz

MIT. Details in LICENSE.

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

privacy_guard_scanner-1.0.1.tar.gz (27.5 kB view details)

Uploaded Source

Built Distribution

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

privacy_guard_scanner-1.0.1-py3-none-any.whl (32.1 kB view details)

Uploaded Python 3

File details

Details for the file privacy_guard_scanner-1.0.1.tar.gz.

File metadata

  • Download URL: privacy_guard_scanner-1.0.1.tar.gz
  • Upload date:
  • Size: 27.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for privacy_guard_scanner-1.0.1.tar.gz
Algorithm Hash digest
SHA256 0e6a08642fbf3c94b88ad24a1ba628c312e3b83c396c367927bf7e0ee1101c94
MD5 e1a31231a3242cc96b4a3544ac1e6516
BLAKE2b-256 2d0de16e6e257810e5ed06a6427767347ba0903d1b1011fa9e54136e12594700

See more details on using hashes here.

Provenance

The following attestation bundles were made for privacy_guard_scanner-1.0.1.tar.gz:

Publisher: release.yml on adrian-lorenz/privacy-guard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file privacy_guard_scanner-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for privacy_guard_scanner-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3064617fc6fea732c9e478c0582093b4b67e2bafb62f62c7995a5da7de652123
MD5 224d81d626cfe5252f5563a7c39c9159
BLAKE2b-256 d9800c67557786cbd09c2e30968f48a1e5e336c3da2bbeb36d86644e3035441d

See more details on using hashes here.

Provenance

The following attestation bundles were made for privacy_guard_scanner-1.0.1-py3-none-any.whl:

Publisher: release.yml on adrian-lorenz/privacy-guard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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