🔐 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
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 Textconfig(optional): Konfigurationsobjekt
Rückgabe: AnonymizeResult
{
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 Platzhalternmapping(ReverseMapping): Mapping von Platzhalter zu Originalwertoptions(optional): Optionen für die Re-Identifizierung
Rückgabe: ReidentifyResult
{
success: boolean;
reidentifiedText: string;
replacementsMade: number;
errors: string[];
}
createAnonymizer(config?)
Erstellt eine konfigurierte Anonymizer-Instanz.
const anonymizer = createAnonymizer({
ollamaUrl: 'http://localhost:11434',
model: 'llama3.2',
timeoutMs: 30000,
maxRetries: 2,
fallbackEnabled: true,
});
Konfiguration
Umgebungsvariablen:
OLLAMA_URL=http://192.168.2.122:11434
OLLAMA_MODEL=llama3.2
OLLAMA_TIMEOUT=30000
Integration im Backend
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
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