Files

162 lines
4.2 KiB
Markdown

# 🔐 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