[Bcrypt & PyJWT] 인증 &인가

dhkim·2020년 7월 18일

Bcrypt & PyJWT

목록 보기
1/2

인증 & 인가

  • 인증 : 사용자의 신원을 확인하는 절차이며, 사용자의 ID와 Password를 받아 등록된 사용자가 맞는지 검증하는 과정이다
  • 인가 : 인증이 로그인 과정이라면 인가는 로그인 후 사용자에게 권한을 부여하는 과정이다

    아이디, 이메일 주소, 비밀번호 등이 인증에 필요하고 이중 비밀번호가 가장 중요하다
    그런 이유로 비밀번호를 잘 관리 하는 것이 중요하다

단방향 해쉬

  • 임의의 길이의 데이터를 고정된 길이의 데이터로 맵핑 하는 함수

  • 단방향 암호화(one-wway hash function)만 가능하며 개념적으로 복호화를 할 수 없다.

  • SQL lnjection과 같은 공격으로 인한 침해사고 발생시, DB에 저장된 사용자의 정보가 평문 그대로 노출될 수 있다. 따라서 정보가 노출되지 않기 위해 암호화를 무조건 해야한다

  • 양방향 암호화는 어떤 알고리즘을 사용했는지 알면 다시 복호화하여 ID/Password를 알수있다

  • 원본과 알고리즘이 같으면 동일한 값이나와 유추가 가능하다. 이러한 허점을 이용하여 가능한 해쉬값의 경우의 수를 테이블로 만들기도한다(rainbowtable)

  • 이러한 헛점을 보완하고자 Salting 과 Key Stretching 방법을 사용한다

  • 종류 로는 MD5, SHA256, Bcrypt 등 이있다

Salring & Key Stretching

Salring
  • 단순 해쉬값이 해킹에 쉽게 노출되기 떄문에 생겨났다
  • 입력한 비밀번호, 임의로 생성한 문자열을 합쳐서 해싱 한후 저장하는 방식이다
Key Stretching
  • 해커가 원본값을 유추하기 어렵게 만들기 위해 Salting 및 해싱을 어려번 반복 하는것
Bcrypt
  • Salring & Key Stretching 을 적용시켜주는 라이브러리이다

인가

  • 사용자가 서버에 로그인 하면 해당사용자가 맞는 확인하는 과정이다

HTTP의 저장하지않는 성질 때문에 서버는 사용자가 요청을 보냈을떄 로그인한 상태를 알수 없다
-> request.headers 에 사용자 정보 메타데이터를 보내서 확인한다

서버와 클라이언트간 복인확인을 위해 주고받는 메타정보를 JWT(Json Web Token)이라 한다

  • 토큰의 타입과 해시 알고리즘 정보가 들어간다
  • 헤더의 내용은 BASE64방식으로 인코딩되어 JWP의 맨앞에 기록된다

Payload

  • 토큰의 완료시간을 나타내는 공개클레임/ 비공개 클레임으로 작성되어 있다
  • BASE64 인코딩하여 두번쨰 요소에 위치한다

Signature

  • JWP가 원본 그대로라는 것을 확인할 때 사용 한다
  • 인코드된 헤더와 페이로드, 별도로 생성된 JWP secret을 헤더에 지정된 알고리즘으로 암호화하여 전송되며 복호화가 가능하다
  • header와 payload는 인코딩한 것이므로(암호화X) 누구나 원본을 볼수있으니 개인정보를 담으면 안된다

0개의 댓글