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

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

Node.jsのcrypto.scrypt()メソッドは、scryptアルゴリズムを非同期で実行するための機能です。scryptはパスワードベースの鍵導出関数(KDF:Key Derivation Function)の一種であり、ブルートフォース攻撃(総当たり攻撃)からシステムを保護し、攻撃のコストを大幅に引き上げる役割を果たします。その一方で、scrypt関数は計算コストとメモリ消費が非常に高いという特徴を持っています。

構文

crypto.scrypt(password, salt, keylen, [options], [callback])

パラメータの説明

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

  • password – scryptで鍵を導出するために必要なパスワードです。文字列、オブジェクト、TypedArrayなど、さまざまな型を指定できます。

  • salt – データの暗号化に使用される値です。できる限り一意である必要があり、推奨される最小長は16バイトです。

  • keylen – 導出する鍵の長さを定義します。数値で指定してください。

  • options

    • cost – メモリあたりのCPUコストを表します。1より大きい2のべき乗である必要があります。デフォルト値は16384です。

    • blockSize – 各ブロックサイズの値を定義します。デフォルト値は8です。

    • parallelization – 並列化パラメータを定義します。デフォルト値は1です。

    • – costのエイリアスであり、代わりに使用できます。両方を同時に指定することはできません。

    • – blockSizeのエイリアスです。こちらも同時に指定することはできません。

    • – parallelizationのエイリアスです。同様にどちらか一方のみ指定可能です。

    • maxmem – メモリ使用量の上限値です。128*N*r > maxmem の条件を満たす場合にエラーがスローされます。デフォルト値は32*1024*1024です。

  • callback – エラー発生時にエラーを処理したい場合に呼び出される関数です。

サンプルコード例1

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

node scrypt.js

scrypt.js

// crypto.scrypt()メソッドの動作を示すNode.jsプログラム

// cryptoモジュールをインポート
var crypto = require('crypto');

// パラメータを指定してscrypt()メソッドを呼び出す
crypto.scrypt('tutorialspoint', 'asdfghjkl', 32, (err, derivedKey) => {

if (err) throw err;

// 導出された鍵をバッファ値として表示
console.log("The derived key(1) is:", derivedKey);
});

// costオプションを指定してscrypt()メソッドを呼び出す
crypto.scrypt('GeeksforGeeks', 'tfytdx', 128,
    { N: 512 }, (err, derivedKey) => {

if (err) throw err;

// 導出された鍵をバッファ値として表示
console.log("The derived key(2) is:", derivedKey);
console.log();
});

実行結果

C:\home\node>> node scrypt.js
The derived key(2) is: <Buffer b3 f8 72 5f 58 df 98 d9 c0 8a ba 0c 2c 50 85 b1
76 de 39 35 40 27 7d 57 f1 6a a1 07 54 dc c9 63 65 32 f2 db 29 95 dc ee 0b 9f
e3 d5 0a 9e 3a d0 f6 b4 ... >

The derived key(1) is: <Buffer ae 50 38 61 17 f7 11 51 e4 50 63 3c 2a 9c ec f0
46 42 a6 ca 04 78 67 05 c8 8c 0c 69 00 c3 03 7f>

サンプルコード例2

続いて、別の例を見てみましょう。saltにTypedArrayやDataViewを使用したパターンです。

// crypto.scrypt()メソッドの動作を示すNode.jsプログラム

// cryptoモジュールをインポート
var crypto = require('crypto');

// saltの値をTypedArrayとして初期化
const salt = new Uint32Array(7);

// パラメータを指定してscrypt()メソッドを使用
crypto.scrypt('WelcomeTutorialspoint', salt, 16, (err, derivedKey) => {
    if (err) throw err;
    // 導出された鍵をエンコードされた文字列形式で表示
    console.log("The derived key(1) is:",
        derivedKey.toString("ascii"));
});

// saltの値をDataViewとして初期化
const newSalt = new DataView(new ArrayBuffer(5));

// costパラメータを指定してscrypt()メソッドを使用
crypto.scrypt('HelloTutorialspoint', newSalt, 16, { N: 32 }, (err, derivedKey) => {
    if (err) throw err;
    // 導出された鍵をエンコードされた文字列形式で表示
    console.log("The derived key(2) is:",
        derivedKey.toString("base64"));
});

実行結果

C:\home\node>> node scrypt.js
The derived key(2) is: PBYDRlgayLVGjC8z3YUcSQ==
The derived key(1) is: <Uu0allCb,d?,Z5_

このようにcrypto.scrypt()メソッドを使うことで、パスワードから安全な導出鍵を簡単に生成できます。saltの一意性の確保やmaxmemなどのオプション設定を適切に行うことで、より堅牢なセキュリティを実現しましょう。

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