TIL.인증&인가

seul3·2021년 11월 24일
0

1.what 인증?인가?


인증(uthentication)이란,유저 아이디와 패스워드를 확인하는 절차이다.
이 인증이라는 과정을 거치기 위해서는 생성할 수 있는 기능이 필요하다.

  • 유저 ID.PW생성
  • 유저 비번 암호화 해서 저장

인가란,유저가 요청하는 request를 실행할 수 있는 권한이 있는 유저인가 아닌가 확인하는 절차이다.

조금 쉽게 예를 들자면, 구매 사이트에서 로그인이 되면 장바구니에 담은 것들에 대한 정보는 나만 알 수 있고 다른 유저에게는 권한이 없다.
다른 예로는 네이버 화면에는 누구나 들어갈 수 있지만 내 블로그에 글을 수정하고 쓰는 공간까지 들어갈 수는 없다.



2.단방향 해쉬?


비밀번호를 있는 그대로 입력 값을 DB에 저장하면 해커들이 아주 좋아할 것이다.....해커뿐만 아니라 내부 개발자들도 아주 다 알것이다.....공용도 아니고.....(절대 ❌)
그래서 반드시 암호화 해서 저장을 해야한다. 입력값을 일정한 길이의 다이제스트(해쉬함수를 통해 생성된 암호화된 msg) 형태로 변환 시켜주고 DB에 저장한다. 해쉬 함수의 경우 단방향이다. 단방향 해쉬는 비밀번호 암호에 일반적으로 쓰인다.

이러한 단방향 해쉬 함수에도 취약점이 있다.
바로 해쉬 함수 자체가 패스워드를 저장하기 위해 만들어진 것이 아니라 짧은 시간에 데이터를 검색하기 위해서 만들어진 것이기 때문에 비밀번호가 매우 복잡하게 이뤄진 구조가 아니면 해킹 뚫리기가 쉽다.......🤷‍♀️OMG

무엇보다 유저들 대부분 비밀번호 설정이 거의 비슷할 뿐더러 쉽게 이뤄진 구조가 많아서 보안 문제에서 조금 취약하다는 단점이 있다.

그래서 이러한 보완을 위해 나온 것이... 두구두구두구 saltig과 key stretching이다.


3. salting & key stretching?


salting 은 실제 비밀번호 이외에 추가적으로 소금을 치는것이다..!그 소금은 바로 랜덤 데이터를 더해서 해시값을 계삭하는 방법이다.

key stretching은 해쉬값을 계산 한 후 또 그 값을 해쉬하고 또 하는 반복적인 것을 말한다. 한마디로 해킹이 쉽지 않게 길게 길게 시간을 늘려주는 것이다.

예를 들어 이런 작업이 없다면 해커가 3일만에 뚫을 것을 3년 혹은 10년 걸리게 해주는 것이다.( * 그래서 일정 기간이 지나면 비밀번호 바꾸세요 라는 안내 문구가 뜨는 이유가 여기에 있다.)



4. JWT?


JWT(Json Web Tokens) 유저가 로그인에 성공하면 access token이라고 하는 암호화된 정보를 첨부해서 리퀘스트를 보낸다.(이것은 프론트가 하는 작업) 그러면 서버에서 이 토큰을 복호화 해서 해당 유저 정보를 얻게 된다. 쉽게 얘기 하자면, 쿠팡에 로그인에 성공해서 장바구니를 가도 내가 담았던 물건의 정보가 그대로 나오는 것은 이 토큰으로 해당 유저가 누구인지 알 수 있기 떄문이다. 즉,이런 절차 목적은 해당 유저가 페이지 전환을 할 때 매번 로그인을 하지 않아도 되는 수고스러움을 덜게된다.

profile
꾸준히 성장하는 개발자 입니다 😊

0개의 댓글