BackGround

[네트워크]HTTP, HTTPS 통신과 암호화 방식(대칭키, 비대칭키, 하이브리드) 그리고 SSL

joje* 2024. 12. 2. 09:41

1. 데이터 통신의 흐름
 웹 상에서의 데이터 전송 시 데이터는 패킷형태로 전송되며 목적지는 IP 주소로 구분된다. 데이터가 전송될 때의 클라이언트와 서버간 연결 프로토콜은 속도 혹은 신뢰성에 따라 연결지향형인 TCP(Transmission Control Protocol) 통신과 비연결지향형인 UDP(User Datagram Protocol)로 나뉘게 되며 클라이언트와 서버 간의 통신 프로토콜로는 HTTP, HTTPS 와 같은 프로토콜이 이용되게 된다. 
 
- 통신흐름 예시
클라이언트는 서버로 데이터를 보내고, DNS서버에서는 도메인 이름과 매칭되는 IP 주소를 찾게 된다. 데이터가 전송되는 동안의 연결 프로토콜은 TCP/IP와 같은 형태로 사용되며, TCP/IP 프로토콜과 함께 웹 상에서의 요청과 응답을 처리하기 위해  HTTP, HTTPS 와 같은 프로토콜을 사용한다. 이후 서버가 해당 데이터를 받아 HTML, 응답 데이터와 같은 자원을 반환하고 웹 브라우저는 이를 이용해 렌더링 한 후 화면에 표시해주고 클라이언트는 반환된 화면을 보게 된다.
 
** TCP/IP와 HTTP 상호관계
HTTP 프로토콜은 TCP/IP 프로토콜 위에서 작동한다. 즉, HTTP 프로토콜을 이용해 데이터를 요청/응답 시에 이는 TCP/IP 프로토콜을 기반으로 연결된 상태에서 이루어지게 되며 TCP/IP 프로토콜은 HTTP 프로토콜에 의한 데이터 전송 시 신뢰성 있는 데이터 전송을 보장해주게 된다. 
 
- IP(패킷 전송 프로토콜): 데이터가 어디로 가야할지 결정
- TCP( 전송 계층 프로토콜): 신뢰성 있는 데이터 전송을 보장. TCP는 데이터가 올바르게 전달되도록 패킷의 순서와 정확성을 확인
- HTTP( 애플리케이션 계층 프로토콜): 웹 페이지나 웹 리소스를 요청하고 전송하는 데 사용
 
2. HTTP(Hypertext Transfer Protocol)란?
-  HTTP(Hypertext Transfer Protocol)는 클라이언트와 서버 간 요청과 응답을 주고받기 위한 통신 프로토콜 중 하나이다. 비연결성이라는 특징을 지니며, 데이터가 암호화되어 이용되지 않아 보안에 취약하다는 단점을 지니고 있다. 
 
3. HTTPS(HyperText Transfer Protocol Secure)란?
- 보안에 취약한 HTTP 프로토콜에 SSL(Secure Socket Layer)이라는 기술을 적용해 보안을 강화한 프로토콜을 의미한다. 즉, 요청과 응답에 이용되는 데이터를 암호화해 전송하므로써 중간에 발생할 수 있는 스니핑(네트워크 중간에 정보를 도청하는 행위)과 같은 공격 행위로부터 보다 안전한 데이터 전송이 가능하게 해준다.
 

이미지 출처: https://rachel-kwak.github.io/2021/03/08/HTTPS.html

 
4. 암호화 기술 방식
- 데이터를 암호화하는 방식은 3가지로 구분될 수 있다.
 
1) 대칭키 방식
대칭키 암호화는 송신자와 수신자가 동일한 대칭키를 사용해 데이터를 암호화하고 복호화하는 방식을 의미한다. AES, DES 방식이 있으며 비대칭키에 비해 속도가 빠르다는 장점을 지니고 있지만 대칭키가 노출되면 손쉽게 복호화가 이루어질 수 있어 보안에 상대적으로 취약하다.
 

이미지 출처: https://www.geeksforgeeks.org/how-does-symmetric-and-asymmetric-key-cryptography-works-together/

 
대칭키를 이용한 방식은 다음의 절차를 따라 암호화/복호화가 이루어진다.

① 키 공유: 송신자와 수신자는 동일한 대칭키를 사전에 공유
② 암호화: 송신사가 평문(Plaintext)을 대칭키로 암호화
③ 전송: 암호화된 데이터 전송
④ 복호화: 서버에서는 암호화된 데이터를 받아 대칭키로 복호화

2) 비대칭키 방식
비대칭키 암호화는 두 개의 키(공개키와 개인키)를 사용한다. 공개키는 누구나 볼 수 있고, 개인키는 소유자만 알고 있으며 데이터를 공개키로 암호화하고, 그에 상응하는 개인키로 복호화하는 방식이다. RSA, ECC 방식이 있으며, 대칭키 방식에 비해 절차가 복잡해 속도가 느리다는 단점이 있으나 보다 안전하다는 장점을 지닌다. 

