Penso che questo articolo può essere molto rilevante per quello che stai facendo. Se in effetti si desidera "anonimizzare" gli SSN per motivi di sicurezza e responsabilità legale, il semplice hashing non è sufficiente.
Solo l'hashing sarebbe un processo completamente deterministico, quindi per "mascherare" efficacemente i singoli SSN, il processo deve essere randomizzato. Altrimenti potresti semplicemente usare la forza bruta attraverso tutte le possibili combinazioni di SSN (che richiederebbe molto meno lavoro rispetto al tentativo di forzare la funzione hash) e cercare un valore corrispondente.
Per vedere perché questo vale, prendi l'esempio più semplicistico che un SSN potrebbe assumere solo due valori, 0 e 1. Indipendentemente dalla qualità e dalla forza della funzione hash, alla fine ci saranno solo due risultati possibili ed è facile da vedere che è quale.
È il vecchio gioco del perché non dovresti fare l'hash, ad es. password direttamente senza eseguire prima una preelaborazione su di esse. I dati sottostanti semplicemente non contengono abbastanza entropia e saranno quindi un facile bersaglio per le ricerche in una tabella precalcolata.
Nel momento in cui i tuoi SSN diventano privati e confidenziali (non sono in tutti i paesi, quindi perdona la mia domanda stupida nei commenti :), le stesse migliori pratiche utilizzate anche per l'archiviazione delle password dovrebbero essere applicabili anche al tuo caso particolare, ad es. algoritmo di hashing adattivo che compensa la mancanza di entropia iniziale come bcrypt, scrypt e PBKDF2 (già consigliato da Marcus Adams).