パスワードキーの導出
CoddyのNode.jsジャーニー「認証とセキュリティ」セクションの一部。レッスン 2/24。
パスワードキーは、パスワードとソルトから計算されます。エンコードとは異なり、この計算は元に戻すことを目的としていません。Scryptは、試行ごとに処理を必要とすることで、パスワードの推測にコストがかかるようにします。同じパスワード、ソルト、キーの長さを含む導出設定を使えば、同じキーが再現されます。このように導出されたキーは、一般にパスワードハッシュと呼ばれます。
const key = await scryptAsync('invite 4821', 'example-only', 16);
return key.toString('hex');3番目の引数は、バイト単位のキーの長さです。用意されているヘルパーはpromisifyを使って、Nodeのコールバックベースのscryptを、プロミスを返す関数に変換します。ファイルの読み込みと同じようにawaitできます。この練習では結果を比較できるよう、固定のソルトを使っています。実際にパスワードを保存するときは、新しいランダムなソルトを使います。
次の練習では、新しいパスワードを保存するときに必要となる、新しいランダムなソルトを生成します。
チャレンジ
簡単これは小さな練習用プロジェクトです。セットアップは用意されているので、exercise.jsのみを編集してください。
関数を完成させてください。与えられたパスワードとソルトから32バイトのキーを導出し、その16進数表記をkeyに入れて返します。POST {"password":"practice","salt":"fixed-for-this-exercise"}を/resultに2回送信すると、同じ64文字のキーが表示されます。どちらかの入力を変更すると、キーも変わります。
自分で試してみよう
import { scryptAsync } from './crypto.js';
export async function exercise({ password, salt }) {
return { key: password };
}
認証とセキュリティのすべてのレッスン
自分で練習してみよう: Expressプレイグラウンド