Мисля, че тази статия може да е много подходящо за това, което правите. Ако наистина искате да „анонимизирате“ SSN от съображения за сигурност и правна отговорност, тогава простото им хеширане не е достатъчно.
Самото им хеширане би било напълно детерминистичен процес, така че за ефективно „маскиране“ на отделни SSN, процесът трябва да бъде рандомизиран. В противен случай бихте могли просто да форсирате всички възможни комбинации от SSNs (което би изисквало много по-малко работа, отколкото да се опитвате да форсирате хеш функцията) и да потърсите съответстваща стойност.
За да видите защо това е валидно, вземете най-опростения пример, че SSN може просто да приеме две стойности, 0 и 1. Независимо от качеството и силата на хеш функцията, в крайна сметка ще има само два възможни изхода и е лесно да се види кое е кое.
Това е старата игра защо не трябва да хеширате напр. пароли директно, без първо да извършвате предварителна обработка върху тях. Базовите данни просто не съдържат достатъчно ентропия и следователно ще бъдат лесна цел за търсене в предварително изчислена таблица.
В момента, в който вашите SSN номера станат лични и поверителни (те не са във всяка държава, така че простете за глупавия ми въпрос в коментарите :), същите най-добри практики, които се използват и за съхранение на пароли, трябва да са приложими и за вашия конкретен случай, т.е. адаптивен алгоритъм за хеширане, който компенсира липсата на първоначална ентропия, като bcrypt, scrypt и PBKDF2 (който вече беше препоръчан от Маркъс Адамс).