crypto.createDiffieHellman() 메서드는 Node.js의 crypto 모듈에서 제공하는 기능으로, 전달받은 소수(prime) 값과 선택적인 생성자(generator)를 기반으로 디피-헬만(DiffieHellman) 키 교환 객체를 생성합니다.
생성자(generator) 인수는 문자열(string), 숫자(number), Buffer 타입 중 하나를 사용할 수 있으며, 별도로 지정하지 않으면 기본값인 2가 적용됩니다.
문법(Syntax)
crypto.createDiffieHellman(prime, [primeEncoding], [generator], [generatorEncoding])
매개변수(Parameters)
prime – 생성할 소수의 비트 길이를 나타내는 값입니다. 입력 타입은 number입니다.
primeEncoding – prime 문자열의 인코딩 방식을 정의하는 매개변수입니다. string, Buffer, TypedArray, DataView 타입을 사용할 수 있습니다.
generator – 키 교환 객체를 생성할 때 사용되는 생성자 값입니다. 기본값은 2입니다.
generatorEncoding – generator 문자열의 인코딩 방식을 정의하는 매개변수입니다.
예제 1: 서버와 클라이언트 키 생성
먼저 index.js라는 이름의 파일을 생성하고 아래 코드를 복사한 뒤, 다음 명령어로 실행해 보세요.
node index.js
프로그램 코드
// crypto.createDiffieHellman(prime, [primeEncoding],
// [generator], [generatorEncoding])
// 데모 예제
// crypto 모듈 불러오기
const crypto = require('crypto');
// 소수(prime) 값 초기화 및 정의
const server = crypto.createDiffieHellman(20);
// 키 생성
server.generateKeys();
// 서버의 prime과 generator를 이용해 클라이언트 키 생성
const client = crypto.createDiffieHellman(
server.getPrime(), server.getGenerator());
client.generateKeys();
// 서버와 클라이언트 값 출력
console.log("Server prime: ", server.getPrime().toString('hex'),
"\nServer generator: ", server.getGenerator().toString('hex'));
console.log("Client prime: ", client.getPrime().toString('hex'),
"\nClient generator: ", client.getGenerator().toString('hex'));실행 결과
C:\home\node>> node index.js Server prime: 0fed0b Server generator: 02 Client prime: 0fed0b Client generator: 02
서버와 클라이언트에 동일한 인수가 전달되었기 때문에, 양쪽에서 생성된 키 값도 동일하게 출력됩니다. 이처럼 같은 prime과 generator를 공유하면 통신 당사자 간에 일관된 키 교환 환경을 구성할 수 있습니다.
예제 2: prime 및 generator 값 확인하기
이번에는 생성된 객체의 prime 값과 generator 값을 직접 출력해 보겠습니다.
// crypto.createDiffieHellman(prime, [primeEncoding],
// [generator], [generatorEncoding])
// 데모 예제
// crypto 모듈 불러오기
const crypto = require('crypto');
// 소수(prime) 값 초기화 및 정의
const val = crypto.createDiffieHellman(12);
// 생성된 DiffieHellman 객체의 prime 값 출력
console.log(val.getPrime());
// generator 값 출력
console.log(val.getGenerator());실행 결과
C:\home\node>> node index.js <Buffer 0f 6b> <Buffer 02>
정리
crypto.createDiffieHellman() 메서드는 안전한 키 교환을 위한 디피-헬만 프로토콜 구현의 핵심 도구입니다. prime 비트 길이와 generator 값을 조절하여 원하는 강도의 키 교환 객체를 손쉽게 만들 수 있으며, getPrime(), getGenerator(), generateKeys() 등의 메서드와 함께 활용하면 서버·클라이언트 간 암호화 통신의 기반을 마련할 수 있습니다.