PasswordEncoder
Spring Sercurity에서 지원하는 비밀번호 단방향 암호화 인터페이스
public interface PasswordEncoder {
// 비밀번호 암호화
String encode(CharSequence rawPassword);
// 암호화되지 않은 비밀번호(raw)와 암호화된 비밀번호(encoded)가 일치하는지 비교
boolean matches(CharSequence rawPassword, String encodedPassword);
// 암호화된 비밀번호를 다시 암호화하고자 할 경우 return true
default boolean upgradeEncoding(String encodedPassword) {
return false;
}
}
BcryptPasswordEncoder
BCrypt 해시 함수를 사용하여 비밀번호를 암호화
처음부터 단방향 암호화를 위해 만들어진 해시 함수
해싱과 salt(72bytes)를 동시에 진행
salting(실제 정보 이외에 추가적으로 무작위 데이터를 더해서 해시값을 계산하는 방법)을 통해 해싱 함수의 취약점 극복
단방향 해시값을 계산한 후 그 해시값을 다시 해시하고, 이를 반복하는 키 스트레칭 적용
Spring에서 가장 권장하는 Password Encoding 방법
Pbkdf2PasswordEncoder
PBKDF2 해시 함수를 사용하여 비밀번호를 암호화
FIPS(Federal Information Processing Standards, 미 연방 시스템 내에서 중요한 데이터를 보호하기 위한 필수 표준)이 필요한 경우 사용
해싱과 salt(8bytes)를 동시에 진행
Argon2PasswordEncoder
Argon2 해시 함수를 사용하여 비밀번호를 암호화
Password Craking을 방지하기 위해 의도적으로 느리게 실행되도록 설정
SCryptPasswordEncoder
SCrypt 해시 함수를 사용하여 비밀번호를 암호화
Salsa20 해시 방식을 사용
reference
- [Spring Security] PasswordEncoder란?
https://velog.io/@corgi/Spring-Security-PasswordEncoder란-4kkyw8gi
- [SpringSecurity] PasswordEncoder
https://velog.io/@hyeinisfree/SpringSecurity-PasswordEncoder
- 왜 Password hashing시 Bcrypt 가 추천되어질까?
https://velog.io/@kylexid/왜-bcrypt-암호화-방식이-추천되어질까
- Bcrypt란❓
https://velog.io/@sangmin7648/Bcrypt란
- Spring Password Encoder
'Programming > Spring Boot' 카테고리의 다른 글
[Spring Boot] Spring Security JWT Token (0) | 2022.02.15 |
---|---|
[Spring Boot] Swagger 3.x 적용 및 접속 (0) | 2022.02.15 |
[Spring Boot] Jackson과 Gson (0) | 2022.02.15 |
[Spring Boot] H2 Database 설치 및 접속 (0) | 2022.02.15 |
[Spring Boot] thymeleaf-layout-dialect 적용하기 (0) | 2021.12.28 |