//
Search
🔑

PasswordEncoder (1)

Spring Security를 사용하면서 유저의 Password를 관리해야할 필요가 있음
Password를 관리할 때는 일단 두가지가 만족되어야 함
1. 회원가입할 때 Password를 입력받으면 그 값을 암호화해서 저장해야 함. 2. 로그인할 대 입력받은 Password와 회원가입할 때의 Password를 비교할 수 있어야 함
JavaScript
복사
이 두가지를 만족하기 위해서는 보통 해시 함수라는 알고리즘 방식을 이용함
해시 함수는 암호화는 비교적 쉽지만 복호화가 거의 불가능한 방식의 알고리즘
이것을 사용하면 아래와 같은 방식으로 password를 관리할 수 있음
1. 회원가입할 때 password를 해시함수로 암호화해서 저장함 2. 로그인할 때 password가 들어오면 같은 해시함수로 암호화함 3. 저장된 값을 불러와서 2번의 암호화된 값과 비교함 4. 동일하면 같은 암호로 인지함
JavaScript
복사

PasswordEncoder

package org.springframework.security.crypto.password; public interface PasswordEncoder { String encode(CharSequence rawPassword); boolean matches(CharSequence rawPassword, String encodedPassword); default boolean upgradeEncoding(String encodedPassword) { return false; } }
JavaScript
복사
→ PasswordEncoder 인터페이스를 보면 encode는 있지만 decode는 없음(단방향성)

PasswordEncoder 종류

1.
NoOpPasswordEncoder
암호화하지 않고 평문으로 사용
password가 그대로 노출되기 때문에 현재는 deprecated 되었고 사용하지 않기를 권장
2.
BcryptPasswordEncoder
Bcrypt 해시 함수를 사용한 PasswordEncoder
Bcrypt는 애초부터 패스워드 저장을 목적으로 설계되었음
Password를 무작위로 여러번 시도하여 맞추는 해킹을 방지하게 위해 암호를 확인할 때 의도적으로 느리게 설정
강도 설정이 가능한데 강도가 높을 수록 오랜 시간이 걸림
3.
Pdkdf2PasswordEncoder
Pdkdf2는 NIST에 의해서 승인된 알고리즘
4.
ScryptPasswordEncoder
Pdkdf2와 유사
공격이 매우 어렵고 안전하다고 평가 받음
보안에 아주 민감한 경우에 사용