# 🔐 Privacy Gateway Anonymizer PII-Erkennungs- und Anonymisierungs-Service für das Privacy Gateway. Nutzt lokale LLMs (Ollama) zur Erkennung persönlicher Daten mit Pattern-basiertem Fallback. ## Features - 🤖 **LLM-basierte PII-Erkennung** via Ollama - 🛡️ **10 PII-Typen** erkannt: Namen, Adressen, E-Mails, Telefonnummern, IBANs, etc. - 🔄 **Re-Identifizierung** für nachgelagerte Prozesse - ⚡ **Pattern-Fallback** bei LLM-Ausfall - 📊 **Sensitivitäts-Bewertung** (low/medium/high/critical) - 💾 **Mapping-Serialisierung** für Persistenz ## Schnellstart ```typescript import { anonymize, reIdentify } from './index.js'; // Anonymisieren const result = await anonymize( 'Hallo Max Mustermann, kontaktiere mich unter max@beispiel.de' ); console.log(result.anonymizedText); // "Hallo [NAME_1], kontaktiere mich unter [EMAIL_1]" // Re-Identifizieren const restored = reIdentify(result.anonymizedText, result.mapping); console.log(restored.reidentifiedText); // "Hallo Max Mustermann, kontaktiere mich unter max@beispiel.de" ``` ## Unterstützte PII-Typen | Typ | Beschreibung | Beispiel | Sensitivität | |-----|-------------|----------|--------------| | `name_person` | Personenname | Max Mustermann | 🔴 high | | `name_company` | Firmenname | Musterfirma GmbH | 🟡 medium | | `address` | Vollständige Adresse | Musterstraße 1, 12345 Berlin | 🔴 high | | `email` | E-Mail-Adresse | max@beispiel.de | 🔴 high | | `phone` | Telefonnummer (DE) | +49 170 12345678 | 🟡 medium | | `birthdate` | Geburtsdatum | 15.03.1985 | 🔴 high | | `account_number` | Kontonummer | 1234567890 | 🔴 critical | | `iban` | IBAN | DE89 3704... | 🔴 critical | | `employee_id` | Personalnummer | EMP-12345 | 🟡 medium | | `credit_card` | Kreditkartennummer | 4111 1111... | 🔴 critical | ## API-Referenz ### `anonymize(text, config?)` Anonymisiert einen Text durch Erkennung und Ersetzung von PII. **Parameter:** - `text` (string): Zu anonymisierender Text - `config` (optional): Konfigurationsobjekt **Rückgabe:** `AnonymizeResult` ```typescript { success: boolean; anonymizedText: string; mapping: ReverseMapping; sensitivityLevel: 'low' | 'medium' | 'high' | 'critical'; piiCount: number; processingTimeMs: number; error?: string; usedFallback?: boolean; } ``` ### `reIdentify(anonymizedText, mapping, options?)` Stellt einen anonymisierten Text wieder her. **Parameter:** - `anonymizedText` (string): Anonymisierter Text mit Platzhaltern - `mapping` (ReverseMapping): Mapping von Platzhalter zu Originalwert - `options` (optional): Optionen für die Re-Identifizierung **Rückgabe:** `ReidentifyResult` ```typescript { success: boolean; reidentifiedText: string; replacementsMade: number; errors: string[]; } ``` ### `createAnonymizer(config?)` Erstellt eine konfigurierte Anonymizer-Instanz. ```typescript const anonymizer = createAnonymizer({ ollamaUrl: 'http://localhost:11434', model: 'llama3.2', timeoutMs: 30000, maxRetries: 2, fallbackEnabled: true, }); ``` ## Konfiguration Umgebungsvariablen: ```bash OLLAMA_URL=http://192.168.2.122:11434 OLLAMA_MODEL=llama3.2 OLLAMA_TIMEOUT=30000 ``` ## Integration im Backend ```typescript import { getAnonymizer, maskForLog } from '@privacy-gateway/anonymizer'; const anonymizer = getAnonymizer(); // Vor dem Senden an externe KI const { anonymizedText, mapping, sensitivityLevel } = await anonymizer.anonymize(userInput); // Log mit maskierten Werten console.log(`Sensitivität: ${sensitivityLevel}, PII: ${piiCount}`); // Nach Antwort der KI const restored = anonymizer.reIdentify(aiResponse, mapping); ``` ## Tests ```bash npm test ``` ## Projektstruktur ``` anonymizer/ ├── src/ │ ├── index.ts # Haupt-Export │ ├── anonymizer.ts # Kern-Logik │ ├── reverser.ts # Re-Identifizierung │ ├── pii-types.ts # Typ-Definitionen │ ├── prompts/ │ │ └── pii-detection.ts # LLM-Prompts │ ├── utils/ │ │ └── text.ts # Hilfsfunktionen │ └── test/ │ └── test-cases.ts # Testfälle ├── package.json ├── tsconfig.json ├── Dockerfile └── README.md ``` ## Lizenz MIT