crypto.createECDH()란?
Node.js의 crypto.createECDH() 메서드는 타원 곡선 디피-헬만(Elliptic Curve Diffie-Hellman, 이하 ECDH) 키 교환 객체를 생성하는 데 사용됩니다. 이 메서드는 매개변수로 전달된 curveName에 해당하는 사전 정의된 타원 곡선을 기반으로 동작하며, Node.js의 'crypto' 모듈에 포함되어 있습니다.
ECDH는 두 통신 당사자가 안전하지 않은 네트워크 환경에서도 공유 비밀 키를 안전하게 설정할 수 있도록 해주는 암호화 프로토콜로, TLS/SSL 통신 등 다양한 보안 시스템에서 널리 활용됩니다.
참고로, 사용 가능한 모든 타원 곡선 이름의 목록은 crypto.getCurves() 메서드를 통해 확인할 수 있습니다.
문법(Syntax)
crypto.createECDH(curveName)
매개변수(Parameters)
curveName – ECDH 객체를 생성할 때 사용할 타원 곡선의 이름입니다. 이 값으로 지정된 곡선이 ECDH 연산의 기반이 됩니다.
예제 1: ECDH 키 생성하기
createECDH.js라는 이름의 파일을 생성하고 아래 코드를 작성한 뒤, 다음 명령어로 실행해 보겠습니다.
node createECDH.js
createECDH.js
// ECDH 생성을 위한 Node.js 데모 프로그램
// crypto 모듈 불러오기
const crypto = require('crypto');
// createECDH() 메서드 호출
const curve = crypto.createECDH('secp521r1');
// 생성된 곡선 키 출력
console.log(curve.generateKeys());실행 결과
C:\home\node>> node createECDH.js <Buffer 04 00 be c4 3b eb cc ea 33 84 31 b0 7d 8b 9f e6 5b e0 6e 3a 40 21 49 f0 20 9f 92 33 cf 32 d7 a7 f1 df 90 82 9b fe 8f 7b 98 5b 7d 1a ee c6 ae b1 bd 1a ... >
위 실행 결과에서 볼 수 있듯이, generateKeys() 메서드는 생성된 키를 Buffer 형태로 반환합니다.
예제 2: 공개 키와 개인 키 조회하기
이번에는 generateKeys()로 키 쌍을 생성한 후, getPublicKey()와 getPrivateKey() 메서드를 사용해 공개 키와 개인 키를 각각 확인하는 예제를 살펴보겠습니다.
// ECDH 생성을 위한 Node.js 데모 프로그램
// crypto 모듈 불러오기
const crypto = require('crypto');
// createECDH() 메서드 호출
const curve = crypto.createECDH('secp521r1');
curve.generateKeys();
// 공개 키와 개인 키 출력
console.log("Public Key: ", curve.getPublicKey());
console.log("Private Key: ", curve.getPrivateKey());실행 결과
C:\home\node>> node createECDH.js Public Key: <Buffer 04 01 10 f7 fb d9 d7 f9 70 ba 6e 59 42 77 b6 1b 28 21 f1 3f ac 43 28 72 c6 33 b5 89 d3 77 6e 5a ea 8a 8a a1 27 a7 ab f1 b1 ea 41 ac dc c5 09 83 01 48 ... > Private Key: <Buffer 01 d8 c4 d9 df 5c c8 54 e2 1f 82 94 ba 9c cd bc 88 3a e5 88 aa bd c8 2b 5c e9 f4 59 81 0b ae 18 f4 bf 21 43 56 74 55 d8 1d e6 b8 5f d8 e7 e2 52 ad 03 ... >
정리
crypto.createECDH()는 지정된 타원 곡선을 기반으로 ECDH 키 교환 객체를 생성합니다.generateKeys()를 반드시 먼저 호출해야 공개 키와 개인 키가 생성됩니다.생성된 객체는
getPublicKey(),getPrivateKey(),computeSecret()등의 메서드와 함께 사용되어 안전한 키 교환을 수행할 수 있습니다.