あれ
crypto.pbkdf2Sync
Passport.jsのLocalStrategyで利用者名と暗証語を認証するコード
passport.use(new LocalStrategy(function verify(username, password, cb) {
db.get('SELECT rowid AS id, * FROM users WHERE username = ?', [ username ], function(err, row) {
if (err) { return cb(err); }
if (!row) { return cb(null, false, { message: 'Incorrect username or password.' }); }
crypto.pbkdf2(password, row.salt, 310000, 32, 'sha256', function(err, hashedPassword) {
if (err) { return cb(err); }
if (!crypto.timingSafeEqual(row.hashed_password, hashedPassword)) {
return cb(null, false, { message: 'Incorrect username or password.' });
}
return cb(null, row);
});
});
}));
『Username & Password Tutorial: Verify Password』より
何をしているコードか
- dbから与えられた利用者名と一致する利用者情報(利用者名, ハッシュ化された暗証語)を取り出す。
- 与えられた暗証語を
crypto.pbkdf2
でsha256にハッシュ化する。 crypto.timingSafeEqual
で1.と2.で得られたハッシュ化された暗証語を比較し、一致していれば利用者情報をcallback関数(cb)で返す
crypto.pbkdf2の概要
Provides an asynchronous Password-Based Key Derivation Function 2 (PBKDF2) implementation. A selected HMAC digest algorithm specified by
digest
is applied to derive a key of the requested byte length (keylen
) from thepassword
,salt
anditerations
.The supplied
callback
function is called with two arguments:err
andderivedKey
. If an error occurs while deriving the key,err
will be set; otherwiseerr
will benull
. By default, the successfully generatedderivedKey
will be passed to the callback as aBuffer
. An error will be thrown if any of the input arguments specify invalid values or types.
DeepL訳:
非同期のPassword-Based Key Derivation Function 2 (PBKDF2) の実装を提供する。digest
で指定された HMAC ダイジェストアルゴリズムが適用され、 password
, salt
および iterations
から要求されたバイト長 (keylen
) の鍵を導出する。
与えられた callback
関数はerr
と derivedKey
の2つの引数で呼び出されます。鍵の導出中にエラーが発生した場合は err
がセットされ、それ以外の場合は err
は null
となる。デフォルトでは、正常に生成された derivedKey
は Buffer
としてコールバックに渡される。入力引数に無効な値や型が指定された場合は、エラーがスローされます。