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

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

crypto.generateKeyPairSync()メソッドは、指定したタイプの新しい非対称鍵ペアを同期的に生成するために使用されます。鍵ペアの生成に対応しているタイプは、RSA、DSA、EC、Ed25519、Ed448、X25519、X448、DHの8種類です。

この関数は、publicKeyEncodingまたはprivateKeyEncodingが指定された場合、結果に対してkeyObject.exportが呼び出されたかのように動作します。エンコーディングが指定されていない場合は、keyObjectの該当する部分がそのまま返されます。公開鍵のエンコーディングには「spki」、秘密鍵には「pkcs8」の使用が推奨されています。

構文

crypto.generateKeyPairSync(type, options)

パラメータ

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

  • type ― 鍵を生成する対象のタイプを文字列で指定します。指定できるタイプは、RSA、DSA、EC、Ed25519、Ed448、X25519、X448、DHです。

  • options ― 以下のパラメータを含めることができます。

    • modulusLength ― タイプがRSAまたはDSAの場合の鍵サイズをビット単位で指定します。

    • publicExponent ― RSAアルゴリズムにおける公開指数の値を指定します。
      デフォルト値は 0x10001 です。

    • divisorLength ― qのサイズをビット単位で指定します。

    • namedCurve ― 使用する楕円曲線の名前を指定します。

    • prime ― DHなどのタイプにおける素数パラメータを指定します。

    • primeLength ― 素数の長さをビット単位で指定します。

    • generator ― カスタムジェネレータの値を指定します。デフォルト値は 2 です。

    • groupName ― DHアルゴリズムにおけるディフィー・ヘルマン(Diffie-Hellman)グループ名を指定します。

    • publicKeyEncoding ― 公開鍵のエンコーディング方法を文字列値で指定します。

    • privateKeyEncoding ― 秘密鍵のエンコーディング方法を文字列値で指定します。

使用例1:EC鍵ペアの生成

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

node generateKeyPairSync.js

generateKeyPairSync.js

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

// cryptoモジュールからgenerateKeyPairSyncをインポート
const { generateKeyPairSync } = require('crypto');

// 同期処理で公開鍵と秘密鍵の値を取得
const { publicKey, privateKey } = generateKeyPairSync('ec', {
    namedCurve: 'secp256k1', // オプションの指定
    publicKeyEncoding: {
        type: 'spki',
        format: 'der'
    },
    privateKeyEncoding: {
        type: 'pkcs8',
        format: 'der'
    }
});

// 同期処理で非対称鍵ペアを出力
console.log("公開鍵: ", publicKey);
console.log();
console.log("秘密鍵: ", privateKey);

出力結果

C:\home\node>> node generateKeyPairSync.js
公開鍵: <Buffer 30 56 30 10 06 07 2a 86 48 ce 3d 02 01 06 05 2b 81
04 00 0a 03 42 00 04 a1 76 dd f0 fe 96 cc 28 59 a5 45 16 58 86 ca 3b 56 1e 04
ee b0 de 28 67 0a 70 ... >

秘密鍵: <Buffer 30 81 84 02 01 00 30 10 06 07 2a 86 48 ce 3d 02
01 06 05 2b 81 04 00 0a 04 6d 30 6b 02 01 01 04 20 e6 f0 69 2e b0 35 7d 0b 5c
ba 76 fc dc 9f 95 ae d7 ... >

使用例2:DSA鍵ペアの生成とBase64エンコード

次に、もう一つの例を見てみましょう。この例では、DSAタイプで鍵ペアを生成し、Base64形式での出力も行います。

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

// cryptoモジュールからgenerateKeyPairSyncをインポート
const { generateKeyPairSync } = require('crypto');

// 同期処理で公開鍵と秘密鍵の値を取得
const { publicKey, privateKey } = generateKeyPairSync('dsa', {
    modulusLength: 570, // オプションの指定
    publicKeyEncoding: {
        type: 'spki',
        format: 'der'
    },
    privateKeyEncoding: {
        type: 'pkcs8',
        format: 'der'
    }
});

// エンコード後の非対称鍵ペアを出力
console.log("公開鍵: ", publicKey)
console.log("Base64形式の公開鍵の値: ",
    publicKey.toString('base64'));
console.log("------------------------------------------------------")
console.log("秘密鍵: ", privateKey)
console.log("Base64形式の秘密鍵: ",
    privateKey.toString('base64'));

出力結果

C:\home\node>> node generateKeyPairSync.js
公開鍵: <Buffer 30 82 01 0f 30 81 bf 06 07 2a 86 48 ce 38 04 01 30 81
b3 02 49 00 9a 5c dd a3 ce 0e 8e 3e 0e ed 11 96 13 fe 1c a6 f6 35 27 0c 60 f9
51 ee dd 2c 75 12 ... >
Base64形式の公開鍵の値:
MIIBDzCBvwYHKoZIzjgEATCBswJJAJpc3aPODo4+Du0RlhP+HKb2NScMYPlR7t0sdRJhr0JWPvtRyF
Wmn5ZAldFdDrUye5eQ+HmwgJboEWtCUm3b24CoLSQ74P1YkwIdAJs5rCSAIefaTT469xx+/8C3jS4W
jYpHci0rft8CR3Fx1wxDFdCHJBqPlR7iGxd+7nZlChABL7UqCZMaiwCJ2ijVXc5dgr3Frudu7CbaAn
RJStbqDjm5ppj4aaZV/9FmKvWVao9wA0sAAkhQtXOIWQrHde+fXoZLgPhbTBctPB1tcFztNmq2s3IO
KGfo2kFUL6eJu811SSZ1scQFLVKc5DrZIdW7t3UqzEH+xCVxNkWtGQk=
------------------------------------------------------
秘密鍵: <Buffer 30 81 e5 02 01 00 30 81 bf 06 07 2a 86 48 ce 38 04 01
30 81 b3 02 49 00 9a 5c dd a3 ce 0e 8e 3e 0e ed 11 96 13 fe 1c a6 f6 35 27 0c
60 f9 51 ee dd 2c ... >
Base64形式の秘密鍵:
MIHlAgEAMIG/BgcqhkjOOAQBMIGzAkkAmlzdo84Ojj4O7RGWE/4cpvY1Jwxg+VHu3Sx1EmGvQlY++1
HIVaaflkCV0V0OtTJ7l5D4ebCAlugRa0JSbdvbgKgtJDvg/ViTAh0AmzmsJIAh59pNPjr3HH7/wLeN
LhaNikdyLSt+3wJHcXHXDEMV0IckGo+VHuIbF37udmUKEAEvtSoJkxqLAInaKNVdzl2CvcWu527sJt
oCdElK1uoOObmmmPhpplX/0WYq9ZVqj3AEHgIcJ2ON17GGE4FrtkJak337GB+bAEkb+YjulN2rug==

まとめ

crypto.generateKeyPairSync()メソッドを使うことで、RSAやEC、DSAなど様々なアルゴリズムの非対称鍵ペアを同期的に簡単に生成できます。エンコーディングオプションを指定すれば、DER形式などのバッファとして鍵を直接取得することも可能です。ただし、同期処理のため鍵生成中はイベントループがブロックされる点に注意し、高負荷なアプリケーションでは非同期版のcrypto.generateKeyPair()の使用も検討するとよいでしょう。


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