電話番号をデータベースに追加するときのハッシュ化のアルゴリズムの選択
ログインに電話番号を使用したいので、データベースには電話番号をハッシュ化して保存しようと思っています。
通常、パスワードをデータベースにハッシュ化して保存する場合、PHPのpassword_hash()
関数で、個別にランダムなソルトを追加し、bcryptをコスト10以上で使用すれば、問題ないという認識でいます。
しかし、電話番号の場合、基本的には11桁の数値の固定長なので、bcryptでは十分ではなく、hash_hmac()
関数でHMAC-SHA256を使用した方が良いのでしょうか?
HMACでは、秘密鍵が漏れない限り、ハッシュ化された文字列からの復号は現実的な時間で不可能だという認識でいます。
実現したい安全性は、万が一、データベース上から電話番号のハッシュがソルトと一緒に流出した場合に、現実的な時間(電話番号一つあたりの解析時間が10年以上)で、特定のユーザの電話番号を解読されないというものです。
HMACを使用した方が良いと思ったのは、以下の記事を読んだからです。
ハッシュ化された電話番号を解読するのは簡単ですか?
私は暗号について詳しくないので、間違っているところがあればご指摘お願いいたします。
[追記]
teratailでも同様の質問をさせていただき、徳丸さんに分かりやすい解答をいただいたので、こちらの質問内容に興味のある方は、そちらも合わせてご覧ください。
https://teratail.com/questions/333883