Django 암호화 이해하기(인증, 인가)

이찬영·2021년 12월 24일
1

1. 인증(Authentication)

이 유저가 어떤 유저인지 식별하는 작업

1-1 로그인 절차

  1. 유저 아이디와 비번 생성
  2. 유저 비번 암호화 해서 DB에 저장.
  3. 유저 로그인 -> 아이디와 비밀번호 입력
  4. 유저가 입력한 비밀번호 암호화 한후 암호화되서 DB에 저정된 유저 비밀번호와 비교.
  5. 일치하면 로그인 성공
  6. 로그인 성공하면 access token을 클라이언트에게 전송.
  7. 유저는 로그인 성공후 다음부터는 access token을 첨부해서 request를 서버에 전송함으로서 매번 로그인 해도 되지 않도록 한다.

1-2 유저 비밀번호 암호화

  1. 유저의 비밀번호는 절대 비밀번호 그대로 DB에 저장 하지 않는다.
  2. 유저의 비밀번호는 꼭 암호화 해서 저장 해야 한다.
  3. 비밀번호 암호에는 단방향 해쉬 함수(one-way hash function)가 일반적으로 사용된다.

1-3 Bcrypt

  1. 단방향 해쉬 함수도 몇가지 취약점이 있다.
    -Rainbow table attack - 미리 해쉬값들을 계산해 높은 테이블이 존재하여서 해쉬값을 해킹하기 쉽다.

  2. 단방향 해쉬 함수의 취약점들을 보안하기 위해 일반적으로 2가지 보완점들이 사용된다.
    -Salting : 실제 비밀번호 이외에 추가적으로 랜덤 데이터를 더해서 해시값을 계산하는 방법
    -Key Stretching:
    +단방향 해쉬값을 계산 한 후 그 해쉬값을 또 해쉬하고, 또 이를 반복하는 것을 말한다.
    +<중요> Salting과 Key Stretching을 구현한 해쉬 함수중 가장 널리 사용되는 것이 bcrypt이다. bcrypt는 처음부터 비밀번호를 단방향 암호화 하기 위해 만들 이전 해쉬함수 이다.

1-4 JWT(JSON Web Tokens)

  1. 유저가 로그인에 성공한 후에는 acces token이라고 하는 암호화된 유저 정보를 첨부해서 request를 보내게 된다.
  2. 이러한 절차의 목적은 해당 유저가 매번 로그인 하지 않도록 하는 것이다.
profile
개발을 탐구하자

0개의 댓글