비대칭키 + KDF
RFC 7748 + RFC 5869
교차 검증된 파이프라인
X25519 + HKDF
키 합의 후 솔트와 컨텍스트 info를 넣은 HKDF-SHA-256으로 32바이트 세션키를 유도한다.

개요 및 암호학적 배경
원시 타원곡선 디피-헬만 공유 비밀은 GF(2255 − 19) 위의 곡선 좌표일 뿐 균일하게 분포한 비트열이 아니므로, AES나 ChaCha20 키로 바로 연결해서는 안 됩니다. TLS 1.3(RFC 8446), HPKE(RFC 9180), Signal X3DH 같은 현대 키 교환 표준은 ECDH 공유 비밀을 언제나 입력 키 재료(IKM)로 HKDF에 넣고, 프로토콜 솔트와 영역 구분용 문맥 문자열(info)을 함께 사용합니다.
이 두 단계 워크플로우는 X25519 Key Exchange (ECDH)(RFC 7748 §6.1의 Alice/Bob 키쌍 사용)를 HKDF Key Derivation에 연결합니다. SHA-256, 13바이트 솔트, ASCII 문맥 라벨 "nodecrypto session key"(6e6f646563727970746f2073657373696f6e206b6579)로 32바이트(256비트) 대칭 세션키를 유도합니다.
파이프라인 배선 구조와 단계별 흐름
Workflow Input
──►
X25519 ECDH (SharedSecret 32B)
──►
HKDF-SHA-256 (IKM + Salt + Info → 32B)
──►
Workflow Output (SessionKey)
- 1단계: Curve25519 키 합의(
X25519 Key Exchange (ECDH)):PrivateKey와PeerPublicKey로 32바이트 원시 공유 비밀4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742를 계산합니다. - 2단계: HKDF 추출과 확장(
HKDF Key Derivation): 원시 공유 비밀을ikm포트로 받고,Workflow Input의Salt,Info와 결합해 32바이트SessionKey를 확장합니다.
노드 구성 및 설정
| 노드 | 역할과 주요 매개변수 | 개수 |
|---|---|---|
| Workflow Input | PrivateKey, PeerPublicKey, Salt, Info 공급 | 1 |
| X25519 Key Exchange (ECDH) | 32바이트 원시 Curve25519 공유 비밀 계산 | 1 |
| HKDF Key Derivation | hashAlgorithm = "SHA-256", keyLength = 32로 설정 | 1 |
| Workflow Output | 32바이트 SessionKey 수집 | 1 |
입출력 명세 및 시험 벡터 검증
검증 출처: RFC 7748 §6.1 shared secret; HKDF-SHA-256 output cross-checked with Node.js crypto.hkdfSync
X25519 공유 비밀은 RFC 7748로, HKDF-SHA-256 출력은 Node.js의 hkdfSync와 교차 검증했습니다.
입력
| 이름 | 타입 | 값 (Hex) |
|---|---|---|
PrivateKey | bytes (32 B) | 77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a |
PeerPublicKey | bytes (32 B) | de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f |
Salt | bytes (13 B) | 000102030405060708090a0b0c |
Info | bytes (22 B, ASCII "nodecrypto session key") | 6e6f646563727970746f2073657373696f6e206b6579 |
기대 출력
| 이름 | 타입 | 값 (Hex) |
|---|---|---|
SessionKey | bytes (32 B) | 7d87f69eef5eee6ad11c518723db4f5f8708a99c84e9a3589df85d62d7b14c9b |