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

Node.jsのcrypto.pbkdf2Sync()メソッドとは?使い方とサンプルコードを解説

crypto.pbkdf2Sync()メソッドの概要

crypto.pbkdf2Sync()は、Node.jsのcryptoモジュールが提供する「PBKDF2(Password-Based Key Derivation Function 2)」の同期版実装です。このメソッドは、パスワード・ソルト・反復回数を基に、指定したHMACダイジェストアルゴリズムを使って鍵(キー)を導出します。名前に「Sync」が付いている通り、処理は同期的に実行され、鍵の導出が完了するまで次の処理に進みません。

なお、非同期で処理したい場合はcrypto.pbkdf2()を使用します。大量の反復回数を設定した場合、同期版はメインスレッドをブロックするため、Webサーバーなどのアプリケーションでは非同期版の利用が推奨されます。

構文

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

パラメータ

  • password ― 鍵の導出に使用するパスワードです。文字列(string)、DataView、Bufferなどの型を指定できます。

  • salt ― パスワードと同様に鍵の導出に使われるソルト( salt )です。セキュリティ向上のため、ランダムな値を使用することが推奨されます。文字列、DataView、Bufferなどの型を指定できます。

  • iterations ― ハッシュ計算の反復回数です。数値型で指定し、値が大きいほど安全性が高まりますが、処理時間も長くなります。

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

  • digest ― 使用するHMACアルゴリズムを指定します(例:'sha256'、'sha512')。デフォルト値は'sha1'ですが、セキュリティの観点から'sha256'以上の強力なアルゴリズムを選ぶことが推奨されます。

戻り値

導出された鍵がBufferオブジェクトとして返されます。

サンプルコード1:基本的な使い方

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

node pbkdf2Sync.js

pbkdf2Sync.js

// crypto.pbkdf2Sync() デモ例

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

// オプションを指定してpbkdf2Syncを実行
const pbkdfKey = crypto.pbkdf2Sync('secret', 'salt', 100000, 64, 'sha512');
// 導出された鍵を出力
console.log("key is: ", pbkdfKey.toString('hex'));

実行結果

C:\home\node>> node pbkdf2Sync.js
key is:
3745e482c6e0ade35da10139e797157f4a5da669dad7d5da88ef87e47471cc47ed941c7ad618e827304f083f8707f12b7cfdd5f489b782f10cc269e3c08d59ae

この例では、パスワード「secret」、ソルト「salt」、反復回数10万回、鍵長64バイト、アルゴリズム「sha512」を指定して鍵を導出し、16進数形式で表示しています。

サンプルコード2:異なる形式での出力

続いて、別の例を見てみましょう。

// crypto.pbkdf2Sync() デモ例

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

// オプションを指定してpbkdf2Syncを実行
const pbkdfKey = crypto.pbkdf2Sync('secret', 'salt', 100, 32, 'sha1');
// 導出された鍵をさまざまな形式で出力
console.log("key is: ", pbkdfKey);
console.log("key(in hex) is: ", pbkdfKey.toString('hex'));
console.log("key(in base64) is: ", pbkdfKey.toString('base64'));

実行結果

C:\home\node>> node pbkdf2Sync.js
key is: <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>
key(in hex) is:
b73635f7c0882e1fc3ba6e29b14af1274df84828b4d18fcc222eb574455f505d
key(in base64) is: tzY198CILh/Dum4psUrxJ034SCi00Y/Mii61dEVfUF0=

このように、導出された鍵はBufferオブジェクトとして取得でき、必要に応じて16進数やBase64形式の文字列に変換して利用できます。

まとめ

crypto.pbkdf2Sync()は、パスワードから安全に暗号鍵を導出するためのシンプルなメソッドです。引数にはパスワード・ソルト・反復回数・鍵長・ダイジェストアルゴリズムを指定します。ただし同期処理のためメインスレッドをブロックする点に注意し、本番環境のサーバーアプリケーションでは非同期版のcrypto.pbkdf2()やWorker Threadsとの併用を検討するとよいでしょう。

  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() 引数(パラメータ) このメソッドは、サポートされているハッシュアルゴ