HTTP 프로토콜은, 웹 환경에서 텍스트와 하이퍼링크 (링크를 클릭하면 연결된 문서로 이어지는 구조) 정보를 주고 받기 위해 개발된 기술이었습니다. 현재는 파일 전송, 실시간 메세지 전송 등 더 발전된 형태로 더 많은 정보를 교환하게 되어 다양한 목적으로 사용 되고 있습니다.
그러나 HTTP 으로만 보낼 경우, 내용이 암호화 되지 않아 누군가가 중간에서 훔쳐보거나 정보를 탈취하는 문제가 있을 수 있습니다. (실제로 HTTP 페이지에서 로그인 정보를 입력할 때 패킷을 캡처해보면 아이디와 패스워드 정보가 그대로 노출되는 것을 확인할 수 있습니다.) 이번 포스트에서는 이를 방지하기 위해 어떠한 기술들이 적용되어 사용 되고 있는지 상세히 알아보도록 하겠습니다.
1. HTTP vs HTTPS
HTTPS 는 일반적인 평문이 들어 있는 HTTP 의 페이지를 SSL (Secure Socket Layer) 이라는 기술을 통해 암호화 하여 서로 주고받게 하는 기술이라고 할 수 있습니다. (본 블로그 페이지도 이와 같이 https://www.stevenjlee.net 으로 접근되고 있습니다)
만약 접속하는 페이지가 이와 같이 ‘https://…’ 로 시작하고 있다면, SSL 통신을 통해 데이터가 암호화되어 안전한 통신을 하고 있다는 것을 의미합니다. (즉, HTTPS 는 4계층의 SSL 프로토콜 위에서 동작하는 7계층의 프로토콜을 의미합니다.)
즉, SSL 을 통해 데이터가 암호화 되어 전송 된다면, 도청 / 변조 / 스푸핑 (Spoofing, 통신하는 상대방으로 가장하는 것) 이라는 세가지의 주요 위협으로 부터 보호할 수 있습니다.
2. SSL (Secure Socket Layer : 보안 소켓 계층)
SSL 이란, 신뢰할 수 있는 제 3자가 발행한 인증서를 통해 별도로 발급한 암호화 키를 가지고 발신자와 수신자가 (예> 클라이언트와 서버) 서로 암호화된 통신을 하는 규약 (프로토콜) 을 의미합니다.
** TLS (Transport Layer Security Protocol) 와 SSL 은 같은 의미로 통용되고 있습니다. 처음 네스케이프사에 의해 SSL 이 발명되었고, 이것이 점차 폭넓게 사용되다가 표준화 기구인 IETF 에 의해 관리를 하게 되면서 TLS 라는 이름으로 변경 되었습니다.
(1) 암호화 기술/방식 : 대칭키 (공개 키) & 비대칭키 (공용 키) + 하이브리드
암호화는 크게 ‘암호화 (Encryption)’ 와 ‘복호화 (Decryption)’ 를 하는 과정으로 구성되어 있습니다. 발신자는 암호화 알고리즘을 수행하는 암호화 키를 이용해서 평문을 암호화 하고, 수신자는 암호화된 데이터를 해독하는 복호화 키를 이용해서 해독합니다. SSL 에서 사용하는 암호화 기술/방식은 암호화 키와 복호화 키의 구현 및 사용 방법에 따라 대칭 키(공용 키) 방식과 비대칭 키(공개 키) 방식으로 구분할 수 있습니다.
– 대칭 키 (공용 키) 방식 (Symmetric Key Cryptosystem)
서로 통신하는 발신자와 수신자가 모두 동일한 키를 이용하여 암호화 및 복호화 하는 방식을 의미합니다. 대칭 키 방식은 구조가 단순하기 때문에 속도가 빠르다는 장점이 있습니다. 그러나 양 측의 키가 같기 때문에 키를 전송하는 과정에서 제 3자가 입수 등의 문제가 발생할 수 있습니다.
> 암호화 종류 : DES (Data Encryption Standard / 데이터 암호화 표준), 3DES (Triple Data Encryption Standard / 3중 데이터 암호화 표준), AES (Advanced Encryption Standard / 고급 암호화 표준)
– 비대칭 키 (공개 키 & 비밀 키) 방식 (Asymmetric Key Cryptosystem)
발신자와 수신자가 서로 다른 암호화 키 및 복호화 키를 사용하는 방식을 의미합니다. 즉, 모두에게 공개 가능한 공개 키 (Public Key) 와 모두에게 비밀로 해두고 한 쪽에서만 사용하는 비밀 키 (Secret Key) 방식을 사용 합니다. 이 둘은 키 페어 (Key Pair) 관계, 즉 쌍으로 존재합니다. (한 쪽의 키만 가지고 다른 키를 만들거나, 암호화된 데이터를 해독할 수 없음) 따라서, 한 쪽의 비밀 키를 전송하지 않아도 되므로 키 분배 문제가 없어지는 장점이 있습니다. 그러나 비대칭 키 암호화 방식은 처리가 복잡하기 때문에 그만큼 속도가 비교적 느리다는 단점이 있습니다.
> 암호화 종류 : RSA (Rivet Sharmir Adleman), 타원 곡선 암호 (Elliptic Curve Cryptosystem)
1) 수신자는 공개 키와 비밀 키를 함께 만듦 (키 페어)
2) 수신자는 공개 키를 모두에게 배포, 비밀 키는 보관
3) 발신자는 공개 키로 데이터를 암호화 하여 송신
4) 수신자는 비밀 키로 수신한 데이터를 복호화
항목 | 대칭 키 암호화 방식 | 비대칭 키 암호화 방식 |
처리 속도 | 빠름 | 느림 |
키 배송 문제 | O | X |
키 관리 | 통신 대상 모두 관리 | 비밀 키만 관리 |
– 하이브리드 방식
발신자가 비대칭 키 방식의 공개 키로 대칭 키 (공용 키) 를 암호화 하여 상대방에게 전송한 후, 수신자가 비밀 키로 해당 대칭 키를 복호화 하는 방식을 의미합니다. 이 후 메세지는 대칭 키를 이용하여 암호화/복호화를 하게 됩니다. 이렇게 하여 대칭 키 방식의 장점인 빠른 속도와 비대칭 키 방식의 장점인 키 분배 문제를 동시에 해결할 수 있습니다. SSL 은 바로 이 하이브리드 방식을 이용하고 있습니다.
1) 수신자는 공개 키와 비밀 키를 만듦
2) 수신자는 공개 키를 모두에게 배포, 비밀 키는 보관
3) 발신자는 공개 키로 공용 키를 암호화하여 수신자에게 전송
4) 수신자는 비밀 키로 공용 키를 복호화 (메세지 암호화를 위한 공용 키가 양 측 모두에게 있는 상태가 됨)
5) 발신자는 공용 키로 데이터를 암호화하여 송신
6) 수신자는 공용 키로 수신한 데이터를 복호화
(2) SSL 의 전체 동작과정
위에서 설명한 하이브리드 암호화 방식을 토대로 인증기관이 포함된 전체적인 SSL 의 동작과정은 다음과 같습니다. 특히 인증 기관에서 발급하는 인증서를 설치하는 과정이 먼저 준비가 되어야 하는 과정이 포함되어 있습니다.
(3) SSL 의 패킷구조와 3 Way Handshake
SSL 은 기본적으로 4계층과 7계층 사이에서 동작합니다. SSL 은 크게 하위에 있는 레코드 프로토콜 (단편화, 압축, 무결성, 보호, 암호화 기능을 제공) 과 상위에 있는 Handshake 관련 프로토콜 들로 구성됩니다.
– SSL Handshake
인증서의 설치가 모두 끝나면, SSL 에서는 바로 데이터를 암호화 하여 전송하지 않고 먼저 ‘SSL Handshake’ 라는 과정을 거쳐서 세션 (Session) 을 맺습니다. 이 단계에서는 사전에 1) 양 측이 사용할 알고리즘을 결정하고 – 2) 서로를 인증한 다음 – 3) 공통 키를 교환 하고 – 4) 최종 확인 이라는 과정을 거칩니다.
– Change Cipher Spec 프로토콜
상호간 암호 통신을 위해 보안 알고리즘 정보와 방식을 결정하고 전송합니다.
– Alert 프로토콜
Handshake 과정에서 상대방이 제시한 암호화 방식을 지원할 수 없거나 기타 오류가 발생했을 때 상대방에게 오류를 통보하는 기능을 수행합니다.
3. SSL 적용 분야
SSL 은 기본적으로 OSI 7계층과 4계층 사이에서 동작합니다. 즉, TCP 를 이용하기 때문에 TCP 보다는 위에 있고 어플리케이션 보다는 아래에 있는 4.5계층에 위치해 있다고도 볼 수 있습니다. 이에 TCP 를 기반으로 한 모든 어플리케이션 에서 SSL 이 적용될 수 있습니다.
예를 들어, 파일 전송을 위한 FTP 또는 이메일을 위한 SMTP 도 모두 SSL 을 통해 암호화할 수 있습니다. (이 경우, FTP over SSL, SMTP over SSL 과 같이 표현할 수 있습니다.) 즉, SSL 은 반드시 HTTP 전용 암호화 프로토콜로 사용되지는 않습니다. (다만 HTTPS 로 널리 사용될 뿐입니다.)
#Steven