4

社会保障番号を一意のスクランブル状態で保存する必要があります...

理由: ソーシャル ナンバーが必要ですが、データベースが危険にさらされた場合に備えて、それらをオープンに保存したくありません。

社会保障番号を英数字の文字列に変換したいのですが、これを一方向のプロセスにしたいと考えています (元に戻すことはできません)。

次に、既存の SSN 番号を検索するときに、ユーザー入力に同じアルゴリズムを再度使用し、SSN をスクランブルして、英数字の文字列を使用してデータベースを検索します。

PHPでは、私はそのようなことをすることができました

function maskSSN($SSN) {
    $salt = sha1(md5($SSN));
    $SCRAM = md5($SSN . $salt);
    return $SCRAM;
}

しかし、それが独自の価値を生み出すとは思いません

4

2 に答える 2

4

SSN のようにエントロピーが小さいものについては、暗号化せずに、またはハッシュして保存することはお勧めしません。攻撃者がデータベースを盗んだ場合、SSN をブルート フォースすることは非常に現実的です。

代わりに、AES-256 以上で SSN を暗号化する必要があります。暗号鍵の適切な保管に関する詳細については、この SO の質問を確認してください: 暗号鍵の保管 -- ベスト プラクティス?

于 2013-05-10T02:16:56.827 に答える
3

完全なハッシュ (切り捨てられていない) を保存できる場合、ほとんどの安全なハッシュを使用して 9 桁の SSN と衝突することはありません。

ハッシュがブルート フォースにならないようにするには、HMAC-Sha1 または HMac-Sha256 を秘密鍵と共に使用します。これは、電話番号と匿名化データに関する関連する回答ですhttps://stackoverflow.com/a/15888989/637783

AES-256 を適切かつ安全に使用すると、同じ入力に対して異なる結果が生成されるため、AES-256 の結果は後で復号化しなければ使用できません。ただし、ssn が暗号化され、代わりに他のテーブルがキーを参照している主キーに対して格納されているリレーショナル テーブルで合理的に使用できます。

後者のオプションを使用すると、時間の経過とともにキーを非常に簡単にローテーションすることもできます.

于 2013-05-10T13:54:12.077 に答える