162 lines
4.2 KiB
Markdown
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
|