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

Node.js crypto.getCurves() 메서드 완벽 정리 – 지원되는 타원 곡선 목록 확인하기

Node.js의 crypto.getCurves() 메서드는 현재 시스템에서 지원하는 모든 타원 곡선(elliptic curve)의 이름을 배열 형태로 반환합니다. 이 메서드는 Elliptic Curve Diffie-Hellman(ECDH) 키 교환 객체를 생성할 때 활용할 수 있는 다양한 곡선 목록을 제공하므로, 암호화 작업에 적합한 곡선을 선택할 때 유용하게 사용됩니다.

crypto.getCurves()란?

crypto 모듈은 Node.js에서 암호화 기능을 담당하는 핵심 내장 모듈입니다. 그중 getCurves()는 OpenSSL이 지원하는 타원 곡선 전체 목록을 손쉽게 조회할 수 있는 방법을 제공합니다. 반환된 배열에는 secp256k1, prime256v1처럼 널리 알려진 곡선부터 brainpool 계열, WTLS 관련 곡선까지 포함되어 있습니다.

문법(Syntax)

crypto.getCurves()

매개변수(Parameters)

이 메서드는 지원되는 모든 타원 곡선의 목록을 반환하는 역할만 하기 때문에 별도의 매개변수를 받지 않습니다.

반환값

시스템에서 지원하는 타원 곡선 이름들이 담긴 문자열 배열(Array)을 반환합니다.

예제

아래 코드를 curves.js라는 이름의 파일로 저장한 뒤, 다음 명령어로 실행해 보세요.

node curves.js

curves.js

// 모든 타원 곡선을 가져오는 Node.js 데모 프로그램

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

// getCurves() 메서드 호출
const curves = crypto.getCurves();

// 지원되는 모든 타원 곡선 목록 출력
console.log("지원되는 타원 곡선 목록은 다음과 같습니다: ", curves);

실행 결과(Output)

C:\home\node>> node curves.js
지원되는 타원 곡선 목록은 다음과 같습니다: [ 'Oakley-EC2N-3',
'Oakley-EC2N-4', 'SM2',
'brainpoolP160r1', 'brainpoolP160t1',
'brainpoolP192r1', 'brainpoolP192t1',
'brainpoolP224r1', 'brainpoolP224t1',
'brainpoolP256r1', 'brainpoolP256t1',
'brainpoolP320r1', 'brainpoolP320t1',
'brainpoolP384r1', 'brainpoolP384t1',
'brainpoolP512r1', 'brainpoolP512t1',
'c2pnb163v1', 'c2pnb163v2',
'c2pnb163v3', 'c2pnb176v1',
'c2pnb208w1', 'c2pnb272w1',
'c2pnb304w1', 'c2pnb368w1',
'c2tnb191v1', 'c2tnb191v2',
'c2tnb191v3', 'c2tnb239v1',
'c2tnb239v2', 'c2tnb239v3',
'c2tnb359v1', 'c2tnb431r1',
'prime192v1', 'prime192v2',
'prime192v3', 'prime239v1',
'prime239v2', 'prime239v3',
'prime256v1', 'secp112r1',
'secp112r2', 'secp128r1',
'secp128r2', 'secp160k1',
'secp160r1', 'secp160r2',
'secp192k1', 'secp224k1',
'secp224r1', 'secp256k1',
'secp384r1', 'secp521r1',
'sect113r1', 'sect113r2',
'sect131r1', 'sect131r2',
'sect163k1', 'sect163r1',
'sect163r2', 'sect193r1',
'sect193r2', 'sect233k1',
'sect233r1', 'sect239k1',
'sect283k1', 'sect283r1',
'sect409k1', 'sect409r1',
'sect571k1', 'sect571r1',
'wap-wsg-idm-ecid-wtls1', 'wap-wsg-idm-ecid-wtls10',
'wap-wsg-idm-ecid-wtls11', 'wap-wsg-idm-ecid-wtls12',
'wap-wsg-idm-ecid-wtls3', 'wap-wsg-idm-ecid-wtls4',
'wap-wsg-idm-ecid-wtls5', 'wap-wsg-idm-ecid-wtls6',
'wap-wsg-idm-ecid-wtls7', 'wap-wsg-idm-ecid-wtls8',
'wap-wsg-idm-ecid-wtls9' ]

활용 팁

반환된 곡선 목록은 ECDH 키 교환을 구현할 때 crypto.createECDH(curveName) 메서드의 인자로 사용할 수 있습니다. 예를 들어 비트코인에서 사용되는 secp256k1이나 TLS에서 표준으로 쓰이는 prime256v1(NIST P-256) 같은 곡선을 선택할 때, 먼저 이 메서드로 해당 곡선이 시스템에서 지원되는지 확인하는 것이 좋습니다. 참고로 반환되는 목록은 시스템에 설치된 OpenSSL 버전에 따라 달라질 수 있습니다.