이미지 출처: https://www.geeksforgeeks.org/asymmetric-key-cryptography/

 
비대칭키를 이용한 방식은 다음의 절차를 따라 암호화/복호화가 이루어진다.
 
① 키 생성: 공개키(Public Key)와 개인키(Private Key)라는 두 개의 키를 생성한 후 공개키를 배포
② 암호화: 송신자는 공개키를 이용해 평문(Plaintext)를 암호화
③ 전송: 암호화 된 데이터(Ciphertext)를 서버측에 전송
④ 복호화: 서버는 개인키(Private Key)를 이용해 암호화 된 데이터를 평문으로 복호화
 
3) 하이브리드 방식
대칭키의 속도와 비대칭키의 보안성을 취하기 위해 두 가지 방식을 결합한 방식이다. 즉, 대칭키 자체를 비대칭키 방식을 이용해 암호화/복호화 처리를 하고 전송되는 데이터는 대칭키를 이용해 암호화/복호화 처리를 한다. 
 

이미지 출처: https://medium.com/@igorfilatov/hybrid-encryption-in-python-3e408c73970c

 
하이브리드 방식은 다음의 절차를 따라 암호화/복호화가 이루어진다.
 
① 대칭키(Symmetric Key) 공유: 송신자와 수신자는 동일한 공용키를 사전에 공유
② 비대칭키 생성 및 공유: 수신자 측에서 공개키(Public Key)와 개인키(Private Key)라는 두 개의 키를 생성한 후 공개키를 배포
③ 대칭키 암호화: 송신자는 공개키(Public Key)를 이용해 대칭키(Symmetric Key) 를 암호화 해 전송 
④ 대칭키 복호화: 수신자는 암호화 된 대칭키(Encrypted Symmetric Key)를 개인키(Private Key)를 이용해 복호화
⑤ 대칭키를 이용한 데이터 암호화: 송신자는 대칭키(Symmetric Key)를 이용해 데이터를 암호화 해 수신자 측에 전송
⑥ 대칭키를 이용한 데이터 복호화: 수신자는 암호화 된 데이터를 대칭키(Symmetric Key)로 복호화 처리

5. SSL(Secure Socket Layer)이란?
SSL 방식은 서버,클라이언트 이외에 인증기관(Certificate Authority, CA), 인증서(Digital Certificate)라는 주체를 추가적으로 이용해 자료를 암/복호화 해 데이터를 송/수신 하는 방식을 의미한다.
 

이미지 출처: https://12bme.tistory.com/80

 
SSL 방식의 인증은 다음의 흐름을 따라 이루어진다. 
 
1) 서버는 비대칭키 방식을 이용해 서버 공개키(Public Key - Server)서버 개인키(Private Key - Server)를 생성하고, 서버 공개키 (Public Key - Server ) 와 Site 정보를 인증기관(CA)에 전송한다.
 
2) 인증기관(CA)은 이를 받아 인증기관 개인키(Private Key - CA)를 이용해 해당 정보를 암호화 한 인증서(Digital Certificate)를 발급하고 이를 서버에 전송하며, 클라이언트측에는 인증기관 공개키(Public Key - CA )를 사용자 웹 브라우저에 전송한다.
 
3) 이후 클라이언트측에서 서버측에 SSL 연결 요청 시 서버는 발급받았었던 인증서(Digital Certificate)를 클라이언트에게 전송하며, 클라이언트측에서는 인증기관 공개키(Public Key - CA )를 이용해 이를 복호화하여 서버 공개키 (Public Key - Server) 와 Site 정보를 획득한다.
 
4) 클라이언트측에서는 획득한 서버 공개키 (Public Key - Server) 정보를 이용해 대칭키를 암호화 해 서버측에 전달하며 서버측에서는 서버 개인키(Private Key - Server)를 이용해 이를 복호화 해 이용한다.
 
5) 위의 과정을 통해 SSL 연결이 성공적으로 이루어진 경우 클라이언트와 서버는 대칭키를 이용한 암호화/복호화를 통해 데이터를 주고받게 된다. 
 
6. SSL Handshake란?
클라이언트 측에서 서버측에 SSL 연결 요청 시 인증기관(CA)에서 발급받은 인증서를 바탕으로 연결을 위한 협의를 진행하게 된다.이러한 일련의 과정을 SSL Handshake라고 하며 이 과정에는 암호화 방식 설정, 인증서 유효성 검증, 대칭키 교환 등의 일련의 과정이 포함된다. 
 
SSL Handshake 과정은 아래의 단계를 거쳐 일어나게 된다.  
 

이미지 출처: https://www.ssl2buy.com/wiki/ssl-tls-handshake-how-does-it-work

 
1) Sends Text, TLS Type, Cipher Suites, Client Random:
Client Hello 단계. 서버측에 SSL 연결을 시도하는 행위가 이루어지는 단계이다.
이 과정에서 클라이언트가 서버에 전달하는 정보는 다음과 같다.
 
