비대칭키 · ECDH
Curve25519
RFC 7748 §6.1 검증됨
X25519 키 합의
한쪽 개인키와 상대 공개키로 공유 비밀을 계산하며 RFC 7748로 검증했다.
개요 및 암호학적 배경
X25519(IETF RFC 7748)는 소수체 2255 − 19 위의 몽고메리 곡선 Curve25519(y2 = x3 + 486662x2 + x)에 기반한 타원곡선 디피-헬만(ECDH) 함수입니다. 상수 시간 몽고메리 래더로 실행하도록 설계되었고 트위스트 공격과 잘못된 곡선 공격에 면역이며, 공개키는 32바이트 리틀엔디언 u 좌표, 개인키는 32바이트 클램핑된 스칼라를 씁니다.
이 워크플로우는 RFC 7748 §6.1을 재현합니다. Alice의 32바이트 개인키 a와 Bob의 32바이트 공개키 B로 32바이트 공유 비밀 K = X25519(a, B)를 계산합니다. 실제 프로토콜에서는 이 원시 공유 비밀을 반드시 HKDF 같은 키 유도 함수에 통과시켜야 합니다(X25519 + HKDF 참고).
파이프라인 배선 구조와 단계별 흐름
Workflow Input (PrivateKey 32B, PeerPublicKey 32B)
──►
X25519 Key Exchange (ECDH)
──►
Workflow Output (SharedSecret 32B)
- 키 재료 입력(
Workflow Input): Alice의 32바이트PrivateKey와 Bob의 32바이트PeerPublicKey를 공급합니다. - 스칼라 곱셈(
X25519 Key Exchange (ECDH)): 개인키 스칼라를 클램핑(비트 0, 1, 2, 255를 지우고 비트 254를 세움)한 뒤 GF(2255 − 19) 위에서 몽고메리 래더를 계산합니다. 공유 비밀이 전부 0이 되는 저차수 점은 거부합니다. - 공유 비밀 출력(
Workflow Output): 32바이트 공유 비밀 K를 내보냅니다.
노드 구성 및 설정
| 노드 | 역할과 주요 매개변수 | 개수 |
|---|---|---|
| Workflow Input | PrivateKey(32 B)와 PeerPublicKey(32 B) 공급 | 1 |
| X25519 Key Exchange (ECDH) | RFC 7748 Curve25519 스칼라 곱셈 계산 | 1 |
| Workflow Output | 32바이트 SharedSecret 수집 | 1 |
입출력 명세 및 시험 벡터 검증
검증 출처: RFC 7748 §6.1 (Alice private key, Bob public key)
입력
| 이름 | 타입 | 값 (Hex) |
|---|---|---|
PrivateKey | bytes (32 B) | 77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a |
PeerPublicKey | bytes (32 B) | de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f |
기대 출력
| 이름 | 타입 | 값 (Hex) |
|---|---|---|
SharedSecret | bytes (32 B) | 4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742 |