Fünf Regeln, fünf Belege, fünf Grenzen — gezeigt an einem Stück Technik, das ich gerade selbst gebaut habe.
Stand 15.08.2026Für Unternehmer, nicht für ITAlle Zahlen gemessen
Du bist hier, weil du wissen wolltest, wie ich arbeite. Die kurze Antwort passt in drei Sätze. Der Rest dieser Seite belegt sie.
Deine Daten landen nicht auf einem amerikanischen Server.
Nicht, weil ich es vorhabe, sondern weil die Technik es nicht zulässt. Du ziehst die Grenze einmal — „das hier bleibt in Europa“ — und danach hält sie, auch wenn niemand mehr daran denkt.
Du bestimmst, welches Modell arbeitet.
Nicht ich, und nicht der Anbieter, der gerade am lautesten wirbt. Und wenn dein Wunsch einmal gegen deine eigene Grenze läuft, gewinnt die Grenze — auch das hast du ja so entschieden.
Umentscheiden kostet Minuten, nicht Tage.
Der Wechsel zwischen angebundenen Anbietern ist eine Einstellung, kein Umbau. Eine Preiserhöhung, ein Ausfall oder eine neue Rechtslage ist damit kein Projekt — und kostet dich entsprechend wenig.
Alle drei klingen wie Werbung. Deshalb steht hinter jedem Satz auf dieser Seite ein Beleg — und die Stelle, an der er aufhört zu wirken.
Zeigen kann ich das nur an etwas, das sich nachrechnen lässt. Deshalb nehme ich hier ein Stück eigene Technik auseinander statt einen Kundenauftrag: Kundendaten gehören den Kunden. In deinem Betrieb stehe ich mit der Stoppuhr neben einem Handgriff statt vor einem Server — die fünf Regeln sind dieselben.
Jeder Abschnitt hat dieselbe Form: die Regel, der Beleg, die Grenze. Die dritte ist mir die wichtigste. Eine Zusage ohne benannte Grenze ist keine Zusage, sondern Werbung.
Wenn dich Technik nicht interessiert: Die fünf Regeln reichen. Alles darunter ist ihr Beleg.
Der Weg einer Anfrage
Sechs Schritte — und das System schreibt jeden davon mit, sodass man sie hinterher nachlesen kann. Der entscheidende ist der dritte:
Was das Haus verlässt, trägt keine Namen mehr — und was zurückkommt, ist trotzdem brauchbar.
Schritt 0 / 6Drück auf „Abspielen“ — oder sieh zuerst, was passiert, wenn der Schutz ausfällt.
Deine Anwendung stellt eine Aufgabe — mit echten Kundendaten.
Die Schleuse prüft zuerst die Regel dieser Aufgabe: Diese Daten dürfen die EU nicht verlassen.
Vor der Weitergabe werden die Personendaten ersetzt. Die Zuordnung bleibt in der Schleuse — sie wird nirgends gespeichert.
Der Anbieter bekommt nur Platzhalter. Die echten Werte sieht er nie — auch nicht in seinem Protokoll.
Die Antwort kommt mit denselben Platzhaltern zurück.
In der Schleuse werden die Werte wieder eingesetzt. Deine Anwendung bekommt Klartext — als wäre nie etwas ersetzt worden.
Grenzen erzwingen, nicht empfehlen
Die Regel
Eine Datenschutz-Zusage gehört in die Technik, nicht in eine Richtlinie. Was nur in einem Dokument steht, hält so lange, wie jemand daran denkt.
Der Beleg
In meinem Gateway ist für jede Aufgabe hinterlegt, in welcher Region ihre Daten verarbeitet werden dürfen. Ein Projekt kann ausdrücklich einen amerikanischen Anbieter bevorzugen — bei einer Aufgabe mit europäischer Vorgabe wird er trotzdem übergangen.
Genau das habe ich getestet: Die Anfrage ging an den europäischen Anbieter, ohne Fehlermeldung, ohne dass jemand daran denken musste. Im Protokoll steht, wer aus welchem Grund übersprungen wurde.
Die Anwendung nennt eine Aufgabe — keinen Anbieter.
Es entscheidet die Regel, die für diese Aufgabe hinterlegt ist.
Europäischer Anbieter — zugelassen
Anbieter außerhalb der EU — gesperrt, im Protokoll vermerkt
Die Anwendung nennt eine Aufgabe, keinen Anbieter. Wer sie bearbeiten
darf, entscheidet die hinterlegte Regel — nicht der Wunsch des Projekts. Der gesperrte Weg
verschwindet nicht, er wird vermerkt.
Die Grenze
Das gilt für Aufgaben, die entsprechend gekennzeichnet sind. Die Kennzeichnung ist eine menschliche Entscheidung, und die treffe ich beim Anlegen einer Aufgabe. Technik kann nicht erraten, ob ein Text Personendaten enthält.
Ein Schutz, der ausfällt, muss laut ausfallen
Die Regel
Wenn eine Schutzfunktion nicht arbeitet, darf die Arbeit nicht einfach weiterlaufen. Sie muss anhalten.
Der Beleg
Vor einzelne Anbieter lässt sich eine Anonymisierung schalten. Ich habe diesen Dienst im laufenden Betrieb abgeschaltet und die Anfrage wiederholt. Ergebnis: Abbruch mit der Meldung „Es wurde nichts gesendet.“ Kein Durchreichen, kein Ausweichen auf einen anderen Anbieter.
Der Vergleich macht den Unterschied deutlich. In einem eigenen Prototyp tat derselbe Dienst bis zum 2. September 2026 das Gegenteil: Fiel er aus, gab er den Originaltext zurück, und niemand merkte es. Ein Totalausfall sah dort aus wie ein sauberes Ergebnis. Seitdem bricht auch er ab und sagt, dass nichts geprüft wurde. Gefunden habe ich das genau deshalb, weil ich solche Sachen zuerst an eigenen Prototypen ausprobiere und nicht an Kundenprojekten.
Die Grenze
Das kostet Verfügbarkeit. Fällt der Schutz aus, fällt die Funktion aus. Wer beides gleichzeitig will, hat sich noch nicht entschieden.
Messen statt behaupten
Die Regel
Was ich über eine Funktion sage, muss geprüft sein. Und eine Prüfung, die nie fehlgeschlagen ist, beweist gar nichts.
Der Beleg
Meine Anonymisierung erkannte deutsche Namen in 66 von 100 Fällen. Die Ausfälle waren nicht zufällig verteilt: Durch fielen die Namen, die auch Substantive sind — Fischer, Weber, Wagner, Koch, Richter. Also die häufigsten.
Namen in einem Satz mit Anrede — „Sehr geehrter Herr Fischer“
Vorher erkannte der Dienst 66 von 100, jetzt alle 100.
Kreditkartennummer, Geburtsdatum, Steuer-ID, Autokennzeichen und sechs weitere Sorten
Vorher fand er 3 von 10, jetzt alle 10.
Derselbe Test gegen den alten Stand — damit er überhaupt etwas beweist
Er meldete 11 Fehler. Er war also wirklich rot, bevor er grün wurde.
Das Vorgehen
Wichtiger als die Zahlen ist das Vorgehen: Ich habe den Test zuerst geschrieben und geprüft, dass er gegen den alten Stand fehlschlägt. Erst danach hatte sein Bestehen eine Aussage.
Die Grenze
Gemessen an meinen Testfällen, nicht an der Welt. Ein Textbaustein, an den ich nicht gedacht habe, ist in keiner dieser Zahlen enthalten.
Die eigenen Grenzen nennen
Die Regel
Wo ein Verfahren aufhört zu wirken, gehört in dieselbe Zeile wie das, was es leistet — nicht in eine Fußnote.
Der Beleg
Meine Anonymisierung erkennt keine Passwörter. Sie kann es prinzipiell nicht: Ein Passwort hat keine Form, an der man es erkennen könnte. In einem Test verschwand meltau69 trotzdem — aber nur durch Zufall, weil das Sprachmodell es für einen Firmennamen hielt. sonne123 und Hafen2024 blieben stehen. Ein blanker Nachname ohne Anrede wird in etwa 60 von 100 Fällen erkannt.
Deshalb sage ich: Das Verfahren reduziert personenbezogene Daten. Es macht einen Text nicht anonym im Sinne der DSGVO, und ich setze es nicht als Torwächter vor eine Weitergabe an Dritte.
Die Grenze
Diese Ehrlichkeit hat einen Preis: Sie klingt schwächer als das, was andere versprechen. Ich halte sie trotzdem für den besseren Handel — eine Zusage, die im Ernstfall nicht trägt, kostet mehr als eine, die von vornherein kleiner war.
Nichts festnageln, was sich morgen ändern kann
Die Regel
Kein Anbieter bleibt für immer der beste, der günstigste oder der zulässige. Wer sich fest verbaut, zahlt später zweimal.
Der Beleg
Bei mir hängen Anwendungen nicht an einem Anbieter, sondern an einer Aufgabe — „fasse diesen Text zusammen“, nicht „frage dieses Modell“. Welcher Anbieter das erledigt, entscheidet sich an einer einzigen Stelle.
Daher die beiden Zahlen aus der dritten Zusage: Der Wechsel zwischen bereits angebundenen Anbietern ist eine Einstellung — Minuten, und keine der angeschlossenen Anwendungen merkt davon etwas. Einen Anbieter neu anzubinden, den es vorher nicht gab, kostet rund zwei Stunden. Vier davon habe ich an einem Arbeitstag angebunden, darunter einen europäischen und zwei amerikanische. Für die angeschlossenen Anwendungen hat sich dabei keine Zeile geändert.
Die Grenze
Austauschbarkeit kostet vorab Aufwand. Sie lohnt sich, sobald es einen zweiten Anbieter oder ein zweites Projekt gibt — vorher ist sie eine Wette auf die Zukunft. Ich gehe sie bewusst ein und sage es dazu.
Woran ich gerade arbeite
Die Regeln oben sind keine Absichtserklärung — sie stecken in dem, was täglich läuft.
Vier davon aus Betrieben wie deinem, und was sich an jedem zeigt.
Kundenprojekt
Verwaltung betrieblicher Altersversorgung
Vertragsdaten, Prüfblätter und Vorschläge für Mandanten. Ein Prüfschritt hält einen
Vorschlag zurück, solange er unvollständig ist — statt ihn mit einem Hinweis durchzulassen.
zeigt: Grenzen erzwingen, nicht empfehlen
Kundenprojekt
Liquiditätsrechner für Unternehmer
Zeigt in etwa 30 Sekunden eine Größenordnung. Rechnet vollständig im Browser:
keine Übertragung, kein Login, keine Speicherung. Und sagt selbst, dass es ein Schätzwerkzeug
ist und keine Beratung ersetzt.
zeigt: Die eigenen Grenzen nennen
Eigenes Werkzeug
CRM mit Zeiterfassung
Vom Kontakt über die gemessene Arbeitszeit bis zur Rechnung. Die Zeit schätzt niemand
hinterher — das System misst sie mit, und Abweichungen fallen auf, weil es zwei Quellen gibt.
zeigt: Messen statt behaupten
Kundenprojekt
Terminbuchung für Praxen
Kalender, Patientenakte und Online-Buchung für Physiotherapie- und ähnliche
Praxen. Jede Praxis hat ihre eigene Datenbank — nicht eine geteilte Tabelle mit einer
Kennung darin.
zeigt: Grenzen erzwingen, nicht empfehlen
Kundennamen stehen hier nicht. Die gehören den Kunden, nicht mir — und ein
Dokument über den Umgang mit fremden Daten sollte damit anfangen. Referenzen nenne ich im Gespräch,
wenn der Kunde einverstanden ist. Dazu kommen eigene Produkte, die öffentlich sind: ein
Redaktionssystem für Tourenberichte und eine Ausrüstungs-App, beide quelloffen.
Was das für dich bedeutet
Nachvollziehbarkeit. Zu jeder Anfrage ist festgehalten, wer sie bearbeitet hat, wie lange es dauerte und ob eine Ersatzroute nötig war. Personendaten stehen dabei nicht im Protokoll — nachgeprüft.
Du behältst die Wahl. Welches Modell arbeitet, entscheidest du — innerhalb der Grenze, die du selbst gezogen hast. Ich habe daran kein Interesse, das über deines geht.
Keine Abhängigkeit von einem Anbieter. Preiserhöhung, Ausfall oder eine neue Rechtslage sind eine Umstellung, kein Umbau.
Kostenkontrolle. Jedes Projekt und jeder deiner Kunden hat ein Tagesbudget. Ist es erreicht, hält der Betrieb an, statt still weiterzulaufen.
Datenschutz, der nicht an Disziplin hängt. Die Regel gilt, auch wenn niemand daran denkt. Das ist der ganze Punkt.
Was ich nicht verspreche
Ich verspreche keine hundertprozentige Erkennung, keine Rechtsberatung und keine Zusicherung, dass ein Text nach der Bearbeitung anonym ist. Ich verspreche, dass ich messe, was ich behaupte, und dass ich dir sage, wo es aufhört zu wirken.
Das ist weniger, als in vielen Angeboten steht. Es ist aber das, was auch nach dem ersten Ernstfall noch stimmt.
Messprotokolle
Diese Seite behauptet Zahlen. Hier stehen die Läufe, aus denen sie stammen — unverändert,
so wie das Testprogramm sie ausgegeben hat — samt fehlender Umlaute, das schreibt es so.
Entziffern musst du nichts: Über jedem Protokoll steht in einem Satz, was darin steht und
worauf es hinausläuft. Wichtig ist vor allem, dass der erste Lauf rot war. Eine
Prüfung, die nie fehlgeschlagen ist, beweist nichts.
Sechs Läufe im Wortlaut anzeigenProtokoll 1Derselbe Test gegen den alten Stand15.08.2026 · test_erkennung.py gegen Fassung 1
Der Lauf gegen den alten Stand — und er fiel durch. Von 150 Namen fand der Dienst 99; verlangt sind 90 Prozent. Kreditkartennummer, Geburtsdatum, Steuer-ID und Kennzeichen blieben komplett stehen. „Unberührt 6/6“ heißt umgekehrt: Sätze ganz ohne Personendaten hat er richtigerweise nicht angefasst.
Namenserkennung: 99/150 = 66% (Schwelle 90%)
Pflichtmuster: 3/10
Unberuehrt: 6/6
Struktur: FEHLER
Ketten: FEHLERFEHLGESCHLAGEN (11):
- Namenserkennung unter Schwelle: 66%
- nicht erkannt ([KARTE]): Zahlung per Visa 4111 1111 1111 1111.
- nicht erkannt ([DATUM]): Geboren am 14.03.1967.
- nicht erkannt ([KENNZIFFER]): Steuer-ID 45 678 901 234.
- nicht erkannt ([KFZ]): Kennzeichen DD-XY 4711.
- nicht erkannt ([TELEFON]): Bitte unter 0176453627 zurueckrufen.
- nicht erkannt ([ADRESSE]): Er wohnt Buehlweg 8d in 12345 Merdingen.
- nicht erkannt ([ADRESSE]): Musterstrasse 12, 04109 Leipzig
- Verschachtelung: Herr Weber aus [ORT] -> Herr Weber aus [[FIRMA]]
- Verkettung unvollstaendig (0 von 3)
- Pseudonyme falsch
Protokoll 2Derselbe Test gegen den neuen Stand15.08.2026 · test_erkennung.py gegen Fassung 2.1
Derselbe Test, dieselbe Maschine, nur der neue Stand. Alle 150 Namen erkannt, alle zehn Pflichtmuster gefunden. Der Wert dieses Protokolls liegt in der Reihenfolge: Es gibt ihn nur, weil Protokoll 1 zuerst da war.
Protokoll 3Namenserkennung je Satzmuster, alt gegen neu30 der häufigsten deutschen Nachnamen, je Muster
Dieselben 30 Nachnamen, in acht verschiedene Sätze eingesetzt — die geschweiften Klammern stehen für den Namen. Links der alte Stand, rechts der neue. Aufschlussreich ist die vierte Zeile: Ein Name ohne Anrede ist deutlich schwerer zu erkennen als einer hinter „Herr“ oder „Frau“.
Satzmuster ALT NEU
Sehr geehrter Herr {}, 14/3030/30
Herr {} hat angerufen. 17/3030/30
Ruecksprache mit Herrn {}. 30/3030/30
Der Kunde {} beschwert sich. 10/3030/30
Frau {} hat zugesagt. 28/30 30/30— ohne Anrede, ohne Rollenwort —
{} hat angerufen. 18/3018/30Durchgefallen sind die Namen, die auch Substantive sind:
Fischer, Weber, Wagner, Koch, Richter, Klein, Schwarz, Braun, Lange.
Protokoll 4Der Schutz fällt aus — es darf nichts hinausgehen15.08.2026 · Dienst im Betrieb gestoppt, Anfrage wiederholt
Die erste Zeile schaltet den Anonymisierungs-Dienst im laufenden Betrieb ab. Die zweite stellt dieselbe Anfrage noch einmal. Was zurückkommt, ist eine Fehlermeldung und kein Ergebnis — an keinen Anbieter ging etwas hinaus.
$ docker stop anonymize-v2$ curl … /v1/tasks/summary.transcript.v1:run
{"error":{
"code": "anonymizer_unavailable",
"message": "Anonymization was required for this request but the
anonymizer did not answer. Nothing was sent."
}}
Protokoll 5Hin und zurück — der Anbieter sieht die echten Werte nie15.08.2026 · hetzner · DeepSeek-V4-Flash-0731 · 5 Stellen ersetzt
Derselbe Text in drei Zuständen: wie er das Haus verließ, wie er zurückkam, und was die Anwendung am Ende bekam. Der Anbieter hat nur die ersten beiden gesehen. Die Namen sind erfunden.
1 · so ging es hinaus
Frau [NAME_1] bittet darum, dass Herr [NAME_2] unter [TELEFON_1]
zurueckruft. Er wohnt [ADRESSE_1] in [ADRESSE_2].
2 · so kam es zurueck
Frau [NAME_1] bittet Herrn [NAME_2], unter [TELEFON_1] zurückzurufen.
Herr [NAME_2] wohnt in [ADRESSE_2] an der Adresse [ADRESSE_1].
3 · so bekommt es die AnwendungFrau Antje Semmelrose bittet Herrn Fridolin Hinterzarter, unter
0176453627 zurückzurufen. Herr Fridolin Hinterzarter wohnt in
12345 Merdingen an der Adresse Buehlweg 8d.
Protokoll 6Die Regel sticht den Wunsch — und das Protokoll bleibt sauber14./15.08.2026 · Projekt hatte den US-Anbieter ausdrücklich bevorzugt
Oben: Das Projekt wollte ausdrücklich den amerikanischen Anbieter, die Aufgabe war aber als „bleibt in Europa“ gekennzeichnet — also ging sie nach Europa, ohne Rückfrage. Unten: eine Volltextsuche durch die Protokolltabellen nach den Klarnamen aus mehreren Läufen. Kein Treffer.
EU-Aufgabe, openai bevorzugt:
provider=hetzner(openai war bevorzugt, wurde übergangen)Volltextsuche über die Protokolltabellen nach mehreren Läufen
mit Klarnamen (requests, jobs):Kein Klarname im Protokoll und in keiner Job-Zeile.
Reproduzierbar über projekte/anonymize/test_erkennung.py
und ai-core/tests/run.php. Die Namen in Protokoll 5 sind erfunden.