Jeg tror, at denne artikel kan være meget relevant for det, du laver. Hvis du virkelig ønsker at "anonymisere" SSN'erne af sikkerhedsmæssige årsager og juridisk ansvar, så er det ikke nok at hashge dem.
Bare hashning af dem ville være en fuldstændig deterministisk proces, så for effektivt at "maske" individuelle SSN'er, skal processen randomiseres. Ellers kan du simpelthen brute force gennem alle mulige kombinationer af SSN'er (hvilket ville kræve meget mindre arbejde end at prøve at brute force hash-funktionen) og lede efter en matchende værdi.
For at se, hvorfor dette gælder, tag det mest forenklede eksempel, at et SSN bare kunne antage to værdier, 0 og 1. Uanset kvaliteten og styrken af hashfunktionen, vil der i sidste ende kun være to mulige udfald, og det er let at se hvilket er hvad.
Det er det gamle spil om hvorfor man ikke skal hash f.eks. adgangskoder direkte uden at udføre nogen forbehandling af dem først. De underliggende data indeholder bare ikke nok entropi og vil derfor være et let mål for opslag i en forudberegnet tabel.
I det øjeblik dine SSN'er bliver private og fortrolige (de er ikke i alle lande, så undskyld mit dumme spørgsmål i kommentarerne :), bør den samme bedste praksis, som også bruges til lagring af adgangskoder også være gældende for dit særlige tilfælde, dvs. adaptiv hashing-algoritme, der kompenserer for manglen på indledende entropi såsom bcrypt, scrypt og PBKDF2 (som allerede blev anbefalet af Marcus Adams).