暗号化に使うbcryptの概要とNode.jsで扱う方法ツイートシェアはてブLINEPocketbcryptとは?認証で使用するパスワードを安全にハッシュ化するアルゴリズムです。ハッシュと聞くとSHA256がよく使われていそうですが、パスワードのハッシュ化に関してはSHA256は安全ではないみたいです。自分がセキュリティに関して詳しくないのでうまく説明できませんが、ハッシュというのは簡単に何回も計算できるからハイスペックなPCを使えば簡単に突破できるよということみたいです。この問題点をbcryptは解決してくれるみたいですね。Hash関数アルゴリズムは(元々高速に計算することを意図していたのもあり)非常に高速に計算が可能であり、総当たり試行されてしまえば、現代のコンピュータスペックをもってすれば一瞬で解読されてしまいます。レインボーテーブルと呼ばれる、高速にHashから元の値を類推することが可能なアルゴリズムも存在し、Hash化では不足です。参考:BCryptのすすめbcrypt詳細bcryptは60文字のハッシュ値を生成します。このハッシュ値の中には次の4つの情報が含まれます。下記ハッシュ値の場合を4つに分けると表のようになります。30文字目から最後までバージョン情報、ストレッチ回数、ソルト回数が入っていて何がいいのかというと、途中からbcryptのバージョンとストレッチング回数を上げても全く問題ないし、ソルト値もDBの別カラムで管理しないでいいのが楽でいいですよね。サーバーのスペックがより安価に手に入るようになったら今よりもストレッチング回数を上げてよりセキュアなハッシュ値にすることが簡単にできます。npmモジュールとしてインストールできるNode.jsから扱う場合はnpmモジュールとして実装されているものがあるのでそれを使うのが一番楽で扱いも簡単でした。そのままbcryptというものでした。githubはこちら。非同期と同期方法の二つがありますが、非同期で扱う必要がないと思うので同期での扱い方がオススメです。salt);ストレッチング回数は何回ハッシュ化を行うか決める回数です。これは2のn乗のnの値を決めることになります。ハッシュ値の比較方法はこちら。falseまとめbcryptはパスワードのハッシュ化によく使われるので使い方を覚えておきましょう。bcryptの仕組みについては下記にまとめたのでぜひ読んでみてください。スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。Incにブロックチェーンエンジニアとして入社。コメントをキャンセルメールアドレスが公開されることはありません。Securityで使われているBCryptPasswordEncoderの仕組みRECOMMENDこちらの記事も人気です。