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

Node.jsのcrypto.createVerify()メソッドの使い方をわかりやすく解説

crypto.createVerify()メソッドとは

Node.jsのcrypto.createVerify()メソッドは、引数で指定したアルゴリズムを使用する検証(Verify)オブジェクトを生成して返します。利用可能な署名アルゴリズムの一覧は、crypto.getHashes()メソッドで確認できます。

また、一部のケースではダイジェストアルゴリズムの代わりに、「RSA-SHA256」のような署名アルゴリズム名を直接指定してVerifyインスタンスを作成することも可能です。

構文

crypto.createVerify(algorithm, [options])

パラメータ

このメソッドが受け取るパラメータは以下の通りです。

  • algorithm – Verifyオブジェクトを生成する際に使用するアルゴリズム名を文字列で指定します。

  • options – 省略可能なパラメータです。ストリームの動作を制御したい場合に使用します。

使用例1:Verifyオブジェクトの生成

まずは、基本的な使い方としてVerifyオブジェクトを生成し、その内容を出力してみましょう。「createVerify.js」という名前のファイルを作成し、以下のコードをコピーしてください。作成後、次のコマンドで実行できます。

node createVerify.js

createVerify.js

// createVerify()メソッドの使用例を示すNode.jsプログラム

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

// 指定したアルゴリズム(SHA256)でVerifyオブジェクトを生成
const verify = crypto.createVerify('SHA256');

// Verifyオブジェクトの内容を出力
console.log(verify);

出力結果

C:\home\node>> node createVerify.js
Verify {
    _handle: {},
    _writableState:
    WritableState {
       objectMode: false,
       highWaterMark: 16384,
       finalCalled: false,
       needDrain: false,
       ending: false,
       ended: false,
       finished: false,
       destroyed: false,
       decodeStrings: true,
       defaultEncoding: 'utf8',
       length: 0,
       writing: false,
       corked: 0,
       sync: true,
       bufferProcessing: false,
       onwrite: [Function: bound onwrite],
       writecb: null,
       writelen: 0,
       bufferedRequest: null,
       lastBufferedRequest: null,
       pendingcb: 0,
       prefinished: false,
       errorEmitted: false,
       emitClose: true,
       autoDestroy: false,
       bufferedRequestCount: 0,
       corkedRequestsFree:
        {  next: null,
           entry: null,
           finish: [Function: bound onCorkedFinish] } },
    writable: true,
    _events: [Object: null prototype] {},
    _eventsCount: 0,
    _maxListeners: undefined }

このように、createVerify('SHA256')を実行すると、内部にストリーム機能を持つVerifyオブジェクトが生成されていることが確認できます。

使用例2:公開鍵による署名の検証

続いて、より実践的な例として、公開鍵を使ってデジタル署名が有効かどうかを検証してみましょう。

// createVerify()メソッドの使用例を示すNode.jsプログラム

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

// SHA256アルゴリズムからVerifyオブジェクトを生成
const verify = crypto.createVerify('SHA256');

// 検証対象となるデータを書き込み
verify.write('TutorialPoint');

// 書き込みを終了
verify.end();

    // 公開鍵の開始行
    const l1 = "-----BEGIN PUBLIC KEY-----\n"

    // 公開鍵本体(暗号化されたデータ)
    const l2 = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXIvPbzLjaPLd8jgiv1TL/X8PXpJNgDkGRj9U9Lcx1
      yKURpQFVavcMkfWyO8r7JlZNMax0JKfLZUM1IePRjHlFw=="

    // 公開鍵の終了行
    const l3 = "\n-----END PUBLIC KEY-----"

    // 公開鍵全体を連結
    const publicKey = l1 + l2 + l3

    // 検証対象の署名
    const signature = "MEYCIQCPfWhpzxMqu3gZWflBm5V0aetgb2/S+SGyGcElaOjgdgIhALaD4lbxVwa8HUUBFOLz+CGvI
ioDkf9oihSnXHCqh8yV";

    // 署名が有効ならtrue、無効ならfalseを出力
    console.log(verify.verify(publicKey, signature));

出力結果

C:\home\node>> node createVerify.js
false

実行結果の解説

この例では出力がfalseになっています。これは、指定した署名が書き込まれたデータ「TutorialPoint」と対応していないためです。

verify.verify(publicKey, signature)は、渡された公開鍵と署名を使ってデータの整合性をチェックし、署名が正当なものであればtrueを、そうでなければfalseを返します。検証を成功させるには、同じデータを対応する秘密鍵で署名した際に生成される正しい署名を指定する必要があります。

この仕組みを活用することで、APIリクエストの改ざん検知やWebhookの署名検証など、セキュアなデータ通信を実現できます。

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