암호 처리
4.1. PasswordEncoder 계약의 이해
4.1.1. PasswordEncoder 계약의 정의
인증 프로세스에서 암호가 유효한지 확인하는 역할
아무도 읽을 수 없게 해시를 저장하는 것이 좋다.
encode()
matches()
upgradeEncoding()은 보안 향상을 위해 다시 인코딩 하는데 모호하기 때문에 비추천
4.1.2. PasswordEncoder 계약의 구현
커스텀한 로직을 위해서라면 PasswordEncoder 인터페이스를 구현한다.
4.1.3. PasswordEncoder의 제공된 구현 선택
직접 작성할 필요없이 구현된 걸 사용해도 된다.
NoOpPasswordEncoder
일반 텍스트로 유지하기 때문에 실제에서는 쓰지 않는다.
StandardPasswordEncoder
SHA-256. 구식이기 때문에 사용하지 않는다.
BCryptPasswordEncoder
bcrypt 강력 해시 함수로 암호를 인코딩한다.
4.1.4. DelegationPasswordEncoder를 이용한 여러 인코딩 전략
PasswordEncoder의 한 구현
자체 알고리즘 구현 대신 다른 구현 인스턴스에 작업을 위임한다.
ex. 접두사
{bcrypt}
가 있으면 BCryptPasswordEncoder에 위임한다.
현재 사용하는 알고리즘에서 취약성이 발견되어 기존값을 바꿔야 할 경우 사용할 수 있다.
인코딩, 암호화, 해싱
인코딩
주어진 입력에 대한 모든 변환
암호화
(x, k) -> y
출력을 얻기 위해 입력 값과 키를 모두 지정하는 특정한 유형의 인코딩
암호화에 쓰는 키와 복호화에 쓰는 키가 같으면 대칭 키
암호화와 복호화에 쓰는 키가 다르면 비대칭 키
(x, k1) -> y, (y, k2) -> x
k1이 공개 키, k2개 개인키
따라서 개인키를 가지고 있으면 데이터를 복호화할 수 있다.
해싱
함수가 한 방향으로만 작동하는 특정한 유형의 인코딩
따라서 y에서 x를 얻을 수 없다.
솔트
임의의 값을 추가해 함수를 더 강하게 만든다.
인터페이스 정리
UserDetails
스프링 시큐리티가 관리하는 사용자
GrantedAuthority
사용자에게 허용되는 작업
읽기, 쓰기 등
UserDetailsService
사용자 이름을 사용자 세부 정보를 검색한다.
UserDetailsManager
UserDetailsService의 더 구체적인 계약. 사용자 이름으로 검색 외에도 사용자 컬렉션이나 특정 사용자를 변경할 수도 있다.
PasswordEncoder
암호를 암호화 또는 해시하는 방법과 비교하는 방법을 지정한다.
4.2. 스프링 시큐리티 암호화 모듈에 관한 추가 정보
암호화 및 복호화 키 생성 기능은 자바에서 지원하지 않아 시큐리티에서 솔루션을 제공한다.
4.2.1. 키 생성기 이용
해싱 및 암호화 알고리즘을 위한 키를 생성하는 객체
BytesKeyGenerator
String KeyGenerator
4.2.2. 암호화와 복호화 작업에 암호기 이용
데이터를 암호화 및 복호화하는 객체
BytesEncryptor
TextEncryptor
Last updated
Was this helpful?