2017-03-08 3 views
1

Ich habe eine Anforderung, die Mitgliedsnummer des Kunden in unserer Datenbank zu verschlüsseln. Also okay, wir benutzen MS SQL Server, ich dachte, ich benutze encryptbypassphrase, ändere jeden Ort, der dieses Feld schreibt zu verschlüsseln und jeden Ort, an dem es zu entschlüsseln ist, etc.beitreten auf verschlüsseltes Feld

Ausgenommen ... gibt es Orte in der DB, wo das Feld verwendet wird, um mehrere Datensätze zu verknüpfen. Ich dachte, kein Problem, ich ändere nur den Beitritt von "Join blahblah auf a.member_number = b.member_number", um "blahblah auf a.member_number_encrypted = b.member_number_encrypted" beizutreten. Aber das funktioniert nicht, weil ich entdeckt habe, dass wenn ich den gleichen Wert zweimal verschlüssle, ich nicht den gleichen verschlüsselten Wert bekomme. Ich schätze, es gibt etwas Salz darin oder so. Und ich möchte nicht sagen: "Verbinde blahblah mit decryptbypassphrase (@pw, a.member_number_encrypted) = dsecryptbypassphrase (@pw, b.member_number_encrypted), denn das würde einen Index-Lookup in eine Voll-Datei-Suche verwandeln. Ich dachte, es würde hässlich zu sein, um auf den viel größeren verschlüsselten Wert zu indizieren, aber ...

Also ... Gibt es eine Möglichkeit, verschlüsselnbypassphrase zu zwingen, immer die gleiche Eingabe für den gleichen Ausgang zu verschlüsseln? Oder heißt das, dass es ist? einfach nicht praktisch in den meisten Fällen auf einem verschlüsselten Bereich?

beizutreten oder bin ich etwas fehlt?

Antwort

0

Was Sie suchen, ist deterministic encryption. Sie können deterministisch erreichen Verschlüsselung, indem Sie einen Hash von Klartext als Ihre IV verwenden, so erhalten Sie jedes Mal, wenn Sie einen bestimmten Klartext verschlüsseln, den gleichen verschlüsselten Text. Bitte siehe this article als Referenz. Wenn Sie MS SQL Server 2016 verwenden, können Sie sich die Funktion Always Encrypted ansehen. Abhängig davon, welche Operationen Sie für Ihre Daten ausführen möchten. Always Encrypted wird Ihre Aufgabe erleichtern, da es deterministische Verschlüsselung unterstützt. Wenige Links, die dir helfen werden.

Getting Started with Always Encrypted
This feature will make it easier to test Always Encrypted without writing an app
Configure Always Encrypted using SQL Server Management Studio
I have briefly explained the security guarantee provided by Always Encrypted here

+0

"Was Sie suchen ist deterministisch-Verschlüsselung." Ja. "Sie verwenden MS SQL Server 2016" Leider bin ich nicht. Ich habe 2014 sp2-gdr. – Jay

+0

@Jay Siehe aktualisierte Antwort für Zeiger –