익명 사용자
로그인하지 않음
토론
기여
계정 만들기
로그인
IT 위키
검색
키 유도 함수
편집하기
IT 위키
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
편집
원본 편집
역사
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
키 유도 함수(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 키로 변환 *하나의 마스터 키로부터 여러 하위 키를 유도 (키 다변화, 키 분할) *암호 프로토콜에서 세션 키, 인증 키 등을 생성 ==한계 및 도전== *비용을 너무 높이면 사용자 경험이 나빠질 수 있다 *연산 비용만 늘리는 방식은 병렬 하드웨어 공격 대비 불충분할 수 있다 *설계 오류 또는 파라미터 미스매치가 보안 취약점을 초래할 수 있다 *반복 횟수나 비용 기준을 어떻게 지속적으로 업데이트할지 관리가 필요하다 ==같이 보기== *[[암호 해시 함수]] *[[메모리 하드 암호 함수]] *[[비밀번호 해싱 알고리즘]] *[[HKDF]] ==참고 문헌== *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" ==각주== [[분류:암호학]] [[분류:보안 기법]]
요약:
IT 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
IT 위키:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
둘러보기
둘러보기
대문
최근 바뀜
광고
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록