Menu
CoddyTech

パスワードキーの導出

CoddyのNode.jsジャーニー「認証とセキュリティ」セクションの一部。レッスン 2/24。

パスワードキーは、パスワードとソルトから計算されます。エンコードとは異なり、この計算は元に戻すことを目的としていません。Scryptは、試行ごとに処理を必要とすることで、パスワードの推測にコストがかかるようにします。同じパスワード、ソルト、キーの長さを含む導出設定を使えば、同じキーが再現されます。このように導出されたキーは、一般にパスワードハッシュと呼ばれます。

const key = await scryptAsync('invite 4821', 'example-only', 16);
return key.toString('hex');

3番目の引数は、バイト単位のキーの長さです。用意されているヘルパーはpromisifyを使って、Nodeのコールバックベースのscryptを、プロミスを返す関数に変換します。ファイルの読み込みと同じようにawaitできます。この練習では結果を比較できるよう、固定のソルトを使っています。実際にパスワードを保存するときは、新しいランダムなソルトを使います。

次の練習では、新しいパスワードを保存するときに必要となる、新しいランダムなソルトを生成します。

challenge icon

チャレンジ

簡単

これは小さな練習用プロジェクトです。セットアップは用意されているので、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プレイグラウンド