この記事 だと思います あなたがしていることに非常に関連しているかもしれません。確かに、セキュリティ上の理由と法的責任のためにSSNを「匿名化」したい場合は、単にそれらをハッシュするだけでは不十分です。
それらをハッシュするだけで完全に決定論的なプロセスになるため、個々のSSNを効果的に「マスク」するには、プロセスをランダム化する必要があります。それ以外の場合は、SSNのすべての可能な組み合わせをブルートフォース攻撃して(ハッシュ関数をブルートフォース攻撃するよりもはるかに少ない作業で済みます)、一致する値を探すことができます。
これが成り立つ理由を理解するために、SSNが0と1の2つの値を取ることができるという最も単純な例を取り上げます。ハッシュ関数の品質と強度に関係なく、最終的には2つの可能な結果しかなく、簡単に確認できます。どちらがどちらですか。
これは、ハッシュすべきではない理由の古いゲームです。最初にいくつかの前処理を実行せずに、パスワードを直接。基になるデータには十分なエントロピーが含まれていないため、事前に計算されたテーブルでのルックアップのターゲットになりやすいでしょう。
SSNがプライベートで機密になるとすぐに(すべての国にあるわけではないので、コメントで私の愚かな質問を許してください:)、パスワードの保存にも使用されるのと同じベストプラクティスが特定のケースにも適用できるはずです。 bcrypt、scrypt、PBKDF2(Marcus Adamsによってすでに推奨されている)などの初期エントロピーの欠如を補う適応ハッシュアルゴリズム。