Ich bin auf der Suche nach SQL-Spalten-Level-Verschlüsselung mit symmetrischen Schlüsseln. Die ersten Schritte, die zum Erstellen des Datenbankhauptschlüssels, der Zertifikate und der symmetrischen Schlüssel erforderlich sind, scheinen einfach zu sein, und ich habe das Verschlüsseln/Entschlüsseln von Daten mit Symmetric Keys erfolgreich getestet.SQL verschlüsselte Spalten in WHERE-Klausel
Sobald jedoch die Daten verschlüsselt sind, weiß ich nicht, wie man es am besten abfragt. Z.B.
SELECT PlainTextA, PlainTextB, PlainTextC
WHERE CONVERT(varchar, DECRYPTBYKEY(EncyptedColumn)) = @SearchTerm
würde sicherlich zu einem vollständigen Tabellenscan führen?
Eine andere Option, die ich dachte, könnte funktionieren, verschlüsselt die Suchkriterien zuerst z.
SELECT PlainTextA, PlainTextB, PlainTextC
WHERE EncyptedColumn = ENCRYPTBYKEY(KEY_GUID('KeyName'), @SearchTerm)
aber dies funktioniert nicht, da der verschlüsselte Wert immer unterschiedlich ist.
Alle Vorschläge würden sehr geschätzt werden.
Btw, die eine Sache, die Sie absolut ** tun nicht tun, ist, den Hash mit einem zeilenspezifischen Wert (PK) zu salzen: Sie würden genau auf Platz 1 zurück sein, nicht wissend, was man sucht. Für diese Szenarien können Sie * den Hash mit einem globalen * Site-Wert abgleichen. Dies reicht aus, um Rainbow-Tabellen-Angriffe zu verhindern, aber die Daten sind durchsuchbar. Beachten Sie jedoch, dass zwei verschiedene Zeilen mit identischem Inhalt * denselben Hash-Wert haben, so dass Sie einige Informationen offen legen, aber dies ist die Definition, die Daten suchbar zu machen. –
"Beachten Sie, dass zwei verschiedene Zeilen mit identischem Inhalt den gleichen Hash haben" - das war mein Hauptanliegen bei der Verwendung von Hashing, da es die Sicherheitsstufe reduziert, die Tabelle, an der ich arbeite, wird jedoch 4 bis 5 verschlüsselte Spalten haben Ich füge nur eine entsprechende Hash-Spalte für eine von diesen hinzu, dann kann sie akzeptabel sein. –
Beachten Sie, dass Hash-Kollision in der Tabelle Geburtstag-Angriff (Meet-in-the-Middle) unterliegt, also ist deutlich höher als Intuition würde es sagen. Immer noch hat SHA1 einen ziemlich großen Adressraum bei 20 Bytes. –