PBKDF2 키 파생
비밀번호에서 안전한 암호화 키 생성
PBKDF2 문서
PBKDF2 (Password-Based Key Derivation Function 2)는 RFC 8018에 정의된 암호화 표준입니다. 반복 해싱을 통해 비밀번호를 안전한 암호화 키로 변환하여 무차별 대입 공격을 계산적으로 비용이 많이 들게 만듭니다.
PBKDF2는 WPA2 WiFi 암호화, iOS 데이터 보호, macOS FileVault 및 수많은 엔터프라이즈 비밀번호 저장 시스템을 포함한 보안 프로토콜에서 널리 채택되었습니다. NIST 승인 상태로 인해 규정 준수가 중요한 애플리케이션의 최우선 선택이 되었습니다.
PBKDF2 작동 원리
PBKDF2는 의사 난수 함수(기본적으로 HMAC-SHA256)를 반복 적용하여 파생 키를 생성합니다:
- 비밀번호, 솔트, 반복 횟수 및 원하는 키 길이를 입력으로 받음
- 비밀번호를 키로, 솔트 + 카운터를 메시지로 HMAC 적용
- 지정된 반복 횟수만큼 HMAC 작업 반복
- 중간 결과를 연결하여 최종 파생 키 생성
OWASP 권장 반복 횟수 (2023)
Open Web Application Security Project (OWASP)는 해시 알고리즘 강도에 따른 최소 반복 지침을 제공합니다. 이러한 값은 현대 하드웨어 공격에 대한 적절한 보호를 보장하도록 조정되었습니다:
| 해시 알고리즘 | 최소 반복 | 권장 |
|---|---|---|
| PBKDF2-SHA256 | 310,000 | 600,000+ |
| PBKDF2-SHA384 | 210,000 | 500,000+ |
| PBKDF2-SHA512 | 120,000 | 210,000+ |
| PBKDF2-SHA1 | 1,300,000 | 비권장 |
일반적인 사용 사례
- 사용자 비밀번호에서 AES/ChaCha20 암호화 키 파생
- 인증 시스템에서의 비밀번호 저장 및 검증
- 마스터 비밀번호에서 결정론적 키 생성 (비밀번호 관리자)
- 디스크 암호화 및 보안 컨테이너를 위한 키 파생
KDF 비교: PBKDF2 vs Bcrypt vs Argon2
| 기능 | PBKDF2 | Bcrypt | Argon2 |
|---|---|---|---|
| 표준 | RFC 8018 | OpenBSD | RFC 9106 |
| 메모리 하드 | 아니오 | 제한적 (4KB) | 예 |
| GPU 저항성 | 낮음 | 보통 | 높음 |
| 최적 사용 사례 | FIPS/NIST 규정 준수 | 레거시 시스템 | 새로운 애플리케이션 |
보안 모범 사례
- 항상 최소 16바이트(128비트)의 암호학적으로 무작위한 솔트 사용
- 솔트는 파생 키와 함께 저장 - 비밀이 아님
- 하드웨어 발전에 맞춰 매년 반복 횟수 증가
- GPU 공격에 대한 메모리 하드 보호가 필요한 새 시스템에는 Argon2id 고려