Hashing SSNs e outras informações de domínio limitado

Atualmente, estou trabalhando em um aplicativo em que recebemos informações particulares de saúde. Uma das maiores preocupações é com o SSN. Atualmente, não usamos o SSN para nada, mas no futuro gostaríamos de poder usá-lo para identificar exclusivamente um paciente em várias instalações. A única maneira de conseguir fazer isso de forma confiável é através do SSN. No entanto, nós (além de nossos clientes) REALMENTE não queremos armazenar o SSN.

Então, naturalmente, pensei em fazer o hash do SHA, já que estamos apenas usando-o para identificação. O problema disso é que, se um invasor conhece o domínio do problema (um SSN), ele pode se concentrar nesse domínio. Portanto, é muito mais fácil calcular o bilhão de SSNs do que um número praticamente ilimitado de senhas. Sei que devo usar sal de site e sal por paciente, mas há mais alguma coisa que eu possa fazer para impedir que um invasor revele o SSN? Em vez de SHA, eu estava pensando em usar o BCrypt, pois o Ruby tem uma boa biblioteca e lida com complexidade escalável e salga automaticamente.

Não será usado como senha. Essencialmente, recebemos mensagens de muitas instalações, e cada uma descreve um paciente. A única coisa próxima a um identificador globalmente exclusivo para um paciente é o número do SSN. Vamos usar o hash para identificar o mesmo paciente em várias instalações.

questionAnswers(3)

yourAnswerToTheQuestion