인증 & 인가

박광수·2022년 3월 22일
0

인증

  • 우리 서비스를 누가 쓰며 어떻게 사용하는지 추적하기 위해 필요
  • ID, Email, Password 필요

비밀번호는 암호화 하여 보관

  • 개인정보법에서 요구하는 사항
  • DATABASE에 저장 시 개인 정보를 해싱하여 복원할 수 없도록 함.
  • 통신 시 개인 정보를 주고받을 떄 SSL을 적용하여 암호화 (HTTPS)

암호화는 어떻게 하는가?

단방향 해쉬

  • SHA-256 과 같은 특정 알고리즘으로 암호화하는 과정.

  • 단방향 해쉬는 동일한 input에 대하 동일한 output이 나오기 때문에 보안에 취약하다는 단점이 있음.

  • Rainbow Table : 대부분의 경우의 수에 대해 해싱 결과 값을 모두 정리해 놓은 것.

    SALTING & KEY STRETCHING

  • 위의 단순 해쉬의 약점을 보완하기 위해 나온 아이디어

  • 입력한 비밀번호와 임의로 생성한 문자열(Salt)를 합쳐서 해싱함

  • Salt값도 반드시 함께 저장해야한다.

  • Salting하고 해싱하는 작업을 반복하여 해커가 무작위 대입을 통해 비밀번호를 유추하는 데 걸리는 시간을 늘려주는 것을 KeyStretching 이라함

bcrypt

  • Salting & Keystretching 의 대표적인 라이브러리
  • 해싱 결과값과 Salt값 및 반복횟수를 같이 보관해주기 때문에 DB설계를 복잡하게 하지 않아도 됨
  • bcrypt를 통해 해싱된 값(Digest)의 구조는 다음과 같다.

인가

  • 해당 유저가 request에 해당하는 권한이 있는지 확인하는 절차
  • Http의 Stateless한 성질에 의해 매 요청마다 인가를 하는 것을 막기 위해 Token 이용
  • JWT : JSON WEB TOKEN , headers에 메타데이터로 보냄
  • JSON Web Token 은 aaaaaa.bbbbbb.cccccc 의 구조를 가짐
  • aaaaaa: 헤더, bbbbbb: 내용, cccccc: 서명에 해당
  • 헤더에는 토큰타입과 해시 알고리즘의 정보가 인코딩되어 들어감
  • 내용에는 만료시간과 더불어 공개적이거나 클라이언트와 서버간 합의된 정보가 들어감 (암호화X)
  • 서명은 JWT가 원본 그대로라는 것을 확인하기 위한 용도.(복호화 가능한 암호화, KEY : 서버 고유의 키)
profile
박광수입니다.

0개의 댓글

관련 채용 정보