JWT -> 이전 웹 보안의 이해

이해찬·2023년 8월 29일
0

TIL

목록 보기
11/20

JWT 들어가기 전
-세션
-TCP
-CIA
-RSA
-RFC문서


1. 세션

세션은 왜 필요한가??
이전의 HTTP프로토콜 방식은 응답을 하면 연결을 끊어서, 유저의 정보가 동기화되는데 문제가 있다.
그래서 인증,인가나 사용자 친화 방식을 위해서 세션과 쿠키를 사용한다.

세션의 구조
1. 웹 브라우저에서 http~.com 최초 서버에 요청을 하면 서버는 해당 유저를 기억하기 위해 세션을 발행한다.
2. 서버의 세션은 유저에 맞는 id(ex:123)를 만들고 그 밑에 저장 공간을 만든다.(추후에 정보 저장을 위해)
3. 클라이언트로 응답할 때, 세션 id를 같이 보낸다.
4. 클라이언트는 그 id쿠키에 저장한다.
5. 이후, 로그인 같은 요청을 할 때
6~7. 서버에서 db에 로그인 정보를 확인하고, 그 데이터를 세션 id와 같이 저장한다.
8~9. 이후, 유저 정보 같은 것을 요청 할 때, 해당 세션과 일치하는지 확인한 뒤에
10. db에 있는 데이터를 응답한다.

HTTP 연결 방식 참고

세션의 문제점은 위의 구조대로 요청과 응답을 반복하는데, 동시 접속자가 몰리게 되면 하나의 서버가 아닌 여러개의 서버를 통해 로드밸런싱을 하게 된다.
그렇게 되면 가상의 클라이언트 a 가 요청한 데이터의 세션이 서버1에 저장이 되어있다고 가정하면, 나중에 요청을 보낼 때(클라이언트의 요청은 특정한 서버로 가는게 아니기 때문, 따로 설정이 필요), 서버2로 요청을 또 다시 보내고 다른 세션 id를 생성하게 되는 수고로움이 발생한다.

그래서 세션 값을 한 곳에 따로 모아두는 메모리 공유 서버를 만들어서 사용한다.
->db에 넣게 되면 i/o가 일어나서 속도가 매우 느려지기 때문(드라이버는 풀 스캔)


2. 웹은 TCP 통신

네트워크 통신을 위한 국제 표준 모델 => osi 7계층
이 중 웹은 TCP 통신을 사용 한다.

TCP 통신이란 내가 보낸 데이터에 응답이 올때까지 확인을 하는 신뢰성 있는 통신
반면 UDP는 다른쪽에서 응답이 오지 않아도 일방적으로 계속 보내는 통신
-> ex) 전화, 영상 등 -> 사람이 해석할 수 있는 것들
-> tcp는 융통성 없이 원리원칙적인


3. CIA ,보안

기밀성 (Confidentiality): 정보가 권한이 없는 사용자나 시스템에게 노출되지 않도록 하는 것입니다. 기밀성은 데이터 암호화, 접근 제어 등의 방법을 사용하여 유지될 수 있습니다.
무결성 (Integrity): 정보가 원래의 상태 그대로 보존되며, 권한이 없는 사용자나 시스템에 의해 변경되지 않도록 하는 것입니다. 데이터 해시나 디지털 서명과 같은 방법으로 데이터의 무결성을 확인할 수 있습니다.
가용성 (Availability): 정보나 시스템 자원이 필요한 시점에 접근할 수 있도록 하는 것입니다. 장애 대비, 백업 및 복구 전략, 부하 분산과 같은 방법으로 시스템의 가용성을 확보할 수 있습니다.

청군홍군은 전쟁중이다.
청군이 홍군을 이기기 위해서는 연합을 해서 규모를 늘려야 한다.
-> 청군이 협조를 요청하는 문서를 보낸다. =>그런데 여기서 홍군이 낚아챌 위험이 있다.

홍군이 청군의 문서에 대해서 알게 되면 -> 기밀성이 깨지는 것이고 (정보가 노출되었기 때문)
홍군이 문서에 접근 하면 -> 가용성이 깨지는 것이고 (원래의 청군이 접근을 못하기 때문)
접근 한 뒤 문서를 수정 하면 -> 무결성이 깨지는 것이다. (원래 상태를 유지 못하기 때문)

그래서 위의 CIA를 방지하기 위해서는 어떻게 해야 할까?

문서에 접근할 수 없게끔 최고의 전사를 같이 보내고 (가용성)
혹시 최고의 전사가 제압되어도 문서를 수정할 수 없도록 암호화 한다.(무결성)
또한 금고에 문서를 담아 함부러 열 수 없게 한다. 근데, 이 금고를 열려면 키가 필요한데, 이 키도 같이 보내야 되는 문제가 생긴다.

또한 청군에서 협조하겠다는 응답을 할 때, 위의 방지 요소를 하더라도 새로운 문서를 만들고 위조해서 보내면 홍군에게 당하게 된다. 그래서 누구로부터 문서가 왔는지도 알아야 한다.

열쇠 전달 문제 / 누구로부터 왔는지의 문제를 해결해야 한다.(인증 문제)

4. RSA 방식을 사용해서 해결

키를 쌍으로 공개키와 개인키를 가지고 대조하면서 비교해서 진위 여부를 확인한다.

A -> B의 공개키(문서) -> B = B의 개인키를 활용해 오픈 = 암호화
A -> A의 개인키(문서) -> B = A의 공개키를 활용해 오픈 = 서명,인증 (누구로부터 왔는지)

💻 하나의 개인키

💻 개인키와 공개키


5. RFC 문서

처음에는 벨연구소에서 내부망을 구축해서 통신을 사용하고 있었다.
그런데 나중에는 a대학에서 내부망을 구성을 하고, 외부의 벨연구소와 통신을 하고 싶었다.
=> 서로 약속을 하고 만든게 아니라서 다 다르다.

그래서 서로 약속된 규칙을 만들었는데, 그게 RFC1번 문서 이다. => 프로토콜
그래서 이 네트워크 들이 계속 모여서 만들어진게 => www => 인터넷
RFC 문서들의 집합이 = 인터넷 = http 프로토콜

JWT => RFC7519 번에 기초한다.

profile
디자인에서 개발자로

0개의 댓글