본문 바로가기

Programming/Spring Boot

[Spring Boot] Spring Security PasswordEncoder

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

        https://gompangs.tistory.com/entry/Spring-Password-Encoder