Skip to content

Cortina

Cortina ist ein Pseudonymisierungs-Microservice, der vor deinen LLM-Aufrufen sitzt. Du schickst Originaltext rein, bekommst anonymisierten Text mit Platzhaltern wie [PERSON_1] oder [DE_IBAN_1] zurück, schickst diesen Text an OpenAI / Anthropic / Vertex / Bedrock, und löst die Platzhalter im LLM-Output auf der Rückseite wieder gegen das Original auf.

Hans Müller, IBAN DE89 3704 0044 0532 0130 00, ruft +49 89 1234567 an.
▼ POST /v1/cortina/anonymize
"[PERSON_1], IBAN [DE_IBAN_1], ruft [DE_PHONE_NUMBER_1] an."
▼ → an dein LLM
anonymisierte Antwort vom LLM
▼ POST /v1/cortina/deanonymize
Original-PII über das verschlüsselte Redis-Mapping rekonstruiert.

DSGVO-Pseudonymisierung (Art. 32) als technische Schutzmaßnahme. Drei harte Garantien, die im Code verdrahtet sind:

  • Originaltext landet nie in Postgres. Nur Redis, verschlüsselt mit AES-256-GCM und einer TTL pro Session.
  • Audit-Logs enthalten nie Originaltext, Pseudonyme oder rohe IPs — nur aggregierte Stage- und Entity-Type-Counts plus Audit-Flags.
  • API-Keys werden mit Salt SHA256-gehasht gespeichert. Plaintext wird genau einmal beim Erstellen ausgegeben; ein verlorener Key wird neu generiert, nicht wiederhergestellt.

Cortina hat drei Endpoints — Session, Anonymize, Deanonymize — und eine vierstufige Pipeline:

StageToolingWas es findet
1Presidio + DE-Pattern-RecognizerIBAN (Mod-97), Steuer-ID, Telefon, Adresse, Email, Kreditkarte, IP
2spaCy NER (de_core_news_md)PERSON, ORG, LOCATION
3Bedrock Claude (eu-central-1) — strict additivNATIONALITY, RELIGION, EVENT, MISC_OTHER (Art. 9-Lücke)
4Vertex Gemini (europe-west3) — Adversarial-LoopRe-ID-Risiken, die nach Stages 1–3 noch im Output stehen

Earlier-Stage-wins-Regel auf Span-Überlappung: ein per Mod-97 validiertes IBAN überstimmt einen LLM-„Ich bin unsicher”-Vorschlag immer.