Ich finde diesen Artikel kann für das, was Sie tun, sehr relevant sein. Wenn Sie die SSNs tatsächlich aus Sicherheitsgründen und aus rechtlichen Gründen "anonymisieren" möchten, reicht es nicht aus, sie einfach zu hashen.
Sie nur zu hashen, wäre ein vollständig deterministischer Prozess. Um einzelne SSNs effektiv zu „maskieren“, muss der Prozess randomisiert werden. Andernfalls könnten Sie einfach alle möglichen Kombinationen von SSNs brutal durchforsten (was viel weniger Arbeit erfordern würde, als zu versuchen, die Hash-Funktion brutal zu erzwingen) und nach einem passenden Wert suchen.
Um zu sehen, warum dies gilt, nehmen Sie das einfachste Beispiel, dass eine SSN nur zwei Werte annehmen könnte, 0 und 1. Unabhängig von der Qualität und Stärke der Hash-Funktion gibt es am Ende nur zwei mögliche Ergebnisse, und das ist leicht zu erkennen was ist was.
Es ist das alte Spiel, warum man nicht hashen sollte, z. Passwörter direkt, ohne sie vorher etwas vorzuverarbeiten. Die zugrunde liegenden Daten enthalten einfach nicht genug Entropie und sind daher ein leichtes Ziel für Suchen in einer vorberechneten Tabelle.
Sobald Ihre SSNs privat und vertraulich werden (sie sind nicht in jedem Land, also verzeihen Sie meine dumme Frage in den Kommentaren :), sollten die gleichen Best Practices, die auch für die Passwortspeicherung verwendet werden, auch auf Ihren speziellen Fall anwendbar sein, d.h. einen langsamen adaptiver Hash-Algorithmus, der den Mangel an anfänglicher Entropie kompensiert, wie bcrypt, scrypt und PBKDF2 (das bereits von Marcus Adams empfohlen wurde).