JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

Node.jsのcrypto.pbkdf2()メソッドとは?基本構文と使い方を解説

crypto.pbkdf2()とは

crypto.pbkdf2()は、Node.jsのcryptoモジュールが提供する「パスワードベース鍵導出関数(Password-Based Key Derivation Function)」の非同期実装です。パスワード・ソルト・反復回数を入力とし、指定したアルゴリズムのHMACダイジェストを用いて安全な鍵を導出します。

PBKDF2は、パスワードをそのまま保存する代わりに計算コストの高い導出処理を挟むことで、総当たり攻撃(ブルートフォース攻撃)への耐性を高める手法です。パスワードのハッシュ保存や暗号鍵の生成など、セキュリティが求められる場面で広く活用されています。

構文

crypto.pbkdf2(password, salt, iterations, keylen[, digest], callback)

パラメータ

各パラメータの詳細は以下のとおりです。

  • password – 鍵を導出するもととなるパスワード。文字列、DataView、Bufferなどの型を指定できます。

  • salt – パスワードと同様に鍵の導出に使用するソルト(salt)。文字列、DataView、Bufferなどの型を指定できます。

  • iterations – 鍵導出時の反復回数。数値を指定します。値が大きいほど安全性が向上しますが、その分処理時間も長くなります。

  • keylen – 導出する鍵の要求バイト長。数値型で指定します。

  • digest – HMACアルゴリズムを指定するダイジェスト値。デフォルトは「sha1」ですが、より高いセキュリティのためには「sha256」「sha512」の使用が推奨されます。

  • callback – 非同期処理の結果を受け取るコールバック関数。非同期モード中にエラーが発生した場合は、ここでハンドリングされます。

使用例1:sha512で鍵を導出する

まず、「pbkdf2.js」という名前のファイルを作成し、以下のコードをコピーしてください。作成後は、次のコマンドでコードを実行できます。

node pbkdf2.js

pbkdf2.js

// crypto.pbkdf2() のデモ例

// cryptoモジュールを読み込み
const crypto = require('crypto');

// 指定したオプションでpbkdf2を実行
crypto.pbkdf2('secret', 'salt', 100000, 64, 'sha512', (err, derivedKey) => {
    if (err) throw err;
    // 導出された鍵を表示
    console.log('Key Derived: ', derivedKey.toString('hex'));
});

実行結果

C:\home\node>> node pbkdf2.js
Key Derived:
3745e482c6e0ade35da10139e797157f4a5da669dad7d5da88ef87e47471cc47ed941c7ad618e8
27304f083f8707f12b7cfdd5f489b782f10cc269e3c08d59ae

使用例2:sha1で鍵を導出し複数の形式で表示する

続いて、反復回数とダイジェストを変更した別の例を見てみましょう。この例では、導出された鍵をBuffer・16進数(hex)・Base64の3つの形式で出力しています。

// crypto.pbkdf2() のデモ例

// cryptoモジュールを読み込み
const crypto = require('crypto');

// 指定したオプションでpbkdf2を実行
crypto.pbkdf2('secret', 'salt', 100, 64, 'sha1', (err, derivedKey) => {
    if (err) throw err;
    // 導出された鍵を各形式で表示
    console.log('Key Derived: ', derivedKey);
    console.log('Key Derived in hex: ', derivedKey.toString('hex'));
    console.log('Key Derived in base64: ', derivedKey.toString('base64'));
});

実行結果

C:\home\node>> node pbkdf2.js
Key Derived: <Buffer b7 36 35 f7 c0 88 2e 1f c3 ba 6e 29 b1 4a f1 27 4d f8 48 28 b4 d1 8f cc 22 2e b5 74 45 5f 50 5d 3d 23 19 13 2d 84 e1 91 a7 83 e2 00 73 4e 37 4a 24 b6 ... >
Key Derived in hex:
b73635f7c0882e1fc3ba6e29b14af1274df84828b4d18fcc222eb574455f505d3d2319132d84e1
91a783e200734e374a24b62cfab65dfb5e9dc28ae147072419
Key Derived in base64:
tzY198CILh/Dum4psUrxJ034SCi00Y/MIi61dEVfUF09IxkTLYThkaeD4gBzTjdKJLYs+rZd+16dwo
rhRwckGQ==

まとめ

crypto.pbkdf2()は、パスワードとソルトから安全な鍵を非同期に導出できるNode.jsの重要なAPIです。反復回数やダイジェストアルゴリズムの設定によりセキュリティ強度を調整できるため、実運用では十分に大きな反復回数と、SHA-256以上のダイジェストを選択することが推奨されます。同期処理が必要なケースでは、crypto.pbkdf2Sync()も利用可能です。

  1. Node.jsのcrypto.privateDecrypt()メソッドの使い方を徹底解説

    crypto.privateDecrypt()メソッドは、crypto.publicEncrypt()メソッドを使って対応する公開鍵で事前に暗号化されたデータを、パラメータとして渡された秘密鍵を用いて復号するために使用されます。RSA暗号方式などの公開鍵暗号システムにおいて、安全なデータ復号を実現するための重要なAPIです。 構文 crypto.privateDecrypt(privateKey, buffer) パラメータ このメソッドが受け取る各パラメータの詳細は以下のとおりです。 privateKey(秘密鍵) – 復号に使用する秘密鍵を指定します。Object、String、Bu

  2. Node.jsのcrypto.getHashes()メソッドとは?使い方とサポートされるハッシュアルゴリズム一覧の取得方法

    crypto.getHashes()メソッドは、Node.jsでサポートされているすべてのハッシュアルゴリズムの名前を配列形式で返します。cryptoモジュールには非常に多くのハッシュアルゴリズムが用意されており、その中でも歴史的によく使われてきたのが「MD5(Message-Digest Algorithm 5)」です。ただし、MD5には衝突耐性の脆弱性があるため、現在ではセキュリティ用途にはSHA-256やSHA3系など、より強力なアルゴリズムを使うことが推奨されています。 構文 crypto.getHashes() 引数(パラメータ) このメソッドは、サポートされているハッシュアルゴ