관련 내용
[스프링] - Spring Security와 JWT 토큰을 이용하여 REST API 인증,인가 구현하기
개요와 목적
관련 내용 블로그 글에서는 Spring Security와 JWT 토큰을 사용해서, 인증과 인가에 처리 보안에 대해서 알아보았다. 이번 글에서는, 네트워크 통신에 가장 많이 쓰이는 TCP 통신에서 보안이 필요한 이유와 RSA 보안 방식에 대해서 알아보겠다.
먼저 TCP 통신이란 무엇인가
OSI 7계층
OSI 7 계층은, 네트워크 프로토콜들이 통신하는 구조를 7계층으로 분리한 것이다. 각 계층 간의 상호 작동하는 방식을 정해 놓았다. (OSI는 개념적 모델로 실질적 통신에는 사용되지 않는다. TCP/IP는 실질 네트워크 통신에 사용되는 모델이다)
TCP는 7 계층 중 트랜스포트 계층에서 설정된다. 트랜스 포트 계층 포함한 모든 계층의 역할을 그림을 통해 알아보자.
TCP와 UDP 통신의 차이(트랜스 포트 계층)
TCP
- 정보가 제대로 도착했는지, 상대의 ack통신을 통해 확인 할 수 있다. 신뢰성이 높은 통신 방법이다.
- 끊김 없이 정보가 전달되어야 하는 로그인 아이디 비밀번호 전달 같은 확실성이 중요한 통신에 사용한다.
- 다만 속도가 조금 느리다.
UDP
- 정보가 제대로 도착햇는지 확인 없이 다음 정보를 바로 보낸다.
- 그래서 속도가 빠르다.
- 통화 같은 경우, 사람이 정보를 파악할 수 있기 때문에 약간의 끊김이 있는 경우도 이해가 가능하기 때문에, UDP 통신 방식을 사용한다 안o 하세요~라고 정보가 와도 사람은 이해할 수 있다.
TCP보안 허점과, RSA 보안 방식
TCP와 UDP 차이에서 TCP는 ACK를 통해서 통신을 했는지 확인 할 수 있다고 했다.
이번에는 예시를 통해서, ACK를 사용하는 TCP 네트워크 통신에 어떠한 보안 허점이 있는 지 알아보고, 그것을 차단할 수 있는 RSA 보안 방식에 대해서 알아보겠다.
예시로 보는 TCP 보안 허점
현재 상황은 A와 C가 동맹을 맺은 상태이다. B를 함락하기 위해서는 A와 C가 같은 시간에 공격을 진행해야 한다. A가 C에게 공격할 시간을 전달하는 과정을 TCP 통신으로 가정하고, 그 과정에서 어떠한 보안상 허점이 있는 지 알아보자.
- 검정색 선이 10월 3일 20:00 공격을 전달하고, 그 메세지를 전달 받았음을 확인 ack를 보내는 정상적인 흐름이다.
- 빨간색 선은 A가 보낸 정보를 B가 탈취해서, C 대신에 ACK 메세지를 보낸 것이다. 그러면 C는 아무런 정보를 받지 못했기 때문에, A 혼자만 공격해서 패배하게 된다.
- 파란색 선은 B가 A의 정보를 탈취한 후, 다른 시간으로 바꿔서, B에게 전달 하고, B는 잘못된 정보인지 모르고 ACK를 날려 서로 다른 시간에 공격을 해서 패배하게 된다.
TCP 보안상 허점을 보호하는 RSA 암호화 방식
위 같은 보안상 허점을 막기 위해서는 두 가지 조건이 만족 되어야 한다.
언제 공격하자 라는 정보가 B나라가 볼 수 없게 암호화 되어있어야 한다.
그리고, A의 공격하자 정보와 C가 정보를 받았어를 표시하는 ACK 정보가 A와 C에서 온 정보인 출처를 확인 할 수 있어야 한다.
이런 데이터 암호화와 출저의 명확성을 밝힐 수 있는 RSA 암호화 방식에 대해서 알아보자.
비밀키 공개키
비밀키와 공개키는 하나의 쌍이다. 비밀키로 암호화한 것은 공개키로만 열 수 있고, 공개키로 암호화 한 것은 비밀키로만 열 수 있다. 비밀키는 자신만 가지고 있는 암호키이고, 공개키는 세상 모든 곳에 공개하는 키이다.
- 초록색 글씨, 공격 날짜의 데이터 출처 명확하게 밝히기. 데이터를 A의 비밀 키로 잠근다. C에서 들어온 데이터를 A의 공개키로 열게 되면, 이 데이터는 확실히 A 출처라는 것을 확인 할 수 있다.
- 파란색 글씨, 공격 날짜 데이터를 C만 볼 수 있게 암호화. A가 데이터를 C의 공개키로 암호화한다. 이 데이터를 풀 수 있는 것은 C의 비밀키를 가진 C뿐이다. 그래서 데이터가 C에 도달할 때까지 암호화 원칙을 지킬 수 있다.
- 빨간색 글씨, ACK 출처 명확하게 밝히기. 데이터를 받았는다는 ACK 메세지를 C의 비밀키로 암호화한다. A는 들어온 데이터를 C의 공개키를 풀어본다. 암호화가 풀린다면, 해당 데이터는 C에서 온 것을 확인 할 수 있다.
'Web Sever 개발과 CS 기초 > 네트워크 지식' 카테고리의 다른 글
라우팅과 IP주소 체계 이해 (0) | 2023.05.05 |
---|---|
쿠키와 세션의 구조 - 세션 로그인과 JWT 로그인 차이 (0) | 2023.03.07 |
NAT DHCP 목적, 구조와 동작 방법 (0) | 2023.01.28 |
HTTPS 필요성과 TLS Handshake 과정 (0) | 2022.12.19 |
URI와 URL 차이와 구조 (0) | 2022.12.19 |