Acho que este artigo pode ser muito relevante para o que você está fazendo. Se, de fato, você deseja "anonimizar" os SSNs por motivos de segurança e responsabilidade legal, simplesmente fazer o hash deles não é suficiente.
Apenas fazer o hash deles seria um processo completamente determinístico, portanto, para "mascarar" SSNs individuais efetivamente, o processo precisa ser randomizado. Caso contrário, você poderia simplesmente forçar a força bruta em todas as combinações possíveis de SSNs (o que seria muito menos trabalhoso do que tentar forçar a função de hash) e procurar um valor correspondente.
Para ver por que isso acontece, tome o exemplo mais simplista de que um SSN poderia assumir apenas dois valores, 0 e 1. Independentemente da qualidade e força da função hash, no final haverá apenas dois resultados possíveis e é fácil ver qual e qual.
É o velho jogo de por que você não deve fazer hash, por exemplo. senhas diretamente sem realizar algum pré-processamento nelas primeiro. Os dados subjacentes simplesmente não contêm entropia suficiente e, portanto, serão um alvo fácil para pesquisas em uma tabela pré-computada.
No minuto em que seus SSNs se tornarem privados e confidenciais (eles não estão em todos os países, então perdoe minha pergunta estúpida nos comentários :), as mesmas práticas recomendadas que também são usadas para armazenamento de senhas também devem ser aplicáveis ao seu caso específico, ou seja, um algoritmo de hash adaptativo que compensa a falta de entropia inicial como bcrypt, scrypt e PBKDF2 (que já era recomendado por Marcus Adams).