Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

Node.js crypto.createVerify() 메서드 완벽 가이드 – 디지털 서명 검증 방법

Node.js의 crypto.createVerify() 메서드는 매개변수로 전달된 알고리즘을 사용하여 검증(verify) 객체를 생성하고 반환합니다. 사용 가능한 모든 서명 알고리즘의 이름은 crypto.getHashes() 메서드를 통해 확인할 수 있습니다.

일반적으로 다이제스트(digest) 알고리즘 이름을 사용하지만, 일부 경우에는 'RSA-SHA256'과 같은 서명 알고리즘 이름을 직접 지정하여 Verify 인스턴스를 생성할 수도 있습니다.

문법(Syntax)

crypto.createVerify(algorithm, [options])

매개변수(Parameters)

이 메서드가 받는 매개변수는 아래와 같습니다.

  • algorithm – 검증 객체를 생성할 때 사용할 알고리즘의 이름을 입력받습니다. 예: 'SHA256', 'RSA-SHA256' 등

  • options – 선택적(optional) 매개변수로, 스트림(stream) 동작을 제어하는 데 사용됩니다.

예제 1: 검증 객체 생성하기

createVerify.js라는 이름의 파일을 생성하고 아래 코드를 복사해 넣습니다. 파일 생성 후 다음 명령어로 코드를 실행할 수 있습니다.

node createVerify.js

createVerify.js

// createVerify() 메서드 사용 예제

// crypto 모듈 불러오기
const crypto = require('crypto');

// 입력한 알고리즘으로 검증 객체 생성
const verify = crypto.createVerify('SHA256');

// 검증 객체 출력
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() 메서드는 내부적으로 쓰기 가능한 스트림(writable stream) 형태의 Verify 객체를 반환합니다.

예제 2: 공개키로 서명 검증하기

이번에는 실제 데이터에 대한 디지털 서명을 공개키(public key)로 검증하는 예제를 살펴보겠습니다.

// createVerify() 메서드 사용 예제

// crypto 모듈 불러오기
const crypto = require('crypto');

// SHA256 알고리즘으로 검증 객체 생성
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

위 예제에서는 제공된 공개키와 서명이 'TutorialPoint'라는 데이터와 일치하지 않기 때문에 결과로 false가 출력됩니다. 만약 올바른 키 쌍으로 생성된 서명이라면 true가 반환됩니다.

정리

crypto.createVerify()는 Node.js에서 디지털 서명을 검증할 때 핵심적인 역할을 하는 메서드입니다. 주요 활용 흐름은 다음과 같습니다.

  • crypto.createVerify(algorithm)으로 검증 객체를 생성한다.
  • verify.write()로 검증 대상 데이터를 스트림에 기록하고 verify.end()로 마무리한다.
  • verify.verify(publicKey, signature)를 호출하여 서명의 유효성을 확인한다.

이 메서드는 전자문서 무결성 검증, API 요청 인증, JWT 서명 검증 등 보안이 중요한 다양한 분야에서 활용됩니다.