모르지 않다는 것은 아는것과 다르다.

Spring Security

PasswordEncoder

채마스 2022. 3. 24. 21:05

PasswordEncoder 란?

  • spring security 를 사용할때 패스워드를 암호화하는 전략을 정할 수 있다.

  • 아래와 같이 PasswordEncoder 를 빈으로 등록한다.
@Bean
public PasswordEncoder passwordEncoder() {
    return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}

 

 

PasswordEncoder 전략

  • 아래와 같이 5가지의 전략을 갖는다.

  • NoOpPasswordEncoder
    • 암호화하지 않고 평문으로 사용한다.
    • password가 그대로 노출되기 때문에 현재는 deprecated 되었고 사용하지 않기를 권장한다.
  • BcryptPasswordEncoder
    • Bcrypt 해시 함수를 사용한 PasswordEncoder 이다.
    • Bcrypt는 애초부터 패스워드 저장을 목적으로 설계되었다.
    • Password를 무작위로 여러번 시도하여 맞추는 해킹을 방지하기 위해 암호를 확인할 때 의도적으로 느리게 설정되었다.
    • BcryptPasswordEncoder는 강도를 설정할 수 있는데 강도가 높을수록 오랜 시간이 걸린다.
  • Pbkdf2PasswordEncoder
    • Pbkdf2는 NIST(National Institute of Standards and Technology, 미국표준기술연구소)에 의해서 승인된 알고리즘이다.
    • 미국 정부 시스템에서도 사용된다.
  • ScryptPasswordEncoder
    • Scrypt는 Pbkdf2와 유사하다.
    • 해커가 무작위로 password를 맞추려고 시도할 때 메모리 사용량을 늘리거나 반대로 메모리 사용량을 줄여서 느린 공격을 실행할 수밖에 없도록 의도적인 방식을 사용한다.
    • 따라서 공격이 매우 어렵고 Pbkdf2보다 안전하다고 평가받는다.
    • 보안에 아주 민감한 경우에 사용할 수 있다.
  • 또한 DelegatingPasswordEncoder 를 통해서 어떤 전략으로 할지 지정한다.
  • 위에서 {noop} {bcrypt} {sha256} {pbkdf2} {scrypt} 는 DelegatingPasswordEncoder는 어떤 PasswordEncoder를 선택했는지 알려주기 위해서 앞에 암호화 방식을 표현한 것이다.
  • DelegatingPasswordEncoder는 인코딩 전략으로 Bcrypt를 기본 Encoder로 사용하고 있다.

 

 

 

REFERENCES

  • 안성훈님의 스프링 시큐리티

'Spring Security' 카테고리의 다른 글

스프링시큐리티 테스트  (0) 2022.03.24
JWT  (0) 2022.02.28
ProxyFactory 를 이용한 동적 Method 인가 처리  (0) 2022.02.28
Method 시큐리티 프로세스 커스텀  (0) 2022.02.28
URL 시큐리티 프로세스 커스텀  (0) 2022.02.28