whitesheep 백기선님 강의 정주행중.. Password history 부분을 읽고 있다.
처음 사용자들은 암호화 없이 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 >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!