인증(Authentication)

전수현·2021년 6월 29일
0

보안

목록 보기
1/1

인증(Authentication)

유저의 identification(ID&PW)을 확인하는 절차.

로그인 시 인증 절차

  1. 유저 ID & PW 생성
  2. 유저 PW 암호화 후 DB에 저장
  3. 유저 로그인 -> ID & PW 입력
  4. 입력한 PW를 암호화 한 후 DB에 저장된 PW와 비교절차
  5. 비교 일치하면 로그인 성공
  6. 로그인 성공 후 클라이언트에게 access token 전송
  7. 유저는 로그인 후 access token을 첨부하여 request를 서버에 전송함으로서 매번 로그인 하지 않아도 됨

유저 PW 암호화

  1. 유저 PW는 절대 그대로 DB에 저장하지 않는다.

    • DB가 해킹 당했을 시 PW 노출 위험
    • 해당 서버의 관리자나 관계자에게 PW 노출 위험
  2. PW 암호에는 단방향 해쉬 함수(one-way hash function)가 일반적으로 쓰임.

    • 단방향 해쉬 함수는 PW의 원본 메세지를 변환하여 암호화된 메세지인 다이제스트(digest)를 생성한다.
    • 이는 단방향성(one-way)의 성질을 갖고 있기 때문에 암호화 된 PW는 다시 복호화 할 수 없게 된다.
    • 때문에 보안성이 올라간다.

Salting & Key Stretching

단방향 해쉬는 원본의 비밀번호 메세지보다는 보안성이 올라갔다고 볼 수 있지만 같은 INPUT에는 항상 같은 OUTPUT인 암호화된 값이 나오기 때문에 Rainbow Table에 의한 해킹 위험이 높다고 할 수 있다.
해서 좀 더 보완하고자 salting & key stretching이 탄생하였다.

Salting

실제 PW 이외에 추가적으로 랜덤 데이터를 더해서 해쉬값을 계산하는 방법

Key Stretching

단방향 해쉬값을 계산한 후 해쉬값을 계속해서 해싱하여, 길이를 늘려주는 방법

bcrypt

salting & key stretching 을 구현한 해쉬 함수 중 가장 널리 사용 되는 라이브러리
bcrypt는 hash 결과값에 salt값과 hashed값 및 반복횟수를 같이 보관하기 때문에
비밀번호 해싱을 적용하는데 있어 DB설계를 복잡하게 할 필요가 없다.

bcrypt를 통해 해싱된 결과의 구조

$2b$12$.XIJKgAepSrI5ghrJUaJa.ogLHJHLyY8ikIC.7gDoUMkaMfzNhGo6'
---/---/--------------------/-------------------------------/
 1   2           3                         4

1 - Algorithm
2 - Algorithm options(eg cost)
3 - Salt
4 - Hashed password

끝!

profile
안녕하세요 :)

0개의 댓글