키 유도 함수
IT 위키
키 유도 함수(Key Derivation Function, KDF)는 암호학에서 마스터 키, 암호 또는 비밀 값으로부터 필요한 형식의 암호 키(또는 키 재료)를 안전하게 유도해 내는 함수이다.
개념과 목적[편집 | 원본 편집]
KDF는 다음 목적을 달성하기 위해 설계된다:
- 비밀 값(비밀번호, 마스터 키, 공유 비밀 등)으로부터 하나 이상의 암호 키를 생성
- 출력 키의 길이를 조절하거나 포맷을 맞춤
- 동일 입력이 주어졌을 때 항상 동일한 출력 (결정론성)
- 역산(출력 → 입력 복원)이 사실상 불가능 (단방향성)
- 입력의 비균등한 분포를 보완하여 출력이 통계적으로 강건하게 분포되도록 함
예를 들어, 디피-헬만 등에서 산출된 공유 비밀(shared secret)을 대칭 암호 키로 쓰기 적합한 형태로 변환할 때 KDF가 쓰인다.
KDF는 흔히 “키 스트레칭(key stretching)” 또는 “키 강화(key strengthening)” 기법과 결합되어 사용되는데, 이는 약한 입력(예: 사람이 기억하는 짧은 비밀번호)을 공격자가 쉽게 브루트포스하지 못하도록 연산 비용을 높이는 방법이다.
주요 요소 및 입력[편집 | 원본 편집]
KDF는 일반적으로 다음과 같은 입력을 받는다:
- 비밀 입력(예: password, master key, shared secret)
- 솔트(salt) — 동일 입력에 대해 항상 같은 결과가 나오지 않도록 하는 랜덤 값
- 반복 횟수 또는 비용 파라미터 (iteration count, 메모리 비용 등)
- (선택적) 부가 정보(info / context) — 파생된 키가 특정 용도나 컨텍스트에 묶이도록
이들 입력을 기반으로 의사난수 함수(Pseudo‑Random Function, PRF) 또는 해시 기반 구조 등을 반복하여 최종 유도된 키(derived key)를 생성한다. 또한, NIST에서도 KDF를 “공유된 비밀이나 키 등으로부터 키 재료(keying material)를 생성하는 함수”로 정의하고 있다.
대표적 KDF 알고리즘[편집 | 원본 편집]
다음은 널리 사용되는 주요 KDF 알고리즘들이다:
- PBKDF2 (Password‑Based Key Derivation Function 2)
- 입력 비밀번호 + 솔트 + 반복 횟수를 받아 HMAC 등을 반복 적용하여 유도 키를 생성한다.
- 단점은 메모리 요구가 낮아서 병렬 하드웨어 공격에 취약할 수 있다는 점이다.
- bcrypt
- 원래는 비밀번호 해싱 함수지만 KDF 형태로도 볼 수 있다.
- Blowfish 암호 설계 기반으로, 비용 파라미터(cost)를 조절하면 연산 부담을 조절할 수 있다.
- scrypt
- 메모리 비용도 함께 높이는 설계로 병렬화 공격을 어렵게 만든다.
- Argon2
- 암호 대회(Password Hashing Competition) 우승자로, 메모리와 병렬성 제어가 강화된 설계다.
- HKDF (HMAC-based KDF)
- “extract-then-expand” 구조를 가지며, HMAC을 기반으로 안전하게 여러 출력을 유도할 수 있다.
안전 고려 사항 및 설계 원칙[편집 | 원본 편집]
KDF를 설계하거나 사용할 때 고려해야 할 주요 사항은 다음과 같다:
- 충분한 반복 또는 비용 설정
- 반복 횟수(iteration)나 메모리/시간 비용을 높여 공격자가 많은 연산을 요구하도록 설계해야 한다.
- 충분한 솔트 사용
- 동일 비밀번호라도 서로 다른 솔트를 써서 동일 출력이 나오지 않도록 해야 한다. (레인보우 테이블 공격 방지)
- context 바인딩 (info, label 등)
- 동일 입력이더라도 서로 다른 목적(예: 암호화 키 / MAC 키 등)에 대해 다른 파생 키가 나오도록 보장할 수 있어야 한다.
- 병렬화 및 하드웨어 공격 저항성
- 단순한 반복 구조는 GPU/ASIC 기반 병렬 공격에 유리하므로, 메모리-하드(Memory-Hard) 구조 또는 제어 요소가 중요하다.
- 출력 키 독립성
- 서로 다른 목적의 키들이 서로 영향을 미치지 않도록 독립성을 유지해야 한다.
응용 및 활용 예[편집 | 원본 편집]
- 비밀번호 저장 시스템에서 해시 대신 또는 해시와 병합하여 사용
- 키 교환(예: Diffie-Hellman) 후 공유된 비밀을 대칭 암호키나 MAC 키로 변환
- 하나의 마스터 키로부터 여러 하위 키를 유도 (키 다변화, 키 분할)
- 암호 프로토콜에서 세션 키, 인증 키 등을 생성
한계 및 도전[편집 | 원본 편집]
- 비용을 너무 높이면 사용자 경험이 나빠질 수 있다
- 연산 비용만 늘리는 방식은 병렬 하드웨어 공격 대비 불충분할 수 있다
- 설계 오류 또는 파라미터 미스매치가 보안 취약점을 초래할 수 있다
- 반복 횟수나 비용 기준을 어떻게 지속적으로 업데이트할지 관리가 필요하다
같이 보기[편집 | 원본 편집]
참고 문헌[편집 | 원본 편집]
- Elaine Barker, Lily Chen, Richard Davis, NIST SP 800‑56C Rev. 2: Recommendation for Key‑Derivation Methods in Key‑Establishment Schemes
- Hugo Krawczyk, "Cryptographic Extraction and Key Derivation: The HKDF Scheme"
- Colin Percival, "Stronger Key Derivation via Sequential Memory‑Hard Functions"
- Burt Kaliski, "PKCS #5: Password-Based Cryptography Specification, Version 2.0"