본문 바로가기

카테고리 없음

[Spring Boot] Security6 PasswordEncoder의 주요 구현체

 

 

 

Spring Security에서 다양한 PasswordEncoder 구현체를 사용할 수 있습니다.

 

1. NoOpPasswordEncoder

  • 설명: 비밀번호를 아무런 해싱, 인코딩, 암호화 없이 일반 텍스트로 저장합니다.
  • 추천 사용 환경: 데모 애플리케이션, 비운영 환경
  • 운영 환경 사용 여부: 사용하지 않음
  • 이유: 비밀번호가 평문으로 저장되므로 보안에 취약합니다.

2. StandardPasswordEncoder

  • 설명: SHA-256 해싱 알고리즘을 사용하여 비밀번호를 해싱하며, 시스템 전체 비밀 값을 추가적으로 사용하여 보호합니다.
  • 추천 사용 환경: 레거시 애플리케이션
  • 운영 환경 사용 여부: 사용하지 않음
  • 이유: 사용이 중단(Deprecated)되었으며, 보안성 측면에서 더 이상 안전하지 않습니다.

3. Pbkdf2PasswordEncoder

  • 설명: PBKDF2 (Password-Based Key Derivation Function 2) 알고리즘을 사용하여 비밀번호를 해싱합니다.
  • 추천 사용 환경: 과거에 개발된 애플리케이션
  • 운영 환경 사용 여부: 최근에는 사용하지 않음
  • 이유: 최신 보안 요구사항을 충족하지 못할 수 있으며, 고성능 GPU를 사용한 무차별 대입 공격에 취약할 수 있습니다.

4. BCryptPasswordEncoder

  • 설명: Bcrypt 해싱 알고리즘을 사용하여 비밀번호를 해싱합니다.
  • 운영 환경 사용 여부: 사용 권장
  • 이유: 높은 보안성을 제공하며, 해커가 해시 값을 복호화하는 것이 매우 어렵습니다.

5. SCryptPasswordEncoder

  • 설명: Scrypt 해싱 알고리즘을 사용하여 비밀번호를 해싱합니다.
  • 운영 환경 사용 여부: 사용 권장
  • 이유: 메모리와 CPU를 많이 소모하여 무차별 대입 공격을 어렵게 만듭니다.

6. Argon2PasswordEncoder

  • 설명: Argon2 해싱 알고리즘을 사용하여 비밀번호를 해싱합니다.
  • 운영 환경 사용 여부: 사용 권장
  • 이유: 메모리 하드 기능을 가지고 있어 해커가 해시 값을 추측하는 것을 매우 어렵게 만듭니다.

무차별 대입 공격(Brute Force Attack)

  • 설명: 해커가 모든 가능한 비밀번호 조합을 시도하여 비밀번호를 알아내는 공격 방식입니다.
  • 방어 방법:
    • 강력한 비밀번호 정책: 사용자가 짧고 단순한 비밀번호를 사용하지 않도록 강력한 비밀번호 정책을 적용합니다.
    • 강력한 해싱 알고리즘 사용: Bcrypt, SCrypt, Argon2와 같은 해싱 알고리즘을 사용하여 해커가 해시 값을 복호화하는 것을 어렵게 만듭니다.

PasswordEncoder 선택 기준

  • BCryptPasswordEncoder:
    • 대부분의 웹 애플리케이션에 권장됨.
    • 성능과 보안의 균형이 잘 맞음.
    • 오랜 기간 동안 검증된 안정적인 선택.
  • SCryptPasswordEncoder:
    • 추가적인 메모리 요구로 인해 보안이 강화됨.
    • 성능 저하가 큰 문제가 되지 않는 경우에 사용.
  • Argon2PasswordEncoder:
    • 가장 강력한 보안을 제공하지만 성능 문제가 있을 수 있음.
    • 최고 수준의 보안이 필요할 때 사용.

요약

BCryptPasswordEncoder는 대부분의 운영 웹 애플리케이션에 가장 적합한 선택입니다. 이는 성능과 보안의 균형이 잘 맞기 때문입니다. 만약 성능 문제가 크게 문제가 되지 않는다면, SCrypt 또는 Argon2PasswordEncoder를 고려할 수 있습니다. 특히 Argon2는 최신의 해싱 알고리즘으로 최고 수준의 보안을 제공하지만, 성능 저하를 감수해야 합니다. 따라서 각 애플리케이션의 요구사항과 상황에 맞춰 적절한 PasswordEncoder를 선택하는 것이 중요합니다.