[그림으로 배우는 Http & Network] 를 읽은 내용을 바탕으로 정리한 포스팅입니다.
1. HTTP의 약점
- 암호화하지 않은 통신이기 때문에 도청 가능
- 통신 상대를 확인하지 않기 때문에 위장 가능
- 완전성을 증명할 수 없기 때문에 변조 가능
1.1 도청 가능의 위험성
HTTP는 기본적으로 암호화기능이 없기 때문에 일반 텍스트인 평문으로 HTTP 메세지를 보내게 된다. 이것은 굉장히 위험한 일인데 "TCP/IP는 도청이 가능한 네트워크" 이기 때문이다. 통신 경로에 존재하는 모든 네트워크 기기를 소유할 수 없기 때문에 인터넷 모든 곳에서 도청될 가능성이 존재한다.
이러한 도청을 피하는 대표적인 방법은 암호화이다. 암호화는 1)통신암호화와 2)컨텐츠암호화 방식이 존재한다.
(1) 통신암호화는 SSL(Secure Socket Layer) 혹은 TLS(Transport Layer Security)와 같은 다른 프로토콜과 HTTP를 조합함으로써 통신자체를 암호화하는 방식이다. SSL 로 안전한 통신로를 확보하고 나서 해당 통신로를 이용하여 HTTP 통신을 하는 것으로 HTTPS는 이러한 방식의 프로토콜을 말한다.
(2) 컨텐츠암호화는 통신이 아닌 HTTP의 메세지만을 암호화하는 것을 말한다. HTTP메세지 중 컨텐츠가 들어있는 메세지 바디 부분만을 암호화 하는 것으로, 서버가 해당 컨텐츠를 암호화/복호화 하는 구조를 가지고 있다는 것을 전제로 사용되는 방법이다.
1.2 통신 상대의 위장 가능성
HTTP는 요청과 응답의 상대를 확인하지 않는다. 따라서 어떤 요청이라던지 오게 되면 무조건 어떤 응답을 반환하게 되는 구조이다. 이러한 구조를 가지게 되면 1) 요청에 대한 응답을 보낸 서버가 위장한 웹서버일 위험성이 존재하고, 2) 서버에서 보낸 응답이 위장한 클라이언트에게 보내질 가능성이 있다. 3) 또 누구나가 아닌 허가된 상대와만 통신을 하고 싶은 경우가 있을 것이다.
이러한 문제점을 해결할 수 있는 것이 바로 증명서 이다.
증명서는 신뢰할 수 있는 제 3자 기관에 의해 발급되는 것으로 통신하는 상대인 클라이언트 혹은 서버가 실재하는 사실을 증명받을 수 있다.
1.3 수신한 내용의 변조 가능성
HTTP는 통신 과정에서 요청과 응답이 변조되었다고 하더라도 이 사실을 알 수 있는 방법이 없다. 즉 클라이언트에서 보낸 요청과 서버가 받는 요청이 일치하다는 것을 확인할 수 없다는 것이다. 정보가 정확한지 아닌지를 알 수 없다는 것을 완전성을 증명할 수 없다고 하며 이렇게 통신 과정 중간에 요청과 응답을 빼앗아 변조하는 것을 중간자공격이라고 한다.
이러한 중간자공격으로 인한 변조를 막기 위해서는 MD5, SHA-1 등이 해시 값을 이용하여 암호화 과정을 거치는 것인데, 이조차도 완벽한 방어라고는 할 수 없다.
2. HTTPS
HTTPS = HTTP + 암호화 + 인증 + 완전성보호
HTTP는 암호화 되지 않는 평문으로 통신을 하고, 통신 상대를 인증하는 수단이 없으며, 통신 과정에서 메세지가 변조될 가능성이 있다.
HTTPS는 이 3가지 문제를 SSL(Secure Socket Layer)프로토콜을 추가함으로 해결한다.
SSL은 HTTP 통신을 하는 소켓부분을 대체하는데, HTTP가 직접 TCP와 통신하지 않고 중간에 위치하여 SSL을 거쳐 통신을 하도록 한다.
2-1) SSL의 암호화
SSL은 암호화의 2가지 방식 중 공개키 암호화 방식을 사용한다.
공통키 암호화
공통키 암호화 방식은 암호화와 복호화에 하나의 키를 같이 사용하는 방식을 말한다. SSL이 공통키 암호화를 사용하지 않는 것은 공통키 암호가 가진 딜레마 때문이다.
키를 보내면 도청될 가능성이 있고, 키를 보내지 않으면 복호화 할 수 없다.
애초에 키를 안전하게 보낼 수 있다면 틀림없이 데이터도 안전하게 보낼 수 있을 것이다.
공개키 암호화
공개키 암호화는 이러한 딜레마를 서로 다른 두 개의 키 페어(쌍)을 사용하므로 해결한다. 서로 다른 두개의 키는 모두에게 공개되어 있는 공개키(public key)와 누구에게도 알려져서는 안되는 비밀키(secret key)가 사용된다. 암호화는 공개키를 통하여 진행되고, 복호화 과정에서 자신이 가진 비밀키를 이용하기 때문에, 비밀키는 통신에 사용되지 않아 도청될 가능성이 존재하지 않는다. 또 암호문과 공개키를 이용해 평문을 구하는 것은 매우 어려운 수학적 특징(매우 큰 수의 소인수 분해를 빠르게 구하기)으로 현재로서는 불가능에 가깝다.
2-2) HTTPS의 암호화
HTTPS는 공통키 암호화 방식과 공개키 암호화 방식을 모두 사용하는 하이브리드 암호 시스템이다.
공개키 암호화 방식의 처리 속도가 느리기 때문에, 속도가 빠른 공통키 암호화 방식의 장점과 보안이 강력한 공개키 암호화 방식을 조합하여 통신한다.
즉 키를 교환하는 곳에서만 공개키 암호를 사용하고, 그 이후의 모든 통신은 공통키로 암호화한 메세지를 교환하는 것이다.
1. 메세지를 주고 받을 상대에게 접속요청을 한다.
2. 상대방이 자신의 공개키를 준다.
3. 해당 공개키로 암호화할 때 사용할 공통(대칭)키를 암호화한다.
4. 상대방 공개키로 암호화한 나의 공통(대칭)키를 보낸다.
5. 서로 같은 공통(대칭)키를 갖고있기 때문에 다음 통신부터는 공통키로 암호화 한 내용을 주고 받는다.
2-3) 인증서
위의 하이브리드 암호시스템에서의 문제점은 처음에 주고 받는 공개키가 도중에 공격을 받아 바꿔치기 될 가능성이 있다는 것이다. 공개키가 진짜인지 아닌지를 증명하기 위해서는 검증된 인증기관인 CA(Certificate Authority)에서 발급하는 공개키 증명서를 사용할 수 있다.
[중고] 그림으로 배우는 HTTP & Network Basic
웹의 근간을 이루는 HTTP를 중심으로 하여 웹, 인터넷 데이터 통신 분야의 기초가 되는 내용들을 다루고 있다. 관련 분야를 배우고자 하는 독자들을 위해 만화 캐릭터와 일러스트를 활용하여 난
www.aladin.co.kr
'Web > CS (ComputerScience)' 카테고리의 다른 글
[Javascript 기본기다지기]_ 클로저(closure) 알아보기 (0) | 2021.06.22 |
---|---|
[CS기초공부하기] 캐시메모리란? (0) | 2021.06.14 |
운영체제(OS) 기초 정리해보기 (1) | 2021.06.03 |
[자료구조 Basic] - 그래프 알아보기 (0) | 2021.06.01 |
댓글