[210726 TIL] 인증 & 인가

Choi Rim·2021년 7월 26일
0

Way to developer

목록 보기
19/21
post-thumbnail
post-custom-banner

인증 & 인가(허가)

인증 (Authentication)

  • 인증은 무엇일까
    • 내가 나라는 것을 증명하는 것
    • 웹 사이트 상에서 사용자가 자신이라는 것을 증명하는 것
    • 회원을 식별하고 사용을 추적할 수 있다.
  • 인증에 필요한 것
    • 아이디, 비밀번호, 이메일 주소 등
  • 비밀번호의 관리
    • 법규상의 강제
    • 데이터베이스에 저장 시 개인 정보를 해싱하여 복원할 수 없도록 함
      • 난독화
    • 통신 시 개인 정보를 주고 받을 때 SSL을 적용하여 암호화(HTTPS)
      • SSL => 인증서
      • HTTPS를 통해 보안
  • 암호화는 어떻게 하나?

단방향 해쉬

  • 한쪽으로만 암호화를 진행해서 복호화 불가능(원본 암호 보기 불가능)
  • 자료구조 중 하나
  • 빠른 자료의 검색, 데이터 위변조 체크를 위해 쓰임
  • 하나의 값이 들어가면 하나의 값이 나옴
  • 값이 나오면 역으로 들어갈 수 없음
  • 이 특징을 이용하여 암호화를 시킴

SALTING & KeyStretching

  • 단순해쉬값이 해킹에 쉽게 노출되어 Salting이라는 아이디어 생겨남
  • salt값은 hash를 좀 더 강인하게 만듬
  • 입력한 비밀번호와 임의로 생성한 문자열(Salt) 합쳐서 해싱해 해시값을 저장
  • 이 때 비교를 위해 해시값과 Salt값을 같이 저장해야 한다.
  • 여기에 해커가 패스워드 무작위 대입을 통해 해시값을 계산하는데 필요한 시간을 끌기 위한 방법이 있음
    • Salting 및 해싱을 여러번 반복해서 원본 값을 유추하기 어렵게 만듬
    • Key Strectching

Bcrypt

  • Salting & Key Streching 을 제공하는 대표적 라이브러리
  • hash 결과값에 소금값과 해시값 및 반복 횟수를 같이 보관하기 때문에 비밀번호 해싱을 적용하는데 있어 DB 설계를 복잡하게 할 필요 없음
  • bcrypt을 통해 해싱된 결과 값(Digest)의 구조
    • Algorithm, Algorithm options (Eg cost), Salt, Hashed password


사진 출처 - https://developer.team/delphi/28912-bcrypt-a-library-to-help-you-hash-passwords.html

인가 (Authorization)

  • 사용자가 서버에 로그인 할 시 해당 사용자가 맞는지 확인하는 과정
  • JSON Web Token => JWT
  • 백엔드에서 사용자가 로그인 했을 때 Token을 생성하고 프론트엔드에서 로그인 정보를 필요로 하는 기능일 때 Token을 저장했다가 Token 을 건낸다.

JSON Web Token (JWT)

헤더 (header)

  • 헤더에 들어가는 정보
    • 토큰의 타입
    • 해시알고리즘 정보
    • 헤더의 내용은 BASE64 방식으로 인코딩 되어 JWT의 첫 부분에 기록됨

내용 (payload)

  • 내용에는 exp와 같이 만료시간을 나타내는 공개 클레임
  • 클라이언트와 서버간 협의하에 사용하는 비공개 클레임
  • 위 두가지 요소를 조합하여 BASE64 인코딩하여 두번째 요소로 위치
  • 실제 개인 정보 x
  • ex) {"user_id" : 1, "exp" : 153945654}

서명 (signature)

  • JWT가 원본 그대로라는 것을 확인할 때 사용
  • Django의 시크릿 키
  • 계약서의 위변조를 막기위해 서로 사인하는 것과 같음
  • 누구나 원본을 볼 수 있으면 안된다.
profile
https://rimi0108.github.io/
post-custom-banner

0개의 댓글