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

Node.js crypto.createDiffieHellman() 메서드 완벽 정리: 디피-헬만 키 교환 객체 생성하기

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() 등의 메서드와 함께 활용하면 서버·클라이언트 간 암호화 통신의 기반을 마련할 수 있습니다.