TIL 14 | 인증 & 인가

dongwheekeem·2021년 10월 3일
0

TIL

목록 보기
14/23

인증은 무엇이고 왜 해야 하는가?

인증 (Authentication)

  • 인증은 회원가입과 로그인을 의미한다.
  • 인증은 우리 서비스를 누가 쓰는지, 어떻게 사용하는지, 추적이 가능하도록 하기 위해 필요하다.
  • 인증에 피요한 것은 아이디, 비밀번호 등이 필요하다.
  • 비밀번호, 바이오정보, 주민번호 등과 같은 주요 정보는 법규상의 강제로 인해 따로 관리해야 한다.

비밀번호를 관리하는 방법

  1. Hashing (사람이 알 수 없는 방법으로 만드는 것)
    : hashing을 하기 때문에 사이트에서 비밀번호를 잊게 되면 기존 비밀번호를 못 찾고 새로 설정하도록 한다.
  2. HTTPS 통신과 SSL을 통해 암호화하는 것

단방향 해쉬

  • 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용된다.
  • 해쉬값이 식별할 수 없는 값으로 나와서 당장은 완벽해보이지만 같은 알고리즘으로 다시 해싱하면 같은 결과가 도출되어 암호가 노출될 수 있는 위험이 있다. (이런 허점을 이용해서 가능한 경우의 수를 모두 해쉬값으로 만들어 판매하는 서비스도 존재)
  • 이러한 허점을 보완하고자 saltingkey stretching이 생겼다.

Salting & Key Stretching

  • 비밀번호에 솔트값(임의의 스트링)을 추가해서 해쉬값으로 변경한다.
  • 비밀번호 생성 과정 : 비밀번호에 임의의 솔트값을 합쳐서 hashing 과정을 여러번 거쳐서 암호화하여 해쉬 값을 만들고 그 앞에 솔트 값을 붙인다.
  • 비밀번호 확인 과정 : 사용자의 아이디와 비밀번호를 합쳐 db에서 솔트 값을 갖고 와서 모두 합쳐 hashing을 하여 해쉬값이 같은지 확인한다.


bcrypt

  • 위에 언급한 개념들을 실제로 적용하기 편하게 해주는 대표적인 라이브러리다.
  • Algorithm : 어떤 알고리즘으로 돌렸는지
  • Algorithm options : 몇 번 hashing 했는지
  • Salt : 솔트 값
  • Hashed 패스워드 : 암호화된 비밀번호

JWT (JSON Web Token)

  • 로그인을 유지하기 위해서 토큰을 발급해줘서 받은 토큰을 쿠키, 세션, 로컬스토리지 등에 저장해놔서 로그인 상태를 유지한다. (백엔드가 토큰을 발급해주고, 프론트가 발급된 토큰을 관리한다.)
  • 토큰은 메타 데이터로 헤더에 들어가게 된다.

  • 헤더 : 제이슨 웹 토큰
  • 내용 : 몇번째 유저인지에 대한 정보 (유저 ID & expired 시간이 포함되어 있음 : 그렇기 때문에 시간이 초과되면 새로운 JWT가 발급된다)
  • 서명 : 시크릿키
profile
실패란 못하는 것이 아니라 하지 않았기 때문에 생긴 결과물이다

0개의 댓글