일반 해시 함수는 빠른 게 설계 목표입니다. 파일 무결성 체크에는 장점이지만, 비밀번호 보호에서는 치명적 약점이 됩니다.
| 알고리즘 | 목적 | Salt | GPU 저항 | 현재 권장 |
|---|---|---|---|---|
| SHA-256 직접 | 파일 해시 | ❌ | ❌ 없음 | 금지 |
| PBKDF2 | 비밀번호 | ✅ | ⚠ 약함 | FIPS 환경만 |
| bcrypt | 비밀번호 | ✅ 자동 | ✅ 양호 | 레거시 OK |
| scrypt | 비밀번호 | ✅ | ✅ 메모리 집약 | 권장 |
| Argon2id | 비밀번호 | ✅ | ✅✅ 최강 | 최우선 권장 |
비밀번호는 해싱(Hashing)이 아니라 키 스트레칭(Key Stretching)을 해야 합니다.
빠른 해시 = 공격자에게 유리 / 의도적으로 느린 전용 함수 = 방어자에게 유리
DB가 탈취되더라도 공격자가 원본 비밀번호를 역산하는 데 수년이 걸려야 합니다.
2015 Password Hashing Competition 우승작. NIST SP 800-63B 권장. 메모리·CPU·병렬 비용 모두 조절 가능.
1999년 설계, 여전히 안전. cost factor가 1 증가할 때마다 연산량 2배. 72바이트 초과 입력 잘림 주의.
Colin Percival 설계. N이 메모리/CPU 비용을 동시에 결정. Litecoin에서도 사용.
FIPS 140-2/3 인증 환경(금융·정부)에서 요구 시 사용. GPU 저항성은 위 셋보다 약함.
일반 해시는 속도가 빠른 게 오히려 약점입니다. GPU로 초당 수십억 번 대입 가능합니다.
| 알고리즘 | 메모리 하드 | 속도 조절 | FIPS 인증 | 권장 |
|---|---|---|---|---|
| Argon2id | ✅ 강력 | ✅ | ❌ | ✅ 1순위 |
| bcrypt | ⚠ 제한적 | ✅ | ❌ | 레거시 호환 |
| scrypt | ✅ | ✅ | ❌ | Argon2 선호 |
| PBKDF2 | ❌ | ✅ | ✅ | 규제 환경 전용 |
① Salt는 반드시 랜덤, 사용자마다 다르게
② DB에는 해시 + salt 함께 저장
③ 로그인 실패 횟수 제한은 별도 구현
비밀번호는 해시(Hash)가 아니라 키 스트레칭(Key Stretching)입니다.
빠른 해시 = 공격자에게 유리 / 느린 전용 함수 = 방어자에게 유리
자유로운 환경 → Argon2id / 레거시 → bcrypt cost≥12 / 규제(FIPS) → PBKDF2 600,000+
키 스트레칭 알고리즘 비교 · 검증 도구 | Argon2id · bcrypt · scrypt · PBKDF2
생성된 해시를 복사해 붙여넣고 현재 비밀번호와 일치하는지 확인합니다.