NodeCrypto 도움말

ECDH Key Agreement

카테고리: 비대칭키 & 타원곡선 · 노드 타입 ID: asymmetric-ecc-ecdh

바이어슈트라스 곡선에서 타원곡선 디피-헬만(ECDH) 공유 비밀을 계산한다 (NIST SP 800-56A / RFC 5903)

개요

단축 바이어슈트라스 타원곡선 위에서 내 개인키 스칼라 $d_A$와 상대방의 공개키 포인트 $Q_B$를 스칼라 곱셈($S = d_A \cdot Q_B$)하여 ECDH(Elliptic Curve Diffie-Hellman, NIST SP 800-56A / RFC 5903) 공유 비밀을 계산한다.

출력 형식으로 표준 공유 점의 X 좌표만 추출하는 X_ONLY(가장 널리 쓰이는 표준), 비압축 점 전체(0x04 || X || Y), 또는 압축 점(0x02/0x03 || X)을 선택할 수 있다. 산출된 원시 공유 비밀은 대칭키로 바로 쓰기보다 HKDF Key Derivation에 통과시켜 세션 키를 파생하는 것이 표준이다.

사용 시점

파라미터 설정

파라미터 (ID)타입 및 기본값노출 조건설명 및 옵션
타원곡선
curve
select
기본값: p256
항상 노출 키 합의에 사용할 타원곡선이다.
  • secp256k1: secp256k1 (Bitcoin / Ethereum)
  • p256: NIST P-256 (secp256r1 / prime256v1)
  • p384: NIST P-384 (secp384r1)
  • p521: NIST P-521 (secp521r1)
  • brainpoolP256r1: Brainpool P256r1 (RFC 5639)
  • brainpoolP384r1: Brainpool P384r1 (RFC 5639)
  • brainpoolP512r1: Brainpool P512r1 (RFC 5639)
비밀값 출력 형식
format
select
기본값: raw_x
항상 노출 이 노드의 비밀값 출력 형식 설정을 지정한다.
  • raw_x: 원시 X 좌표 (NIST SP 800-56A 표준)
  • sha256_kdf: SHA-256 KDF (32바이트 대칭키)
  • compressed: 압축 점 (02/03 + X)
  • uncompressed: 비압축 점 (04 + X + Y)

포트 입출력 명세

포트 연결 규칙, 데이터 타입별 색상, 가변 포트 생성 방식은 포트 및 연결 문서를 참고한다.

입력 포트

포트 성격: 고정 입력 포트 (총 2개).

포트 이름포트 ID데이터 타입필수 여부노출 조건설명
My Private Key privateKey Bytes 필수 항상 노출 내 타원곡선 개인키 스칼라 바이트 배열이다.
Peer Public Key peerPublicKey Bytes 필수 항상 노출 상대방(Peer)의 SEC 1 공개키 포인트 바이트 배열(비압축·압축 모두 지원)이다.

출력 포트

포트 성격: 고정 출력 포트 (총 2개).

포트 이름포트 ID데이터 타입노출 조건설명
Shared Secret sharedSecret Bytes 항상 노출 계산된 ECDH 공유 비밀 바이트 배열(Uint8Array)이다.
Raw Secret X rawSecretX Bytes (32B) 항상 노출 KDF를 거치기 전 ECDH 공유 점의 원시 X 좌표 (NIST SP 800-56A 원시 형식).

오류 케이스

실행 중 아래 조건이 발생하면 이 노드는 ERROR 상태가 되며, 출력 포트에 연결된 하위 노드는 실행되지 않는다.

오류 코드기본 엔진 메시지발생 조건
INVALID_KEY_MATERIAL 키 길이 또는 형식이 올바르지 않는다 Private Key가 유효한 스칼라가 아니거나 Peer Public Key가 선택한 타원곡선 위의 유효한 점이 아닐 때 발생한다.

활용 예시

Alice와 Bob의 P-256 ECDH 키 교환 시뮬레이션하기

두 쌍의 키를 교차 연결하여 양쪽이 동일한 32바이트 공유 비밀을 얻는지 확인한다.

  1. 두 개의 ECC Keypair Generator(Alice, Bob)를 배치한다.
  2. 첫 번째 ECDH Key Agreement에는 Alice의 Private Key와 Bob의 Public Key를 연결하고, 두 번째 노드에는 Bob의 Private Key와 Alice의 Public Key를 연결하면 두 노드의 Shared Secret 출력이 정확히 일치한다.