2人のユーザーが同じ識別子を使用できないようにする必要があるシナリオがあります。識別子は機密情報(社会保障番号など)であるため、DBに保存したくありません。後続のユーザーが再度使用できないようにするためのハッシュを保存したいだけです。また、データベースを漏えいした場合に攻撃者が元の値を把握できないように、それを安全に実行したいと考えています。
安全にできますか?推奨される方法は何ですか?
いくつかの調査に基づいて、HMACはうまくいくかもしれないようです。その場合、推奨されるアルゴリズムは何ですか?それは何か遅いもの(固定キーソルトを使用したscryptなど)である必要があります。そのため、キーが公開されたとしても、値を明らかにすることは困難です。またはそれに対する保護はありませんか?
私はあなたが可能な解決策からそれほど遠くないと思います(別名、最新のKDFを使用し、これをパスワードのように効果的に扱います)ただし、さらにいくつかの考慮事項があります(すでにコメントで言及されています)。
1と2の組み合わせは、KDFが唯一の選択肢であるにもかかわらず、KDFを悪い考えにするでしょう。その結果、別のbusinessソリューションを見つけることが適切な場合があります。ただし、SSNマッチングが絶対的な要件である場合、リスクを軽減するために実行できるいくつかの手順があると思います。
繰り返しますが、最善の策は、SSNを使用せずにこれを行う完全に異なる方法を見つけることです。ただし、これが絶対的なビジネス要件である場合、上記の手順は、顧客の個人データを保護するために非常に役立ちます。それでも、業界の規制要件を確認して、該当するすべてのルールを遵守していることを確認します。