[네트워크] HTTPS에 대하여

허창원·2023년 11월 15일
0
post-thumbnail
post-custom-banner

업로드중..

HTTPS

HTTPS의 탄생

HTTP의 대표적인 보안 문제인 중간자 공격(Man in the middle attack, MITM)이 있습니다. 중간자 공격이란 네트워크 통신 도중 중간자가 침입해 통신 내용을 도청하거나 조각하는 공격 기법을 말합니다. 또, HTTP의 다른 문제는 통신 상대를 확인하지 않는다는 점이 있습니다. 통신 상대를 확인하지 않기 때문에 어디에서 누가 요청을 보냈는지, 또 통신 중인 상대가 허가된 상태인지 파악할 방법이 없어서 다른 누군가가 통신에 몰래 끼어 내용을 엿보거나 의미없는 요청을 보내도 속수무책으로 당할 수밖에 없다는 문제가 있었습니다.

HTTP 보안 문제를 해결하기 위해 탄생한 것이 HTTPS(Hyper Transfer Protocol Secure)입니다.

SSL과 TLS는 무엇이 다를까?

HTTPS의 암호화는 SSL(Secure Sockets Layer)에서 담당합니다. SSL은 클라이언트와 서버가 서로 데이터를 암호화해 통신할 수 있게 돕는 보안 계층입니다. SSL은 HTTPS뿐만 아니라 다른 프로토콜 파일 전송을 위한 FTP, 이메일 전송에 사용되는 SMTP 등과 조합해서도 사용할 수 있습니다. 하지만 SSL의 2.0 및 SSL 3.0은 안전성에 취약점이 있어 폐기되었습니다. 그 후 기존 버전과 구분하기 위해서 SSL 3.0 다음부터 등장한 SSL의 이름을 TLS(Transport Latyer Security)라고 변경했습니다. 다만 사람들이 SSL이라는 이름이 익숙하다보니 SSL을 사용하지 않는 지금도 TLS를 SSL이라 부르고 있습니다.

SSL의 암호화 과정

SSL은 크게 핸드셰이크, 세션, 세션 종료의 세 단계로 이루어집니다.

1단계: 클라이언트가 서버로 Hi라는 인사를 보냅니다. 이때, 랜덤한 데이터와 현재 지원할 수 있는 암호화 방식을 서버에 전달합니다. 암호화 방식을 전달하는 이유는 같은 대칭키, 공개키 기법이라도 다양한 암호화 방식이 있으므로 서로 어떤 암호화 방식을 사용할지 협의하는 과정이 필요하기 때문입니다.

2단계: 클라이언트의 인사를 받은 서버는 똑같이 클라이언트에 인사를 합니다. 이때 서버는 랜덤 데이터와 지원 가능한 암호화 방식, 인증서 세 가지 내용을 전달합니다. 인증서란 서버가 공식으로 인증된 기관인 CA(Certificate Authority)에서 발급받은 문서로, 서버가 신뢰할 수 있는지 보장하는 역할입니다.

3단계: 인증서를 받은 클라이언트는 이 인증서가 제대로된 문서인지 검증하기 위해 CA가 발급한 인증서 목록 중에서 서버가 전달한 인증서가 있는지 확인합니다. 그리고 인증서가 목록에 있다면 CA에서 공유하는 공개키를 가지고 인증서를 복호화합니다. 복호화에 성공한다면 이 인증서는 서버가 자신의 비밀키로 암호화했다는 것이 검증되니 드디어 서버에 신뢰할 수 있게 됩니다.

4단계: 본격적으로 키를 주고받기 위해 클라이언트는 실제 데이터 통신에서 사용할 대칭키를 임시로 만듭니다. 이때 앞서 클라이언트와 서버가 서로 주고받은 랜덤한 데이터를 조합해 임시 키를 생성합니다. 임시키는 대칭키이기 때문에 절대 중간에 제삼자에게 노출되어서는 안 되므로 앞서 갖고 있던 공개키로 암호화해 서버에 전달합니다.

5단계: 키를 받은 서버는 자신이 갖고 있던 비밀키로 암호를 해독해 임시 키를 전달 받습니다. 비로소 클라이언트와 서버가 같은 키를 갖게 된 것입니다.

6단계: 클라이언트와 서버의 임시 키는 일련의 과정을 거쳐 세션 키로 바뀌고, 이 세션키를 이용해 본격적으로 클라이언트와 서버가 통신할 수 있게 됩니다.

대칭키, 비대칭키로 안전하게 암호화하기

대칭키 기법은 하나의 키로 암호화와 복호화를 둘다 할 수 있는 암호화 기법입니다. 클라이언트와 서버가 1234라는 키를 갖고 있다가 데이터가 왔을 때 이 키로 복호화하고, 데이터를 보낼 때는 같은 키를 가지고 암호화해 전송합니다. 대칭키 기법은 암호화와 복호화가 빠르다는 장점이 있지만, 서로 키를 안전하게 교환하기가 어렵다는 단점이 있습니다. 왜냐하면 클라이언트와 서버가 같은 키를 갖고 있어야 하므로 서로 키를 주고 받아야 하는데, 그럼 중간에 누군가가 키를 가로챌 위험이 있기 때문입니다.

비대칭키 기법은 서로 다른 키 두개로 암호화와 복호화를 한다는 특징이 있습니다. 이때 사용하는 키 두 개를 각각 공개키, 개인키라고 부릅니다. 공개키는 누구나 가질 수 있지만 개인키는 소유자 한 명만 가질 수 있는 키로, 이 두 키는 늘 한 쌍으로 동작합니다. 이 때문에 공개키 암호화 기법을 위해서는 반드시 공개키와 개인키가 함께 필요합니다. 공개키로 암호화한 데이터는 개인키로만 복호화할 수 있고 개인키로 암호화한 데이터는 공개키로 복호화할 수 있습니다.

따라서 대칭키보다 안전하게 데이터를 주고받을 수 있지만 암호화, 복호화 과정이 복잡하므로 속도가 느리다는 단점이 있습니다.

UDP

TCP와 UDP의 차이점

UDP(User Datagram Protocol)는 비연결성과 신뢰성이 낮은 4계층인 전송 계층의 전송 프로토콜이다. 비연결적이라는 뜻은 데이터를 보낼 때 송신자와 수신자의 연결이 되었는지 확인하지 않고 데이터를 보낸다는 뜻입니다. 그리고 신뢰성이 낮다는 것은 도착한 데이터에 오류가 있고, 순차적이지 않을 수 있다는 뜻입니다.

TCP와 UDP의 특징을 비교해보겠습니다.

TCPUDP
연결방식연결형비연결형
전송 순서순서 보장 O순서 보장 X
혼잡제어OX
속도느림빠름
신뢰성높음낮음
  1. 전송자와 수신자 사이의 연결을 확인하지 않고 데이터를 보낸다고 해서 비연결형 프로토콜이라 부릅니다.
  2. UDP는 패킷 사이의 의존성이 없습니다. 즉, 패킷 순서를 전달할 필요가 없습니다.
  3. UDP는 혼잡 제어처럼 스스로 전송 속도를 조절하지 않고 처음에 정한 속도 그대로 전송합니다.
  4. 스트리밍, 온라인 게임에 사용하는 것이 유리합니다.

참고 문헌

임지명. 『그림으로 쉽게 이해하는 웹/HTTP/네트워크』. 위키북스, 2023.04.27.

post-custom-banner

0개의 댓글