서론
계정의 정보에는 아이디와 비밀번호가 기본적으로 구성되어 있다.
사용자가 계정을 DB에 저장 후 만약 DB가 털리는 사고가 발생한다면 비밀번호가 유출되는 사고가 발생할 수 있다.
그렇기 때문에 비밀번호를 저장할 때 암호화하여 저장하는 것이 좋다.
본론
암호화를 하는 기법에는 크게 2가지가 있다.
암호화를 한 뒤 복호화가 가능한 양방향 암호화 기법, 복호화가 불가능한 단방향 암호화 기법이 있다.
계정의 정보를 암호화할 때 다시 복호화할 필요가 없으므로 단방향 암호화 기법을 적용한 해시(Hash) 알고리즘을 사용한다.
해시를 사용하면 고유한 길이의 무작위 문자열로 변환시킬 수 있으므로, 해시의 변환된 비밀번호를 얻어도 기존의 원본 비밀번호를 알아낼 수 없으므로 보안을 지킬 수 있다.
해시 알고리즘에는 여러 종류가 있는데, 대표적으로 MD5, SHA가 있다.
하지만 해시 알고리즘은 레인보우 테이블 공격에 취약하다. 해시 알고리즘은 같은 데이터를 같은 해시 알고리즘을 통해 암호화할 경우 항상 같은 결과가 나온다. 따라서 암호화가 된 비밀번호라도, 원본 비밀번호를 알아낼 수 있다.
따라서 솔트 기법을 적용해야 암호화된 비밀번호가 유출되더라도 안전할 수 있다.
솔트란
해시함수를 돌리기 전에 원문에 임의의 문자열을 덧붙이는 것을 말한다. 즉, 단방향 함수의 추가 입력으로 사용되는 랜덤 데이터이다.
BcryptPasswordEncoder
BcryptPasswordEncoder는 스프링 시큐리티 (Spring Security) 모듈에서 제공하는 강력한 암호화 도구이다.
Bcrypt 알고리즘을 사용하여 비밀번호를 안전하게 저장하고 검증하는 데 사용되는 스프링 시큐리티의 클래스이다.
BCrypt는 단방향 해시 함수로, 비밀번호를 해시화하여 저장하고, 해시된 값과 사용자가 제공한 비밀번호를 비교하여 일치 여부를 판단한다. BCryptPasswordEncoder는 기본적으로 랜덤 솔트(Salt)와 키 스트레칭이 적용되어 있어 보안성을 높이고, 브루트 포스(Brute-Force) 공격에 대한 저항력을 갖는다.
'SpringBoot' 카테고리의 다른 글
Spring WebSocket (0) | 2024.07.16 |
---|---|
JPA Entity에 @Setter를 지양하는 이유 (0) | 2024.06.29 |
@Controller와 @RestController 차이점 (0) | 2024.06.25 |
RedirectAttributes (0) | 2024.05.02 |
웹 소켓 (WebSocket) (0) | 2024.04.27 |