본문 바로가기

Language/Spring Security

[PasswordEncoder] BCryptPasswordEncoder

728x90
  • Spring Security 의존성을 추가 해야만 PasswordEncoder 제공
  • PasswordEncoder의 구현체인 BCryptPasswordEncoderHashing(해싱) 방식을 사용하여 복호화가 불가능한 단방향 방식
  • 비밀번호는 노출이 되어서는 안 되기 때문에 암호화를 시키고 복호화를 할 필요가 없이, 사용자가 입력한 비밀번호가 맞는지만 검증하면 되기 때문에 BCryptPasswordEncoder를 사용

 

BCryptPasswordEncoder 사용 이유?

 

  • 강력한 해시 알고리즘
    • BCrypt는 해시 계산이 느리기 때문에 공격자가 무작위 대입 공격(Brute-force attack)을 시도하는 데 시간이 더 많이 소요
  • Salt 자동 생성
    • BCrypt는 내부적으로 랜덤한 salt 값을 생성하여 해싱 과정에 포함
    • 이로 인해 동일한 비밀번호라도 해시 결과가 달라지므로 보안이 강화

  • 조정 가능한 작업 비용
    • BCrypt는 작업 비용을 조정할 수 있어 하드웨어 성능에 따라 해시 계산 난이도를 조절 가능

 

암호화(Encode)
  • PasswordEncoder.encode(CharSequence rawPassword)
  • rawPassword를 인코딩하여 암호화

 

비교(Matches)
  • PasswordEncoder.matches(CharSequence rawPassword, String encodePassword)
  • rawPassword와 encodePassword를 비교
  • BCryptPasswordEncoder랜덤한 salt 값을 해싱 과정에 포함하여 encode할 때마다 매번 다른 해시 결과가 나오기 때문에 두 개가 동일한 지 비교하기 위해서는 matches() 메서드를 사용

 

728x90