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

Node.js crypto.createDiffieHellman(primeLength, [generator]) 메서드 완벽 정리

Node.js의 crypto.createDiffieHellman(primeLength, [generator]) 메서드는 지정한 비트 길이의 소수(prime number)를 생성하고, 이를 기반으로 디피-헬만(Diffie-Hellman) 키 교환 객체를 만들 때 사용됩니다. 두 통신 주체가 사전에 비밀 정보를 공유하지 않고도 안전하게 공통 암호화 키를 만들 수 있도록 도와주는 핵심 기능입니다.

생성자(generator) 값은 선택적으로 지정할 수 있으며, 별도로 전달하지 않으면 기본값 2가 사용됩니다.

문법(Syntax)

crypto.createDiffieHellman(primeLength, [generator])

매개변수(Parameters)

  • primeLength – 생성할 소수의 비트 길이를 의미합니다. 숫자(number) 타입의 값을 입력하며, 값이 클수록 더 안전한 키가 생성되지만 연산 시간도 늘어납니다.

  • generator – 키 교환 객체를 생성할 때 사용할 생성자 값입니다. 생략 시 기본값으로 2가 적용됩니다.

예제 1: 기본 사용법

아래 코드를 index.js 파일로 저장한 뒤, 다음 명령어로 실행해 보세요.

node index.js

index.js

// crypto.createDiffieHellman(primeLength, [generator]) 데모 예제

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

// primeLength 변수 초기화
var primeLength = 29;

// DiffieHellman 키 교환 객체 생성
var exchangeKey = crypto.createDiffieHellman(primeLength);

// 생성된 키 출력
console.log("DiffieHellman 키: " + exchangeKey.generateKeys('base64'));

실행 결과

C:\home\node>> node index.js
DiffieHellman 키: BaRoaA==

예제 2: generator 값 지정 및 공개키·개인키 확인

이번에는 generator 값을 직접 지정하고, 생성된 공개키(public key)와 개인키(private key)까지 함께 출력해 보겠습니다.

// crypto.createDiffieHellman(primeLength, [generator]) 데모 예제

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

// primeLength 변수 초기화
var primeLength = 29;
var generator = 3; // 기본값은 2

// DiffieHellman 키 교환 객체 생성
var exchangeKey = crypto.createDiffieHellman(primeLength, generator);

// 생성된 키 출력 (16진수 형식)
console.log("DiffieHellman 키: " + exchangeKey.generateKeys('hex'));

// 공개키와 개인키 출력
console.log("공개키(Public Key): ",
    exchangeKey.getPublicKey('hex'));
console.log("개인키(Private Key): ",
    exchangeKey.getPrivateKey('hex'));

실행 결과

C:\home\node>> node index.js
DiffieHellman 키: 1a21670d
공개키(Public Key): 1a21670d
개인키(Private Key): 0d4a1a3c

정리

crypto.createDiffieHellman()은 소수의 비트 길이와 생성자 값을 인자로 받아 디피-헬만 키 교환 객체를 손쉽게 생성할 수 있는 메서드입니다. generateKeys(), getPublicKey(), getPrivateKey() 등의 메서드와 함께 사용하면 안전한 키 교환 로직을 간단히 구현할 수 있습니다.