설명
MD5와 SHA-1은 충돌 공격에 취약하므로 충돌 저항성이 필요한 무결성 검증이나 데이터 식별에 사용하지 마세요. 비밀번호 저장에는 충돌 저항성뿐 아니라 오프라인 대입 공격을 늦추는 별도의 해시 설계가 필요합니다.
잠재적 영향
- 무결성 검증 우회
- 토큰 또는 인증 자료 위조 가능성 증가
- 비밀번호 저장 강도 저하
해결 방법
- 보안 목적의 해시는 SHA-256/SHA-512 또는 SHA-3 계열을 사용합니다.
- 비밀번호 저장에는 Argon2id, bcrypt, scrypt, PBKDF2 같은 비밀번호 전용 해시를 사용합니다.
- 레거시 호환 목적의 MD5/SHA-1은 보안 결정 경로와 분리합니다.
예시
변경 전
swift
let digest = Insecure.MD5.hash(data: tokenData)
변경 후
swift
import Foundation
import CryptoKit
func hashToken(_ tokenData: Data) -> SHA512.Digest {
return SHA512.hash(data: tokenData)
}
설명:
- 변경 전: MD5를 식별용 digest로 사용하면 강한 충돌 저항성을 기대할 수 없습니다.
- 변경 후: 충분한 엔트로피를 가진 토큰의 식별용 digest에는 SHA-2/SHA-3 계열을 사용합니다. 비밀번호에는 SHA-512 같은 빠른 해시가 아니라 Argon2id, scrypt, bcrypt, PBKDF2 같은 비밀번호 전용 해시를 사용해야 합니다.