Sie können Ihrem Board nicht länger erzählen, dass „Verschlüsselung im Ruhezustand“ ausreicht. Ihre Juristen wissen es besser, Ihre Kunden erwarten es, und jeder Engineer mit psql-Zugriff kann weiterhin die sensibelsten Daten in Ihrem System per SELECT auslesen. Gleichzeitig müssen Sie sie aber durchsuchen können: Nutzer per E-Mail finden, Telefonnummern deduplizieren, nach Geburtsdatumsbereichen filtern. Vollhomomorphe Kryptografie wird Sie 2026 nicht retten. Praktische durchsuchbare Verschlüsselung schon — wenn Sie die richtigen Muster wählen, die akzeptablen Leckagen definieren und das Ganze operativ verankern.
Was sich gerade geändert hat: Durchsuchbare Verschlüsselung auf Feldebene ist vom Forschungsthema zur Roadmap geworden
Der Hype letzte Woche um Supabase, das durch CipherStash feldweise verschlüsselte Suche einführt, ist mehr als ein Produkt-Update — es ist das Signal, dass durchsuchbare Verschlüsselung endlich den Sprung in den Mainstream schafft. Sie müssen keinen maßgeschneiderten Kryptoservice mehr betreiben, damit Gleichheits- und Bereichsabfragen auf verschlüsselten Daten funktionieren. Und Sie müssen nicht mehr zwischen „niemand kann irgendetwas abfragen“ und „DBAs können alles lesen“ wählen.
Der Haken: Sie müssen explizit festlegen, welche Abfragen Sie unterstützen, welche Leckagen (Reihenfolge, Häufigkeit, Zugriffsmuster) Sie tolerieren und wo Schlüssel leben. Ignorieren Sie diese Trade-offs, und Sie ruinieren entweder die Performance oder eröffnen Angreifern einen Seitenkanal.
Beginnen Sie mit einem Threat Model, nicht mit einer Bibliothek
Wenn Sie nicht aufschreiben, gegen wen Sie schützen wollen, über- oder unter-engineeren Sie. Hier ist das schnelle Scoring-Framework, das wir mit CTOs nutzen:
Gegner, die Sie wahrscheinlich berücksichtigen müssen
- Cloud-Insider und DB-Snapshots: Verwaltete Postgres-Backups, Datenbank-Logs, Supportzugriffe. Verschlüsselung im Ruhezustand schützt Datenträger, nicht Betreiber.
- Exfiltration via SQL-Injection oder falsch konfigurierte Read-Replica: Automatisierte Angreifer, die Tabellen dumpen können, aber Ihren App-Code nicht ausführen.
- Behördliche Anfragen oder Data-Residency-Drift: Sie müssen ggf. nachweisen, dass Produktionspersonal (oder sogar Ihre Cloud) bestimmte Felder nicht entschlüsseln kann.
Gegner, gegen die Sie mit Kryptografie allein vermutlich nicht gewinnen
- Vollständig kompromittierte App-Ebene: Wenn ein Angreifer den Prozess kontrolliert, der die Schlüssel hält, kann er entschlüsseln. Mit Rate Limits, Anomalieerkennung und kurzlebigen Schlüsseln kompensieren — aber Entschlüsselung als möglich annehmen.
- Perfekt versteckte Zugriffsmuster: Oblivious RAM ist für Ihr SaaS weiterhin unpraktisch. Akzeptieren Sie, dass Zugriffsmuster ohne hohen Aufwand lecken.
Übersetzen Sie das in eine Policy: „PII vor Datenbank- und Cloud-Operatoren schützen; Leckage von Abfragemustern tolerieren; App-Kompromittierung bedeutet Entschlüsselung; feldweise verschlüsseln mit Schlüsseln, die die DB niemals sieht.“
Der Entscheidungsrahmen: Wählen Sie Techniken pro Abfrage, nicht pro Tabelle
Durchsuchbare Verschlüsselung ist ein Baukasten. Nutzen Sie das leichteste Werkzeug, das Ihre Abfrage-Semantik und Ihr Threat Model erfüllt.
1) Kartieren Sie Ihre Abfragemuster
- Gleichheit: Suchen nach E-Mail, Telefon, SSN/CPF/CNPJ, Rechnungs-ID.
- Präfix: E-Mail nach Benutzername oder Telefon nach Ländervorwahl + Ortsnetzvorwahl.
- Bereich/Sortierung: Geburtsdatenbereiche, Bestellbeträge zwischen X und Y, Sortierung nach last_activity_at.
- Fuzzy/Text: Namenssuche, Adresse enthält Substring.
Danach Sensitivität labeln. E-Mail, Telefon, SSN/CPF sind hoch sensitiv. Postleitzahl, Stadt oder Bundesstaat sind niedriger (aber in vielen Regimen weiterhin PII). Verschwenden Sie keine kryptografische Komplexität für nicht-sensitive Aggregate.
2) Das richtige Primitive pro Feld wählen
Das sind die Bausteine, die 2026 tatsächlich in Produktion gehen:
- Deterministische Verschlüsselung (DE) für Gleichheit: Eingaben kanonisieren (E-Mail in Kleinschreibung, Telefon im E.164-Format), dann mit einem deterministischen Modus verschlüsseln (z. B. AES-SIV). Gleicher Klartext → gleicher Ciphertext, ermöglicht Gleichheitsvergleiche und gehashte Indizes. Leckage: Häufigkeit (gleiche Werte erzeugen gleichen Ciphertext), Gleichheitsmuster über Zeilen hinweg.
- Blind-Indizes für Gleichheit und Präfix: Ein HMAC mit einem geheimen Salt über den kanonischen Wert berechnen (oder dessen N-Gramme für Präfixsuche) und diese Tokens indexieren. In der DB nur Tokens speichern, nicht Klartext oder Salts. Leckage: Token-Gleichheit und -Häufigkeiten; mitigiert durch mandantenspezifische Salts und ein Pepper im KMS.
- Order-Revealing oder bucketisierte Bereiche: Echte Order-Revealing-Verschlüsselung existiert, aber die Leckage kann unschön sein. Ein pragmatisches Muster ist Bucketisierung: Ein numerisches/zeitliches Feld auf Buckets abbilden (z. B. Monat, $10-Spannen) und Bucket-Tokens indexieren. Gröbere Granularität → weniger Leckage und kleinere Indizes, aber mehr False Positives, die Sie in der App herausfiltern.
- Verschlüsselte Suche client- oder service-seitig für Text: Wenn Sie Volltextsuche über sensitive Felder brauchen, akzeptieren Sie, dass Sie das Indexieren auf einen Client oder einen dedizierten verschlüsselten Suchdienst verlagern, der Schlüssel auf Applikationsseite hält (CipherStash ist eine Option). Fuzzy-Textsuche mit kryptografischen Garantien an Postgres dranzuschrauben, ist das Todesurteil für Projekte.
Realitätscheck: 80 % der Abfragen über sensitive Felder in B2B-SaaS sind Gleichheit oder grobe Bereiche. Das bekommen Sie heute ohne „Moon Math“ sicher hin.
3) Schlüsselverwaltung, die die Latenz nicht torpediert
- Hüllschlüssel (Envelope Keys) pro Mandant: Pro Mandant oder Dataset einen Data Encryption Key (DEK) erzeugen. DEKs mit einem Key Encryption Key (KEK) in einem verwalteten KMS (AWS KMS, GCP KMS) verschlüsseln. Den verschlüsselten DEK bei den Mandantenmetadaten ablegen.
- Cache vorwärmen: Beim App-Start oder bei Mandantenzugriff den DEK einmalig über KMS entschlüsseln und mit kurzer TTL (z. B. 10–15 Minuten) im Speicher halten. Rechnen Sie mit ~1–3 ms pro KMS-Decrypt im Warmbetrieb; nicht pro Zeile ausführen.
- Rotation ohne Downtime: DEKs versionieren. Beim Schreiben DEK v2 verwenden; beim Lesen zuerst v2 versuchen, dann auf v1 zurückfallen. In Batches nachziehen.
- Geteiltes Vertrauen: Salts/Pepper für Blind-Indizes im KMS oder einem HSM-gestützten Dienst halten; niemals in der DB speichern.
4) Leistungs- und Speicherkalkulation (damit Sie nicht raten)
- Gleichheit mit DE oder Blind-Index: Speicher-Overhead ~1,1–1,3× pro Feld (Ciphertext + Token). Abfragelatenz-Overhead wird von Netzwerk/IO dominiert; erwarten Sie +5–15 ms p95 gegenüber einem typischen indizierten Lookup, bedingt durch Tokenisierung auf App-Seite und Post-Filtering.
- Präfix mit N-Grammen: Wenn Sie 3-Gramme für lokale Teile von E-Mails indexieren, speichern Sie ~L-2 Tokens pro Wert (L = Zeichen im präfixfähigen Segment). Eine Index-Aufblähung von 2–4× ist üblich; halten Sie Präfixfelder begrenzt und normalisiert.
- Bucketisierte Bereiche: Mit monatlichen Buckets für Datumswerte umfasst ein 10-Jahres-Fenster 120 Buckets. Die meisten Abfragen treffen 1–3 Buckets. Erwarten Sie eine False-Positive-Verstärkung von 1,2–1,5×, die Sie in der App filtern. End-to-End-Overhead von +10–30 ms p95 ist typisch.
- Verschlüsselte Textsuche via Service: Indizes können das 2–5× der Rohtexte sein, und die Ingestion fügt +20–80 ms pro Write hinzu — abhängig vom Batching. Reads fügen einen Netzwerksprung hinzu; budgetieren Sie +25–60 ms p95.
Das sind Richtwerte, die wir über Postgres 14–16 und verwaltete KMS in us-east-Regionen gesehen haben. Ihre VPC-Topologie und das Verhalten Ihres ORM wirken sich stärker aus als die Kryptografie.
Eine konkrete Architektur, die produktionsreif ist
PII Vault + Blind-Indizes + optionaler verschlüsselter Suchdienst
- PII-Vault-Microservice: Ein schlanker Service, der DEKs und Salts im Speicher hält, mit dem KMS spricht und Encrypt/Decrypt/Index-Funktionen über einen streng kontrollierten RPC exponiert. Nur Ihre App- und Worker-Tiers dürfen ihn aufrufen. Er protokolliert Tokenisierungsevents, nicht den Klartext.
- Kanonisierung auf Applikationsseite: Kleinschreiben, trimmen und normalisieren. Für Brazil Akzente in Namen für Such-Tokens entfernen, E.164 bei Telefonnummern erzwingen und CPF/CNPJ-Formate vor der Verschlüsselung validieren. Ziel der Kanonisierung ist, mehrere Ciphertexte für „denselben“ Wert zu vermeiden.
- Postgres-Schema: Für jedes sensitive Feld Ciphertext (bytea) und ein oder mehrere Blind-Index-Spalten (bytea oder bytea fester Länge) speichern. B‑Tree- oder Hash-Indizes auf den Blind-Index-Spalten erstellen; niemals den Ciphertext selbst indexieren.
- Trigger oder Writes in der App-Schicht: Beim Insert/Update den Vault aufrufen: Klartext verschlüsseln und Tokens berechnen; Ciphertext + Tokens in einer Transaktion schreiben. Wir bevorzugen die App-Schicht, um Vault und Salts aus der DB herauszuhalten, aber Trigger sind akzeptabel, wenn sie eine sichere Extension oder einen FDW-ähnlichen RPC aufrufen.
- Abfragemuster: Benutzereingaben in der App in Tokens umwandeln, per Tokens abfragen, Kandidatenzeilen holen und nur den Teil entschlüsseln, den Sie zurückgeben. Niemals Ciphertexte zum Client ziehen.
- Verschlüsselter Suchdienst (optional): Für die 10–20 % der Felder, die Fuzzy- oder Ranking-Suche brauchen, Dokumente an einen verschlüsselten Suchdienst pushen, der an Ihren Vault gekoppelt ist (z. B. CipherStash oder ein verwaltetes Äquivalent). Ihre DB bleibt die Quelle der Wahrheit, gejoint wird über stabile Identifikatoren.
Damit können weder Ihre DB noch Ihr Cloud-Provider PII lesen, aber Ihre App beantwortet weiterhin 95 % der Produktabfragen mit akzeptabler Latenz.
Build vs. Buy im Jahr 2026
Sie haben drei glaubwürdige Optionen:
- Eigenbau mit Vault und Postgres: Maximale Kontrolle, minimale Vendor-Lock-in, aber Sie verantworten Kanonisierung, Token-Generierung und Rotation. Rechnen Sie mit 4–6 Wochen für ein Senior-Team, um Gleichheit + Präfix + bucketisierte Bereiche über 3–5 Felder zu liefern, plus 2–3 weitere Wochen, um Schlüsselrotation, Audit-Logs und Dashboards produktionsreif zu machen.
- Verwendeter, verwalteter verschlüsselter Suchlayer (z. B. CipherStash): Schnellere Time-to-Value für knifflige Abfragen, konsistente APIs und eingebaute Rotation. Sie zahlen einen zusätzlichen Hop und Vendor-Kosten, erhalten aber ein klareres Leckagemodell und weniger Stolperfallen.
- Ein Teil der Suche zum Client verlagern: Für Consumer-Apps kann die Verlagerung von Namens-/Adresssuche auf das Gerät (mit lokalen Indizes) serverseitige Leckage vollständig eliminieren. Das ist auf Android 17 und modernem iOS real, aber UX- und Offline-Constraints gelten.
Unsere Heuristik: Wenn Sie mehr als Gleichheit + Monats-Buckets über 2–3 Felder benötigen, kaufen Sie den Layer. Wenn die meisten Abfragen Lookups nach E-Mail/Telefon/ID sind, bauen Sie den Vault; die Investition zahlt sich in Kontrolle und Kosten aus.
Häufige Fallstricke (und wie Sie sie vermeiden)
- Hashing statt HMAC für Blind-Indizes: SHA-256 ohne Schlüssel ist ein Geschenk für Angreifer mit Rainbow Tables. Verwenden Sie ein gekeytes HMAC mit mandantenspezifischen Salts und einem servicegehaltenen Pepper.
- In der Datenbank verschlüsseln: Wenn Ihre DB entschlüsseln kann, kann es Ihr Cloud-DBA auch. Halten Sie Schlüssel und Tokenisierung ausschließlich auf App- oder Vault-Seite.
- Kanonisierung auslassen: „John.Smith+promo@example.com“ sollte in Ihrer Suchsemantik „johnsmith@example.com“ entsprechen. Definieren, testen und frieren Sie die Kanonisierung pro Feld ein.
- Unbegrenzte Präfixindizes: N‑Gram-Explosionen passieren schnell. Begrenzen Sie die unterstützte Präfixlänge (z. B. erste 5 Zeichen des lokalen Teils) und machen Sie es zur Produktanforderung.
- DEKs ohne Versionierung rotieren: Schreiben Sie immer die verwendete Schlüsselversion in die Ciphertext-Metadaten. Reads sollten zuerst die neueste, dann ältere Versionen versuchen und erst dann fehlschlagen.
- Kein Budget für False Positives: Bereichs-Buckets und N-Gramme erfordern Filtering in der App. Machen Sie das explizit in Ihren Latenz-SLOs und monitoren Sie p95/p99 getrennt von DB-Timings.
Migration ohne Wochenend-Ausfall
30 Tage: Muster beweisen
- Zwei Felder wählen: E-Mail und Geburtsdatum. Deterministische Verschlüsselung + Gleichheits-Blind-Index für E-Mail liefern; Monats-Bucket-Tokens für das Geburtsdatum.
- Dual-Write aktivieren: Klartextspalten bleiben vorerst autoritativ; Ciphertext + Tokens parallel schreiben.
- Read-through-Entschlüsselung für nachgelagerte Systeme hinzufügen, die weiterhin Klartext benötigen; Aufrufstellen protokollieren.
60 Tage: Reads umstellen und Rotation starten
- Abfragen auf tokenbasierte Lookups umstellen; nur zurückgegebene Datensätze entschlüsseln.
- Bestehende Zeilen in Batches (z. B. 10k/Minute) in Nebenzeiten nachfüllen. Indexwachstum und p95-Latenz messen.
- DEK-Versionierung einführen; 10 % der Mandanten auf v2 rotieren; auf Regressionen achten.
90 Tage: Klartext deprezieren, Abdeckung erweitern
- Klartextzugriff auf eine kurze Allowlist begrenzen und aus den ORM-Modellen entfernen.
- Auf Telefon und CPF/CNPJ mit länderbewusster Kanonisierung erweitern.
- Über Build vs. Buy für verbleibende Fuzzy-Suche entscheiden. Beim Kauf jetzt den verschlüsselten Suchdienst integrieren und Ad-hoc-Indizes ablösen.
Compliance und Data Residency: Worum es Aufsichtsbehörden wirklich geht
HIPAA, GLBA und Brazil’s LGPD schreiben keine Algorithmen vor. Sie fragen, ob Unbefugte (einschließlich Ihrer Cloud) PII im Ruhezustand lesen können. Feldweise Verschlüsselung mit app-gehaltenen Schlüsseln ist eine starke Antwort. Wenn Sie in den US und Brazil operieren, halten Sie DEKs dort vor, wo Regulierer sie erwarten (oft in derselben Region wie der Datenspeicher), und dokumentieren Sie die Flüsse. Wenn Discovery/E-Discovery ansteht, wollen Sie zeigen, dass Produktions-DB-Snapshots ohne Ihre App-Ebene kryptografisch inert sind.
Was Sie Ihrem Produktteam sagen sollten
Verschlüsselte Suche ist nicht umsonst. Machen Sie drei Constraints von Anfang an explizit:
- Exakte Übereinstimmung ist schnell; Fuzzy nicht: Präfixe sind auf N Zeichen begrenzt, Namen werden bei der Tokenisierung normalisiert und akzentunabhängig.
- Bereiche sind bucketisiert: Geburtsdatums-Suchen erfolgen nach Monat oder Quartal, nicht nach beliebigen Wochentagsfiltern.
- Kosten schlagen bei Speicher und einer kleinen Latenzsteuer zu Buche: Planen Sie 1,3–2,0× Indexwachstum auf den verschlüsselten Feldern und +10–30 ms p95 ein. Das ist der Preis dafür, Ihrer Cloud die Schlüssel nicht zu übergeben.
Wo Supabase + CipherStash hineinpassen
Wenn Sie bereits auf Supabase oder verwaltetem Postgres sind, kann eine Integration für verschlüsselte Suche (wie die jüngste Arbeit Supabase + CipherStash) Ihnen viel Fleißarbeit abnehmen: Client-Bibliotheken für Tokenisierung, sinnvolle Defaults für Gleichheit/Präfix/Bereich und verwaltete Rotation. Ihr Leckagemodell wird nicht null sein — Reihenfolge und Zugriffsmuster lecken weiterhin — aber Sie haben ein Produktteam, das diese Modelle pflegt, und einen Migrationspfad, der keinen Krypto-PhD erfordert. Evaluieren Sie entlang von drei Achsen: Abdeckungsgrad der Abfragen (passen Ihre echten Queries?), Latenz-SLOs mit Ihrer Datenform und Schlüsselkontrolle (können Sie Ihr eigenes KMS mitbringen?).
Die Brazil-Perspektive: Lassen Sie Lokalisierung Ihre Kryptografie nicht zerbrechen
Für US–Brazil-Stacks ist Normalisierung wichtiger als üblich:
- Namen: Diakritika für Such-Tokens entfernen, in Ciphertexten aber beibehalten; lokalbewusste Vergleicher aufbauen.
- Telefone: E.164 mit DDD-Handling erzwingen; WhatsApp-getriebene Daten kommen oft fehlerhaft an. Normalisieren, sonst verpassen Sie Matches.
- CPF/CNPJ: Vor der Tokenisierung validieren und normalisieren (Satzzeichen entfernen). Formattreue Anzeige nur beim Rendern nach der Entschlüsselung erwägen.
Wenn Sie die Normalisierung falsch machen, vervielfachen Sie Ciphertexte für denselben Nutzer, blähen Indizes auf und ruinieren Trefferquoten.
Wann Sie das nicht tun sollten
Wenn Ihr Kernnutzen in Fuzzy-Suche über inhärent sensitive Texte liegt (z. B. eine Personensuchmaschine), brauchen Sie entweder eine stark clientseitige Architektur oder Sie akzeptieren, dass Ihr Ops-Team die Daten lesen kann. Halbherzige Maßnahmen verursachen Kosten ohne echten Datenschutz. Für alle anderen — Mainstream-SaaS mit Nutzerdaten, Transaktionen und Support-Workflows — reichen die oben genannten Techniken aus, um von „Verschlüsselungs-Theater“ zu substanzieller Kontrolle zu wechseln.
Fazit
Durchsuchbare Verschlüsselung ist kein Forschungsprojekt mehr. Gleichheits- und praktikable Bereichsabfragen auf verschlüsselten Feldern sind mit deterministischer Verschlüsselung, Blind-Indizes und disziplinierter Schlüsselverwaltung gut erreichbar. Ergänzen Sie für die 10–20 % der Abfragen, die es benötigen, einen verschlüsselten Suchdienst — und Ihre App kann endlich Support-, Betrugs- und Abrechnungsabfragen beantworten, ohne Ihrem Cloud-Provider oder Ihrem DBA Klartext zu geben. Das ist eine materielle Risikoreduktion, die Sie Ihrem Board erklären können — und eine Haltung, die Ihre Kunden bemerken werden, sobald der nächste Wettbewerber einen Snapshot leakt.
Die wichtigsten Punkte
- Zuerst entscheiden, wogegen Sie schützen: Cloud-/DB-Insider und Snapshot-Leaks sind realistisch; vollständig kompromittierte App-Ebenen sind mit Kryptografie allein nicht lösbar.
- Für Gleichheit deterministische Verschlüsselung oder Blind-Indizes nutzen; Bereiche bucketisieren; Fuzzy-Suche zum Client oder zu einem verschlüsselten Suchdienst schieben.
- Schlüssel aus der Datenbank heraushalten: mandantenspezifische DEKs, KMS-gestützter KEK, kurze In-Memory-TTLs und explizite Schlüsselversionierung.
- 1,3–2,0× Indexspeicher auf verschlüsselten Feldern und +10–30 ms p95 Latenz für die meisten Abfragen budgetieren.
- Vor der Tokenisierung aggressiv normalisieren (E-Mails, Telefone, CPF/CNPJ, Diakritika), sonst verpassen Sie Matches und blähen Indizes auf.
- Bauen Sie Ihren eigenen Vault, wenn Sie nur Gleichheit + grobe Bereiche benötigen; kaufen Sie einen verschlüsselten Suchlayer, wenn Sie Fuzzy- oder gerankte Textsuche brauchen.
- In 90 Tagen migrieren mit Dual-Writes, Read-Umschaltung und schrittweiser Schlüsselrotation; keinen Big-Bang am Wochenende versuchen.