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 서명 검증 등 보안이 중요한 다양한 분야에서 활용됩니다.