[WEB]인증과 인가

chosh·2021년 8월 27일
0

인증이란?

웹사이트에서 유저가 누구인지 식별 할 수 있도록 하는 식별자를 생성하여 판단하는 것으로, 회원가입과 같은것을 통해서 인증을 할 수 있다

해싱

이때, 비밀번호 같은 경우는 데이터 베이스에 저장시에 개인정보를 암호화하여 복원 할 수 없도록 비밀번호를 관리 해야 한다
이 암호화 하는 것을 해싱이라고 한다

단방향 해시

비밀번호를 암호화 할 때에는 단방향 해시의 방식을 이용해서 암호화 하게 되는데,
input 으로 암호를 설정하면 output 으로 암호화 하고, output의 정보로는 input을 알 수 없도록 암호화 하는 방식이 단방향 해시 방식이다

  • 단방향 해시 방식을 이용하게 되면 서버 관리자도 비밀번호를 알 수 없기 때문에 사용자의 비밀번호가 보호된다
  • 이 때문에 요즘 비밀번호 찾기를 하면 비밀번호를 가르쳐주지 않고(가르쳐주지 못하고) 비밀번호 재설정을 통해서만 비밀번호를 설정 할 수 있다

하지만, 암호화 방식이 input을 입력 할 때마다 바뀌는것이 아니기 때문에, 똑같은 input 값을 입력하면 똑같은 out이 출력된다
이 특징을 이용해서 input 값을 컴퓨터로 돌려서, output을 데이터화 해서 파는 불법적인 행위를 하는 사람이 생겼고, 이를 보완하기 위해서 Salting & KeyStretching 방식이 생김

Salting & KeyStretching

Salting & KeyStretching 방식은 암호화 해야 하는 값에 salt 값을 붙여서 key를 늘리고, 암호화 하는 방법이다

유저가 비밀번호를 입력하면, salt 값(암호화 시켜주는 임의의 문자열)을 붙이고, 그 값을 단방향 해시 방식을 이용해서 암호화 하는 것이다

이 방식도 salt 값을 알고 있다면, 전처럼 암호화되는 값을 데이터화 해서 팔 수는 있다
하지만, salt 값을 일정 주기를 가지고 바뀌기 때문에 전보다는 훨씬 보안이 강해졌다

위의 그림 처럼 유저가 입력한 암호와, 랜덤으로 주어지는 salt 값이 hashing process를 거쳐 해싱된 값을 반환 해주는데, 해싱된 값에는 랜덤으로 주어졌던 salt 값이 붙어 있다
이유는, 나중에 암호가 맞는지 판독할 때 명시된 salt 값을 사용하여 판독하기 때문이다


위의 그림처럼 암호화 하는 과정에서 사용한 salt 값, 유저가 입력한 값을 사용해서 암호화 한 값을 다시 만들어 내고, 저장되어 있던 암호화된 값을 비교해서 통과 시켜줄 수 있다


인가란?

사용자가 서버에 로그인 하면 해당 사용자가 맞는지 확인하는 과정이다
위에서 값을 비교해서 통과시켜 주는 과정이 인가 의 과정이라고 볼수 있다

인가를 하는 과정에서 매번 정보가 맞는지 보기 보다는 로그인이 이미 완료된 증표를 제공해서 인가를 할 수 있으며, 로그인을 한번 하면 제공되는 이 증표가 token 이다

token의 구조로는,

  • header : 토큰의 타입, 메타데이터의 정보가 들어있고, 암호화 되어있지 않음
  • payload : 토큰의 만료 일자 정보를 나타내고, 유저의 id의 정보를 담고 있으며, 암호화 되어 있지 않기 때문에 유저의 id를 실제 id를 담아서 만들지 않고 식별할 수 있는 id를 담고 있음
  • signature : header에 담고있는 암호화 알고리즘을 사용해서 위의 데이터를 암호화 해줌

이렇게 3가지 이며, 로그인 한번을 하면 발급받은 토큰을 사용해서 인가를 해줄수 있다.

profile
제가 참고하기 위해 만든 블로그라 글을 편하게 작성했습니다. 틀린거 있다면 댓글 부탁드립니다.

0개의 댓글