인증과 인가

성정민·2020년 5월 18일
0

암호화

암호화를 하는 방법.

  • HTTP를 그냥 쓰면 보안이 적용 되있지 않아서 HTTPS로 SSL을 적용하여 암호화(인증서발급)
    HTTP+Secure. 보안적 통신이 요구 될때는 S를 붙이는 경우가 많다.
    SSL을 무료로 발급하는 사이트가 있어서 찾아보면 좋을것이다.
  • 해싱을 통해 암호화

암호화? : 바로 알아 볼 수 없게 만드는것

  1. 단방향 해쉬
    • 본래 해쉬는 빠른 자료 검색, 데이터 위변조 체크를 위해서 쓰이지만, 복원이 불가능한 단방향 해위함수는 암호화에 사용된다.
    • SHA-256이 현재 가장 많이 쓰이는 해싱.
    • 이를 이용해서 해슁을 하면 식별이 불가능해 보이니까 완벽해보이지만, 같은 알고리즘으로 풀어보면 항상 같은 결과가 도출합니다.
    • 이같은 허점을 보완하고자 비크립트의 salting과 Key Stretching이라는 아이디어가 생겨났다.
  2. bcrypt
    • 복호화 할 수 없는 라이브러리
    • Salting & Key Stretching의 대표적인 라이브러리다.
    • salting
      - 비밀번호와 임의로 생성한 문자열(Salt)를 함쳐서 해싱하여 이해시를 저장하는 방법.
      - 자바스크립트도 지원 된다!
      • 입력한 비밀번호+임의로 생성한 문자열(Salt)를 합쳐서 해싱
      • 해커를 막기 위해서 Salting에 쓰인 해싱을 여러번 반복해서 늘린다. 이를 키 스트래칭(Key Stretching) 이라고 한다

인가는 무엇일까요?

사용자를 식별하기 위한 표현

  • 로그인인한 사용자만 이용할 수 있는 기능을 인가라고 한다.
  • 인가의 매개체는 JSON Web Token 일명 JWT
  • 저장되지 않기 때문에 자주 쓰인다.
  • (헤더 . 내용 . 서명) 의 구조로 되어있다.
    - 헤더 : 비암호화
    - 내용 : 비암호화
    • 서명 : 암호화
    • 프론트에서 로그인 토큰이 발행되면 위와같이 헤더. 내용. 서명으로 가지고 있다.
    • 저장만 해두고 백앤드에게 앤드포인트가 있다면 헤더값에다가 토큰을 키 주고 인가를 해준다.
    • 실제로 서비스를 만들 때는 세 군데중 하나에 저장해주고 헤더에 넘겨야지 요청을 수행할 수 있다.
    • 헤더에 넘길 키는 프론트,백에서 약속한 키로 정해주자.
profile
인생을 사는 프론트앤드 개발자

0개의 댓글