설명
SHA-2/SHA-3 같은 빠른 해시 함수는 충돌 저항성이 있더라도 비밀번호 저장에는 계산 비용이 낮아 오프라인 대입 공격에 취약합니다.
잠재적 영향
- 비밀번호 크래킹 비용 감소
- 유출된 해시의 원문 복구 가능성 증가
- 계정 탈취와 인증 우회
해결 방법
- 비밀번호 저장에는 Argon2id, bcrypt, scrypt, PBKDF2 같은 비밀번호 전용 해시를 사용합니다.
- 일반 해시가 필요한 무결성 검증과 비밀번호 저장 경로를 분리합니다.
- salt는 안전한 난수로 생성하고, 작업 비용 파라미터는 환경에 맞게 설정한 뒤 주기적으로 정책을 갱신합니다.
예시
변경 전
swift
let passwordHash = SHA512.hash(data: passwordData)
변경 후
swift
let result = try Argon2Swift.hashPasswordString(password: password, salt: salt)
설명:
- 변경 전: SHA-512는 빠른 일반 해시라 비밀번호 저장에는 적합하지 않습니다.
- 변경 후: 비밀번호 전용 해시 알고리즘을 사용해 오프라인 대입 공격 비용을 높입니다.