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 |