
whitesheep 백기선님 강의 정주행중.. Password history 부분을 읽고 있다.
Spring Security Reference
The authenticator is also responsible for retrieving any required user attributes. This is because the permissions on the attributes may depend on the type of authentication being used. For example, if binding as the user, it may be necessary to read them
docs.spring.io
처음 사용자들은 암호화 없이 DB에 데이터를 그냥 저장하였다.. 그러더니 SQL 공격을 받게 된다.
그 이후로 개발자들은 SHA-256 해시 암호화를 한 번 거쳐서 암호화를 한다. 그리고 인증과정을 거칠 때는 사용자가 저장한 암호가 암호화된 것과 그 이후 인증을 거칠때 입력한 암호를 암호화한 것을 비교하여 인증과정을 수행한다.
그런데 이것도 Rainbow Table이란 방식으로 암호를 추측하는 것이 아니라 미리 1q2w3e4r! 같은.. 주로 통용되는 암호를 SHA-256으로 저장한 테이블이다.
그 이후 "salted password"를 사용한다. 해시 함수에 salt를 넣어서 암호화한다. 그러면 salt마다 SHA-256으로 해시된 암호화 문자열이 다 다르기 때문에 RainbowTable이 무력화될 수 있다.
현대에 와서는 컴퓨터가 초당 수십억개의 해시 연산을 수행할 수 있기 때문에 암호화가 더 이상 안전하지가 않다.
위와 같은 이유로 개발자는 adaptive 단방향 암호화 기능을 사용하여 password를 저장하는게 좋다. 로그인 시 사용자의 비밀번호를 확인하는데 약 n초가 걸리게끔 도와준다. 하드웨어 성능이 늘어나면 그에 맞춰서 연산량을 늘려 n초가 되게끔 한다. 이 n초를 조정하려면 "work factor"를 조정하면 된다고 한다. adaptive 단방향 함수는 bcrypt, PBKDF2, scrypt, Argon2 가 있다.
=> 현재 기본전략은 NoOp에서 bcrpyt로 바꾸었다 !
유저테스트를 진행하는데..
위와 같은 코드는 HTTP 상태코드 403 : Forbiden이 나온다.
[팁] 아래와 같이 Annotation을 선언해서 사용할 수 있다.
따로 create 메서드로 추출한 것은 중요하지 않다. 위 화면에서 Transactional을 타지 않으면 중복 사용자가 되어 예외가 발생한다.
위와 같이 formLogin() 을 통해서 성공/실패했을 경우 Url 포워딩, loginPage 보여주기 등의 기능이 사용 가능하다.
'Back-end > Spring Boot, JPA' 카테고리의 다른 글
p6spy로 로그 포맷팅 (0) | 2023.06.16 |
---|---|
Spring Boot 3.x에서 H2 DB 설정 (0) | 2023.05.12 |
newlecture: spring MVC 1 (0) | 2021.04.26 |
newlecture: spring AOP (ft.빵또아) (0) | 2021.04.24 |
newlecture: spring DI (IoC) (0) | 2021.04.23 |
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!