HKDF 키 파생
RFC 5869 HMAC 기반 Extract-and-Expand 키 파생
HKDF 문서
HKDF (HMAC 기반 Extract-and-Expand 키 파생 함수)는 RFC 5869에 정의되어 있습니다. 추출(Extract)과 확장(Expand)의 2단계 프로세스를 통해 입력 키 재료로부터 암호화 키를 파생하는 강력한 방법을 제공합니다.
HKDF는 TLS 1.3, Signal Protocol, Noise Protocol Framework, SSH 등 현대 보안 프로토콜에서 널리 채택되고 있습니다. 추출과 확장 단계의 명확한 분리는 키 계층 구조 파생에 특히 적합합니다.
추출 단계: HKDF-Extract(salt, IKM) → PRK
추출 단계는 입력 키 재료(IKM)에 분산되어 있을 수 있는 엔트로피를 고정 길이의 의사 랜덤 키(PRK)로 집중시킵니다:
- 솔트 (선택, 기본값 HashLen 개의 0)와 IKM을 입력으로 받음
- PRK = HMAC-Hash(salt, IKM) 계산
- PRK 길이는 해시 출력 길이와 같음 (SHA-256의 경우 32바이트)
- 솔트는 HMAC의 키로 작용하여 추출을 강화
확장 단계: HKDF-Expand(PRK, info, L) → OKM
확장 단계는 PRK를 원하는 길이의 출력 키 재료(OKM)로 늘립니다:
- PRK, info (컨텍스트/라벨), 원하는 출력 길이 L을 받음
- T(i) = HMAC-Hash(PRK, T(i-1) | info | counter)를 반복 계산
- 결과 연결: OKM = T(1) | T(2) | ... | T(N)
- 최대 출력 길이는 255 × HashLen 바이트
일반적인 사용 사례
- TLS 1.3 키 스케줄: 트래픽 시크릿, 핸드셰이크 키, 애플리케이션 키 파생
- Signal Protocol: 공유 비밀에서 체인 키와 메시지 키 파생
- SSH 키 교환: ECDH 후 암호화 키와 무결성 키 파생
- 키 계층 구조: 마스터 시크릿에서 여러 용도별 키 파생
HKDF vs PBKDF2
| 특징 | HKDF | PBKDF2 |
|---|---|---|
| 표준 | RFC 5869 | RFC 8018 |
| 입력 유형 | 공유 비밀, DH 출력 | 사용자 비밀번호 |
| 반복 횟수 | 단일 패스 | 다수 (10K-1M) |
| 속도 | 빠름 | 의도적으로 느림 |
| Info 매개변수 | 예 (컨텍스트 바인딩) | 아니오 |
| 주요 사용 사례 | 고엔트로피 입력 | 저엔트로피 비밀번호 |
보안 고려사항
- HKDF는 IKM에 이미 충분한 엔트로피가 있다고 가정합니다; 약한 비밀번호에 사용하지 마세요
- info 매개변수는 키의 의도된 용도를 고유하게 식별해야 합니다 (컨텍스트 분리)
- 솔트는 선택 사항이지만 동일한 IKM에서 여러 키를 추출할 때 권장됩니다
- PRK는 직접 사용하면 안 됩니다; 항상 확장 단계를 사용하여 최종 키를 파생하세요