비대칭키 + KDF RFC 7748 + RFC 5869 교차 검증된 파이프라인

X25519 + HKDF

키 합의 후 솔트와 컨텍스트 info를 넣은 HKDF-SHA-256으로 32바이트 세션키를 유도한다.

앱에서 열기 .ncw 내려받기

X25519 + HKDF

개요 및 암호학적 배경

원시 타원곡선 디피-헬만 공유 비밀은 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. 1단계: Curve25519 키 합의(X25519 Key Exchange (ECDH)): PrivateKey와 PeerPublicKey로 32바이트 원시 공유 비밀 4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742를 계산합니다.
  2. 2단계: HKDF 추출과 확장(HKDF Key Derivation): 원시 공유 비밀을 ikm 포트로 받고, Workflow Input의 Salt, Info와 결합해 32바이트 SessionKey를 확장합니다.

노드 구성 및 설정

노드역할과 주요 매개변수개수
Workflow InputPrivateKey, PeerPublicKey, Salt, Info 공급1
X25519 Key Exchange (ECDH)32바이트 원시 Curve25519 공유 비밀 계산1
HKDF Key DerivationhashAlgorithm = "SHA-256", keyLength = 32로 설정1
Workflow Output32바이트 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)
PrivateKeybytes (32 B)77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a
PeerPublicKeybytes (32 B)de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f
Saltbytes (13 B)000102030405060708090a0b0c
Infobytes (22 B, ASCII "nodecrypto session key")6e6f646563727970746f2073657373696f6e206b6579

기대 출력

이름타입값 (Hex)
SessionKeybytes (32 B)7d87f69eef5eee6ad11c518723db4f5f8708a99c84e9a3589df85d62d7b14c9b