인증과 인가

김태현·2020년 11월 9일
0

ETC

목록 보기
11/15
post-thumbnail

인증과 인가의 차이란?

인증이란 사용자를 증명하는 것 내가 나다!

바로 아이디와 패스워드를 확인하는 절차

인가란 사용자가 서버에 로그인 하면 그 사람이 맞는지 확인하는 과정!

요청하는 사람이 권한이 맞는 사람인지 확인하는 절차

http와 https의 차이??

면접에서 자주 물어본다고 한다
내가 알기론 https는 http가 보안이 좀 더 강화된 버젼이라고 알고있다 s가 security의 s라고..

http에 대해서는 이전에 다뤘었다 http

구글링을 해보니 https는 보안의 3요소인 기밀성, 무결성, 가용성 3가지 때문에 사용한다고 한다.

그럼 이것들은 뭘까??

1.기밀성

기밀성이란 인증되지 않은 다른 사람이 정보를 보지못하도록 보호하는 것을 의미한다.

2.무결성

무결성이란 정보를 전송할 때 정보가 잘 도착했고, 전송 도중에 바뀌지 않았음을 보장하는 것을 의미한다.

3.가용성

가용성이란 외부로부터의 공격에 지장없이 서비스가 원활하게 제공되는 것을 의미한다.

단방향 해쉬

해쉬란 자료구조 중의 하나로 안에 해쉬 함수란게 내장되어 있어 이 함수를 통과하면 다른 값이 나온다.
딕셔너리 처럼 빠르며, 인풋을 알면 바로 아웃풋이 나온다.
역으로 이동은 못하기 때문에 이름이 단방향 해쉬이다. (결과값으로 다시 역추적을 할 수 없다는 의미)

요즘은 SHA-256 이라는 알고리즘을 주로 쓰는데 이 알고리즘은 해싱하면 항상 같은 결과가 나오는 특징이 있다.
따라서 경우의 수를 쭉 나열한 레인보우테이블을 하나씩 계속해서 대입해서 해킹하는 브루트포스 공격에 취약하다

하지만 이를 방지하기 위한 대비책도 있으니 바로 Salting과 Keystrecthing 이다.

먼저 Salting 이란 음식에 소금 간을 치듯이 원래의 입력값에다가 추가로 랜덤한 값을 더해주는 것을 말한다.
Keystretching 이란 해시를 여러번 반복하여 공격에 대비하는 것을 말한다.
거의 다 풀겠다 싶으면은 섞어서 또 공격을 흐지부지 되게 만들고 또 풀만하면은 헤더를 늘려서 흐지부지 되게 만들고 이런식!

bcrypt 이것은 위에 말한 기능들을 쉽게 구현해주는 대표적인 라이브러리이다.

stateless: 서버는 데이터를 저장하지 않는다! 마치 기억상실환자랑 대화 하는느낌.
그 사람인지 아닌지 인가를 받으려면 토큰(일종의 입장권, 티켓)으로 알 수가 있다.

로그인을 하면 서버에서 나한테 토큰을 준다.
이 토큰은 프론트가 받아서 브라우져 내 쿠키나 세션에 저장하다가 요청을 받으면 같이 백엔드로 넘겨준다.

토큰
헤더, 내용, 서명 3가지 요소로 이루어진다.

헤더는 토큰 타입, 해시알고리즘 등의 정보가 담겨있고 해쉬처럼 단방향이 아니라서 알고리즘을 알려준다!

내용에는 사용자에 대한 정보, 만료시간(한번 로그인되면 평생 이용하면 안되니까) 등이 담겨있다

서명은 우리가 계약서의 위조변조를 막기위해서 서로 사인하는 현실에서의 서명과 비슷하다. 자기 서버에서 토큰을 발행했다고 하는 일종의 증명이다!

profile
프론트엔드 개발자

0개의 댓글