あれ
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
digestis applied to derive a key of the requested byte length (keylen) from thepassword,saltanditerations.The supplied
callbackfunction is called with two arguments:errandderivedKey. If an error occurs while deriving the key,errwill be set; otherwiseerrwill benull. By default, the successfully generatedderivedKeywill 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 としてコールバックに渡される。入力引数に無効な値や型が指定された場合は、エラーがスローされます。