BCryptPasswordEncoder

김연수·2023년 3월 2일
0

Java

목록 보기
7/7

BCryptPasswordEncoder는 Spring Security 프레임워크에서 제공하는 클래스로 비밀번호를 암호화(해시)하는 데에 사용한다.

해시 함수에는 MD5SHA 등의 종류가 있지만 BCrypt는 단순히 입력을 1회 해시시키는 것이 아니라 솔트(salt)를 부여하여 여러번 해싱하므로 더 안전하게 암호를 관리할 수 있다.

BCrypt는 같은 비밀번호를 암호화하더라도 해시 값은 매번 다른 값이 도출된다.

따라서 BCryptPasswordEncoder에서는 사용자가 제출된 비밀번호와 암호화되어 저장된 비밀번호의 일치 여부를 확인하는 메소드가 제공된다.

BCryptPasswordEncoder는 BCrypt의 로그 라운드라고도 하는 강도(strength)를 설정할 수 있는데, strength가 클 수록 암호를 해시하기 위해 더 많은 작업을(기하급수적으로) 수행해야 한다.

기본값은 10이며 4에서 31 사이의 값을 설정할 수 있다.

PasswordEncoder 인터페이스를 구현한 클래스이다

생성자의 인자 값(verstion, strength, SecureRandom instance)을 통해서 해시의 강도를 조절할 수 있다.

보안이 뚫리게 된다면 비밀번호 데이터는 무방비하게 노출된다. 이런 경우를 대비해 BCryptPasswordEncoder에서 제공하는 메서드를 활용하여 비밀번호를 암호화 함으로써 비밀번호 데이터가 노출되더라도 확인하기 어렵도록 만들어 줄 수 있다.

String encode(CharSequence rawPassword)

패스워드를 암호화해주는 메소드로, 8바이트 이상의 무작위로 생성된 솔트와 결합된 SHA-1 이상의 해시를 적용한다.

java.lang.CharSequence 타입의 패스워드를 매개변수로 입력해주면 암호화 된 패스워드를 String 타입으로 반환해준다.

해시시킬 때 무작위로 생성한 salt가 포함되므로 같은 비밀번호를 인코딩해도 매번 다른 결과값이 반환된다.

boolean matches(CharSequence rawPassword, String encodedPassword)

제출된 인코딩 되지 않은 암호와 저장소에 있는 인코딩된 암호가 일치하는지 확인한다. 비밀번호가 일치하면 true를 반환하고 일치하지 않으면 false를 반환한다. 저장된 비밀번호 자체는 절대로 디코딩되지 않는다.

인코딩 시킬 때마다 같은 암호도 매번 다른 결과가 나오기 때문에 로그인 등에서 사용자가 입력한 암호가 일치하는지 확인하려면 이 메소드를 사용해야 한다.

boolean upgradeEncoding(String encodedPassword)

더 나은 보안을 위해 인코딩된 암호를 다시 인코딩해야 하는 경우 true를 반환하고, 그렇지 않으면 false를 반환한다.

기본 구현은 항상 false를 반환한다.

해당 메소드는 기본적으로 항상 false를 반환하므로 필요하다면 오버라이딩 하여 encode된 암호의 안전성을 체크하는 로직을 구현해서 사용해야 한다.

출처 : bestinu

profile
코린이

0개의 댓글