TLS 1.2 키 교환
ECDHE (X25519) · TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 · 2번 왕복 · 비교: TLS 1.3 키 교환
TLS 1.2와 1.3 비교
| TLS 1.2 | TLS 1.3 | |
|---|---|---|
| 왕복 수 | 2번 | 1번 |
| 키 교환 | RSA, 고정 DH도 허용 | ECDHE / DHE만 (항상 전방 비밀성 보장) |
| 키 유도 | PRF (HMAC-SHA256 체인) | HKDF (Extract + Expand) |
| 인증서 | 평문으로 보냄 | 암호화해서 보냄 |
| 서버 서명 대상 | ServerKeyExchange의 키 | 핸드셰이크 전체 (CertificateVerify) |
| ChangeCipherSpec | 필요 | 없음 (호환용 빈 메시지만) |
| AES-GCM nonce | 고정 4바이트 + 보내는 8바이트 | IV 12바이트 ⊕ 레코드 번호 |
상수 · 표준이 정해 두어 누구나 같은 값
TLS 1.2RFC 5246 · RFC 5288
| 기호 | 이름 | 정의 · 출처 | 값 |
|---|---|---|---|
| 암호 스위트 | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | c02f | |
| PRF 해시 | P_SHA256 | SHA-256 | |
| 레이블 | PRF에 쓰는 이름 | "master secret", "key expansion", "client finished", "server finished" | |
| master secret 길이 | 항상 고정 | 48바이트 | |
| key block 길이 | 쓰기 키 2 × 16 + 고정 IV 2 × 4 | 40바이트 | |
| verify_data 길이 | Finished에 담는 값 | 12바이트 | |
| GCM nonce 구성 | 고정 IV 4바이트 ‖ 레코드마다 보내는 8바이트 | 12바이트 |
Curve25519RFC 7748
| 기호 | 이름 | 정의 · 출처 | 값 |
|---|---|---|---|
| p | 소수 p (체의 크기) | 2²⁵⁵ − 19 | 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed |
| A | 곡선 계수 A | v² = u³ + Au² + u | 486662 |
| a24 | 래더 상수 a24 | (A − 2) / 4 | 121665 |
| u(G) | 기준점 G의 u 좌표 | 가장 작은 적합한 u | 9 |
| ℓ | 위수 ℓ (부분군) | 2²⁵² + 27742317777372353535851937790883648493 | 1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed |
| h | 보조인자 h (cofactor) | 곡선 위 점의 개수 = 8ℓ | 8 |
AES-256-GCMFIPS 197 · NIST SP 800-38D
| 기호 | 이름 | 정의 · 출처 | 값 |
|---|---|---|---|
| 블록 크기 | AES의 입출력 단위 | 128비트 (16바이트) | |
| 키 길이 | AES-256 | 256비트 (32바이트) | |
| Nr | 라운드 수 | AES-256 (AES-128은 10) | 14 |
| IV(nonce) 길이 | 권장값 · 이때 J₀ = IV ‖ 0³¹1 | 96비트 (12바이트) | |
| 카운터 시작값 | J₀의 마지막 32비트 | 00000001 | |
| R | GHASH 축약 상수 | x¹²⁸ + x⁷ + x² + x + 1 → 11100001 ‖ 0¹²⁰ | e1000000000000000000000000000000 |
| t | 태그 길이 | 최대값 (이 페이지에서 쓰는 값) | 128비트 (16바이트) |