Swift 비밀번호에 부적절한 해시 알고리즘 사용

비밀번호에 부적절한 해시 알고리즘 사용

설명

SHA-2/SHA-3 같은 빠른 해시 함수는 충돌 저항성이 있더라도 비밀번호 저장에는 계산 비용이 낮아 오프라인 대입 공격에 취약합니다.

잠재적 영향

  • 비밀번호 크래킹 비용 감소
  • 유출된 해시의 원문 복구 가능성 증가
  • 계정 탈취와 인증 우회

해결 방법

  1. 비밀번호 저장에는 Argon2id, bcrypt, scrypt, PBKDF2 같은 비밀번호 전용 해시를 사용합니다.
  2. 일반 해시가 필요한 무결성 검증과 비밀번호 저장 경로를 분리합니다.
  3. salt는 안전한 난수로 생성하고, 작업 비용 파라미터는 환경에 맞게 설정한 뒤 주기적으로 정책을 갱신합니다.

예시

변경 전

swift
let passwordHash = SHA512.hash(data: passwordData)

변경 후

swift
let result = try Argon2Swift.hashPasswordString(password: password, salt: salt)

설명:

  • 변경 전: SHA-512는 빠른 일반 해시라 비밀번호 저장에는 적합하지 않습니다.
  • 변경 후: 비밀번호 전용 해시 알고리즘을 사용해 오프라인 대입 공격 비용을 높입니다.

참조