⏰ 2024. 06. 07 금
✔ 스프링 이론 강의를 듣고 정리하면서 작성했습니다.
💡 목차
- 암호화의 필요성
- 양방향 ↔ 단방향 암호화
- Password Matching
⚡ 패스워드 암호화 의무
- 회원 정보 등록 시,
정보통신망법, 개인정보보호법
에 의해 비밀번호 암호화가 의무이기 때문에 비밀번호
는 사용자가 입력한 문자 그대로 DB에 등록하면 안된다.
암호화의 필요성
- 암호화하지 않은 비밀번호를 평문으로 DB에 저장했을 때 회원정보가 탈취 당하면 회원정보에 바로 접근할 수 있는 상태가 된다.
- 비밀번호가 갈취를 당하지 않더라도 비밀번호의 보안도에 따라 DB를 조회할 수 있는 관리자가 해당 비밀번호를 보면 바로 기억할 수도 있다.
- 이를 예방하기 위해서 암호화된 상태의 비밀번호 저장이 필요하다.
평문 → (암호화 알고리즘) → 암호문
양방향 ↔ 단방향 암호화
-
양방향 알고리즘
- 암호화 : 평문 → (암호화 알고리즘) → 암호문
- 복호화 : 암호문 → (암호화 알고리즘) → 평문
-
단방향 알고리즘
- 암호화 : 평문 → (암호화 알고리즘) → 암호화
- 복호화 : 불가
(암호문 → (암호화 알고리즘) → 평문)
⚡ 그럼 사용자가 로그인할 때 암호화된 패스워드를 기억해야 할까?!
- 사용자가 로그인을 위해 "아이디, 패스워드(평문)" 입력 → 서버에 로그인 요청
- 서버에서 요청으로 들어온 패스워드(평문) 을 암호화 [ 평문 → (암호화 알고리즘) → 암호문 ]
- DB 에 저장된 "아이디, 패스워드 (암호문)"와 일치 여부 확인
Password Matching
// 비밀번호 확인
if(!passwordEncoder.matches("사용자가 입력한 비밀번호(평문)", "저장된 비밀번호(암호문)")) {
throw new IllegalAccessError("비밀번호가 일치하지 않습니다.");
}
- matches(rewPassword, encodedPassword) 메서드
- rawPassword : 사용자가 입력한 비밀번호(평문)
- encodedPassword : 암호화되어 DB에 저장된 비밀번호(암호문)
boolean matches(CharSequence rewPassword, String encodedPassword)