TIL 45 | 인증(Authentication)

dabin *.◟(ˊᗨˋ)◞.*·2021년 9월 24일
0

etc

목록 보기
3/14
post-thumbnail
post-custom-banner

인증은 user의 identification을 확인하는 절차다. 인증에 앞서 필요한 과정을 먼저 살펴보자.

[ 로그인 절차 ]

  • 아이디 & 비밀번호 생성
  • 비밀번호 암호화해서 DB에 저장
  • 로그인시 아이디 & 비밀번호 입력
  • 유저가 입력한 비밀번호 암호화 후 DB에 저장된 비밀번호와 비교
  • 일치 ? 로그인 성공(access token 전송 & 재로그인 필요 X)

로그인 기능을 구현하기 위해 해야 할 비밀번호 암호와와 access token 발행을 어떻게 하는지 자세히 알아보자.

비밀번호 암호화

  • 비밀번호를 암호화하면 DB가 해킹을 당해도 비밀번호가 그대로 노출되지 않고, 내부 인력도 비밀번호를 알 수가 없다는 보안상 장점이 있다.
  • 비밀번호 암호화는 일반적으로 단방향 해쉬 함수가 쓰인다. 단방향 해쉬 함수는 다이제스트(암호화된 메세지)를 생성하는데, 원본 메세지를 알면 암호화된 메세지를 구하기 쉽지만 암호화된 메세지로 원본 메세지를 구할 수 없어 해킹을 어렵게 만든다.

취약점

  • Rainbow table attack : 미리 해쉬값들을 계산해 놓은 테이블을 사용하여 공격 가능
  • 해쉬 함수의 본 목적은 짧은 시간에 데이터를 검색하기 위한 것 : 빠른 속도로 해킹할 다이제스트를 비교해 해킹할 수 있다.

이러한 취약점을 보안하기 위해 일반적으로 Salting과 Key Stretching 두 가지 방법이 사용된다.

  • Salting : 실제 비밀번호 이외에 추가적으로 랜덤 데이터를 더해 해시값을 계산하는 방법으로, 비밀번호를 알기 어렵게 하기 위해 만들어놓는 노이즈라고 생각하면 된다. 입력한 비밀번호와 임의로 생성한 문자열(Salt)를 합쳐서 해싱해서 이 해시값을 저장한다. 이 때 비교를 위해 해시값과 Salt값을 같이 저장해야 한다.
  • Key Stretching : 단방향 해쉬값을 계산하고 나서 그 해쉬값을 해쉬하는 것을 반복하는 방법이다.(salt와 hashing 반복) 해커가 패스워드 무작위 대입을 통해 해시값을 계산하는데 필요한 시간을 대폭 늘리기 위해 Salting 및 해싱을 여러번 반복해서 원본 값을 유추하기 어렵게 만든다.

Salting과 Key Stretching을 구현한 함수 중 가장 널리 사용되는 것은 bcrypt다.

[ bcrypt 사용하기 ]
https://velog.io/@dabin0219/%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8-%EC%95%94%ED%98%B8%ED%99%94

다시 로그인 절차로 돌아가보자. 로그인에 성공하면 access token을 유저에게 발행되고, 서버에서는 이를 복호화해서 해당 유저 정보를 얻는다. 이 절차를 통해 유저가 매번 로그인 하지 않아도 되게 만든다. 인가와 마찬가지로 JWT(JSON Web Tokens)를 사용할 수 있다.

[ JWT와 인가 ]
https://velog.io/@dabin0219/TIL-33-%EC%9D%B8%EA%B0%80

profile
모르는것투성이
post-custom-banner

0개의 댓글