
239
レシピ 7.2 crypto モジュールでパスワードをハッシュ化する
server.js
var hash = crypto
.createHmac('md5', 'supersecretkey')
.update(req.body.pass)
.digest('hex');
HMAC
を利用すると、レインボーテーブルを使用した攻撃を防ぐことができます。秘密鍵が
ハッシュを変化させるので、攻撃者が秘密鍵を取得しない限り、レインボーテーブルをほぼ無力化
します(サーバの管理者権限が乗っ取られて秘密鍵が取得されると、
HMAC
の利点は無力化しま
す。ただしそのような場合には、レインボーテーブル攻撃はもはや必要とされません)。
ミニレシピ
7.2.2
PBKDF2
で強固なハッシュ値を生成する
PBKDF2
は
Password-Based Cryptography
標準の一部である「
Password-Based Key Derivation
Function
」の頭文字をとったもので、そのバージョン
2
です。
PBKDF2
は、ハッシュ値のハッシュ値を何千回にもわたって生成して最終的な値を提供すると
いう、非常に強力な性質を持っています。ハッシュ関数を複数回適用すると、
1
回だけ適用した場
合と比べて元データの候補数を飛躍的に増やすため、攻撃者にとっては解析結果の価値を大きく超
えるレベルの多大なハードウェアの投資が必要となります。
crypto.pbkdf2
メソッドは、パスワード、ソルト値(
salt value
。単に
salt ...