SSL/TLS 버전: 클라이언트가 지원하는 SSL/TLS 프로토콜의 버전 (TLS 1.2, TLS 1.3).
Cipher Suites: 클라이언트가 지원하는 암호화 알고리즘 목록 (AES, RSA, ECDSA 등)
Client Random: 클라이언트가 생성한 32바이트의 랜덤 값. 나중에 세션키를 생성할 때 사용
세션 ID (옵션): 클라이언트가 이전에 연결한 세션을 재사용하려는 경우 사용
Extensions: 클라이언트가 지원하는 특정 기능(서버 이름 표시(SNI), ALPN 등)
 
2) Sends Text, SSL Certificate, Cipher Suites, Server Random: 
Server Hello 단계. 클라이언트가 요청 시 보낸 정보들에 대한 응답하는 단계이다. 
이 과정에서 서버에서 클라이언트에 전달되는 정보는 다음과 같다.
 
SSL/TLS 버전: 클라이언트가 제시한 버전 중 서버가 사용할 버전을 선택
Cipher Suite: 클라이언트가 보낸 암호화 알고리즘 목록 중 서버가 선택한 암호화 알고리즘 정보
Server Random: 서버가 생성한 32바이트의 랜덤 값. 클라이언트 랜덤 값과 결합하여 세션키를 생성하는데 사용
세션 ID: 기존 세션을 재사용할 경우 전달되는 정보
Server Certificate: 서버의 신원을 증명하기 위한 디지털 인증서. 인증서에는 서버의 대칭키가 포함되어 있으며 클라이언트는 이 인증서를 통해 서버의 신뢰성을 확인
서버 인증서 체인: 서버 인증서가 유효한지 검증하기 위한 인증서 체인(루트 인증서, 중간 인증서 등)
Extensions: 서버가 지원하는 추가 기능들
 
3) Sends Premaster Secret Message Encoded With Public Key:
Server Key Exchange 단계. 클라이언트측에서 대칭키 생성을 위해 서버의 공개키를 이용해 암호환 한 값인 Premaster Secret Message 서버로 전송하는 단계를 의미한다. 서버가 Diffie-Hellman(DH) 또는 Elliptic Curve Diffie-Hellman(ECDH) 키 교환을 사용하는 경우, 관련된 파라미터를 전송하고 이 정보는 클라이언트가 세션키를 계산할 때 사용된다.
 
4) Using Client Random, Server Random, And The Premaster Secret/ Session Created:
Session Key Generation 단계. 클라이언트 측에서 전달받은 Premaster Secret 정보를 서버측의 개인키(Private Key)로 복호화 하여 Client 측의 Premaster Secret 정보와 결합해 추후 대칭키로 이용될 세션키를 생성해준다. 
 
5) Finished:
클라이언트측과 서버측에서 각자 Handshake 과정이 성공적으로 끝마쳤음을 확인하고 Finished 메시지를 주고 받으며 연결을 종료한다. 
 
 
- 참고한 사이트
 
https://www.stevenjlee.net/2020/11/01/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-http-vs-https-%EA%B7%B8%EB%A6%AC%EA%B3%A0-ssl-secure-socket-layer/

[이해하기] HTTP vs HTTPS, 그리고 SSL (Secure Socket Layer) | STEVEN J. LEE

HTTPS 는 일반적인 평문이 들어 있는 HTTP 의 페이지를 SSL (Secure Socket Layer) 이라는 기술을 통해 암호화 하여 서로 주고받게 하는 기술이라고 할 수 있습니다. (본 블로그 페이지도 이와 같이 https://ww

www.stevenjlee.net

 
https://f-lab.kr/insight/understanding-http-communication

HTTP 통신의 이해: 웹의 기본 동작 원리

HTTP 통신의 기본 개념부터 DNS와 TCP/IP의 역할, 웹 페이지 요청과 응답 과정을 통해 웹의 기본 동작 원리를 이해하는 방법을 소개합니다.

f-lab.kr

 
https://hwan-shell.tistory.com/271

http와 tcp/ip의 이해

1. Http? tcp/ip? 네트워크 전공이신 분들은 이 두개가 서로 상호작용 한다는 것을 알고 있을 것입니다. 문제는 방대한 양의 정보와 잘못된 지식인데, http와 tcp/ip를 완전 다른놈 취급한다는 사실입니

hwan-shell.tistory.com

 
https://dev-coco.tistory.com/144

TCP와 UDP의 특징 및 차이점 알아보기

TCP와 UDP는 OSI 7 계층들 중 TCP/IP의 전송 계층에서 사용되는 프로토콜이다.※ 전송 계층은 송신자와 수신자를 연결하는 통신서비스를 제공하는 계층이다.즉, 데이터의 전달을 담당하며 전달되

dev-coco.tistory.com

 
https://aws-hyoh.tistory.com/39

HTTPS 통신과정 쉽게 이해하기 #3(SSL Handshake, 협상)

고대 그리스에서는 타인에게 노출되어서는 안 될 중요한 정보를 보낼 때, 전달하는 이(사자)의 머리를 빡빡 깎아서 중요한 정보를 적은 후 머리가 자라서 글이 보이지 않으면 그제야 상대방에게

aws-hyoh.tistory.com