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

Node.js crypto.createDiffieHellmanGroup() 메서드 완벽 가이드

crypto.createDiffieHellmanGroup() 메서드는 Node.js의 crypto 모듈에서 미리 정의된 그룹 이름을 기반으로 DiffieHellmanGroup 객체를 생성하는 데 사용됩니다. 이 메서드는 crypto.getDiffieHellman()의 별칭(alias)이기도 하며, 두 메서드는 동일한 기능을 수행합니다.


Diffie-Hellman 키 교환은 통신 당사자가 안전하지 않은 채널을 통해 공유 비밀키를 안전하게 설정할 수 있게 해주는 암호학 프로토콜입니다. createDiffieHellmanGroup()은 RFC 3526에서 정의된 표준 그룹(modp1 ~ modp18)을 활용하여 이러한 키 교환 객체를 손쉽게 만들 수 있도록 도와줍니다.


문법(Syntax)

crypto.createDiffieHellmanGroup(name)

매개변수(Parameters)

  • name – 생성할 Diffie-Hellman 그룹의 이름입니다. 문자열(string) 타입의 값을 입력받으며, 'modp1', 'modp5', 'modp14', 'modp17' 등과 같은 표준화된 그룹 이름을 사용할 수 있습니다.


예제 1: hex 형식으로 키 생성하기

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

node diffieHellmanGroup.js

diffieHellmanGroup.js

// crypto.createDiffieHellmanGroup 데모 예제

// crypto 모듈 가져오기
const crypto = require('crypto');

// 그룹 이름 정의
const name = 'modp1';

// DiffieHellman 그룹 생성
var diffieHellmanGroup = crypto.createDiffieHellmanGroup(name);

// 위 그룹에 대한 인코딩된 키 출력
console.log(diffieHellmanGroup.generateKeys('hex'));

출력 결과

C:\home\node>> node diffieHellmanGroup.js
55963b8969c6b5d67dc7a2d80e6bcbea55bdb50000661c8d6e026be5366619edb9971755942fd8
fa5cba5d66a0326db9957d0ff412bfe22ee2431398206b97210b86c802e1be6777bce3d6cf735f
bb3c7cdee4016db9d252a66be82d58158a21

위 예제에서는 'modp1' 그룹을 사용하여 Diffie-Hellman 객체를 생성하고, generateKeys() 메서드에 'hex' 인코딩 옵션을 전달해 16진수 형태의 공개키를 출력했습니다.


예제 2: base64 형식으로 키 생성하기

이번에는 다른 그룹 이름과 다른 인코딩 방식을 적용한 추가 예제를 살펴보겠습니다.

// crypto.createDiffieHellmanGroup 데모 예제

// crypto 모듈 가져오기
const crypto = require('crypto');

// 그룹 이름 정의
const name = 'modp17';

// DiffieHellman 그룹 생성
var diffieHellmanGroup = crypto.createDiffieHellmanGroup(name);

// 위 그룹에 대한 인코딩된 키 출력
console.log(diffieHellmanGroup.generateKeys('base64'));

출력 결과

C:\home\node>> node diffieHellmanGroup.js
p3PwqFTpIqOIE3mP+iaMHEosAy8jPCdRDck1HtvbFaMMvJzlfihwzLZB0ZCoEzDRSnlHo+0NjOkNLM
0jM0usS8Ri5wwxw19qwjr00HvxGf0crQtd8ytIVLFX2WWXaT7d8XR/vtw1BUgUVg0mNhKGTLDcVy1A
7CRHzCrDqePaVqnU0QkR2t7S1BvmaMXvkToAdzZnJMPSjZWPVOHzMTOTnpI450TQMLFLv/YGUmKbAO
BaAVbuwfWOHVQrcxgThGGtMRJjjayh0Q77RmoqpKcMWceJPlQhFIMG/jFrNEaacbgb0Ctnm1/d1UgE
UTIg0phE4/1GXdnEDRPGVXURaxzPU+N48QVAB7Dyzpcq4k2f/mARLILPufEP/8FBawmMDoyAE4PS/Z
1RFwwuInhdbhgxTTRV+nkzSwTt0V51q+B9fek2xDfeWDqwibr+OWdU0DXs07mUsFVJdVJSZFM7txIg
UYH/6Tb+EnIt//JVR7hUrphWFhZCE1+7AcrHfNNX/lq8ukTNU+Bh6A9c1g9Ua2MjGXGLADAw7S7Hvq
OfVWy/f9JAbxt6bIz7LswioLGsaeKuEhGOxK8WRkeIbf1wbKF4kZQC8Q1V4XHFXI0wQ/Qhc7yyOZUc
/lwGsUnCqVR+Fqibd1YHk5vcaUfnQMIyvwAXtRBKz49PLc6/V4deDX/243zCe1UucxPodjuyYbRwx0
9Kqr8yT7fVkctF+eQNSOCABDpykwPxz/P2X6Tq9NW4KcOm0uZ+39AVWl7pMmLb8rf8VKJQLCGUoMYl
XEwG0XnERJk4AmxDWOICFDcgVrXhJn5OyJzysc9gYOlMrlEVpJzk55lz1JXld6mSk3YMrGZyDE2OHH
SzDx9EWpH8MJZpdPtDQ3/njptVM7m9i76fM7x5irqo+tonOy2myJPVBOl9gcMs556p7p0MRWVmi0AP
ulIONRicQeMjHxFR5Di8RDjfXrHz66CFJa9vEzhKNMZDQon2XdZlzgxr35cFdRIQNQq1zeGGzny7N4
03NGbPZP5b

'modp17'은 더 큰 소수 크기를 가진 그룹이므로, 생성되는 키 길이도 'modp1'에 비해 상당히 깁니다. 이처럼 보안 강도가 높은 환경이 필요하다면 더 큰 modp 그룹을 선택하는 것이 좋습니다.


정리

crypto.createDiffieHellmanGroup(name)은 표준화된 modp 그룹을 기반으로 Diffie-Hellman 키 교환 객체를 빠르게 생성할 수 있는 편리한 메서드입니다. 직접 소수와 생성원(generator)을 지정해야 하는 createDiffieHellman()과 달리, 검증된 표준 매개변수를 사용하므로 구현 실수로 인한 보안 취약점을 줄일 수 있다는 장점이 있습니다.