* SSL의 구조
SSL은 가장 다양한 분야에서 적용하고 있는 암호 프로토콜 중 하나다. TCP/IP는 기본적으로 보안을 고려하지 않으므로 전자상거래를 비롯한 다양한 온라인 서비스를 활성화하려면 서비스 상호간의 인증, 암호와 통신을 비롯한 문제점을 해결해야 한다.
* SSL의 개념
SSL은 ‘Secure Socket Layer’의 약자로 넷스케이프(Netscape)에서 처음 개발하여 넷스케이프 네이게이터(Netscape Navigator)에 처음 적용한 보안 프로토콜이다. 기본적인 아이디어는 기본의 TCP/IP에서 고려하지 않은 보안 세션을 추가하여 통신 상호 간의 전송 메시지에 대한 암호화와 상호 인증을 수행하는 프로토콜이다.
그림과 같이 SSL은 기존의 TCP/IP에서 응용 계층과 TCP 계층 사이에 추가된 보안 계층으로 동작한다. TCP 계층은 응용 계층의 프로톨 간의 인터페이스를 위하여 소켓을 이용하며, SSL은 각 소켓으로 연결된 상호 간의 통신 채널을 안전하게 관리하는 기능을 한다. 클라이언트와 서버 간의 안전한 통신을 위하여 SSL은 다음과 같은 기능을 제공한다.
==================================================================================================
기능 | 설명
==================================================================================================
상호인증 | 클라이언트/서버 간의 인증을 위한 세션 키를 생성하고 “Hello”라는 메시지를 교환함으로써
| 상호 인증을 한다.
————————————————————————————————–
기밀성 | 전송되는 메시지에 대한 다양한 형식의 암호화를 통해서 타인에게 메시지의 내용을 노출하
| 지 않도록 한다.
————————————————————————————————–
무결성 | 전송 메시지의 변조를 방지할 수 있도록 MD5를 비롯한 알고리즘을 이용하여 전자 서명을 한다.
==================================================================================================
기밀성이나 무결성 등의 암호학적 기능을 제공하기 위해서는 국제적으로 표준화되고 있는 암호 알고리즘의 지원이 따라야 한다. SSL은 표준화되어 있는 주요 암호 알고리즘을 비롯하여 현재 주로 이용하는 다양한 암호 알고리즘을 지원하고 있다.
==================================================================================================
기능 | 적용 알고리즘
==================================================================================================
기밀성 | DES, 3DES, IDEA, RC2, RC4
————————————————————————————————–
무결성 | MD5
————————————————————————————————–
서버 인증 | RSA, X509
————————————————————————————————–
클라이언트 인증 | 현재 대부분의 웹 브라우저에서 클라이언트 인증을 제공함
==================================================================================================
* SSL의 구조 및 통신 절차
SSL은 다수의 프로토콜로 구성되어 있는 프로토콜 집합이라고 할 수 있으며, 패킷 분할, 세션 관리 등의 기본적인 통신과 관련된 처리를 수행하는 부분과 데이터의 암호화, 복호화, 메시지 인증 같은 보안 서비스를 담당하고 있는 부분으로 구분할 수 있다.
그림에서 SSL 핸드쉐이크 프로토콜, SSL 변겸 암호 스펙, SSL 경고 프로토콜이 SSL의 세션 관리 및 동작을 처리하는 부분이며, 메시지의 암호화 및 무결성 등의 보안 서비스는 SSL 레코드 프로토콜에서 담당한다.
* SSL 핸드쉐이크 프로토콜
클라이언트와 서버 간의 통신을 수행하기 위한 첫번째 단계는 상호 간의 통신을 위한 세션(Session)을 설정하는 과정이다. 세션은 데이터 전송을 위한 논리적인 경로로, 실제로는 여러 개의 커넥션(Connection)이 포함이 되어 클라이언트와 서버 간의 논리적인 관계를 표시하는 정보를 포함하고 있다. SSL에서 세션 상태 연결을 수행하는 것이 SSL 핸드쉐이크 프로토콜(SSL Handshake Protocol)이며 한 세션 동안 이용되는 암호 매개 변수를 생성하여 클라이언트와 서버 간에 공유하기 위해서 사용한다.
SSL 핸드쉐이크 프로토콜은 SSL 레코드 프로토콜(Record Protocol)에 의해서 메시지의 송수신을 위한 작업보다 먼저 수행이 되어 다음과 같은 세션 정보들을 생성하게 된다.
세션 식별자(Session Identifier) : 활동 또는 보류 중인 세션을 식별하기 위해서 서버가 임의로 설정한 식별자
인증서(peer certification) : 서버와 클라이언트 주체의 X.509 인증서
Cipher Spec : 다량의 데이터에 대해 수행되는 압축 알고리즘과 MAC 알고리즘에 대한 규격
압축 방법(Compression method) : 암호화 이전에 데이터 압축을 위해 사용하는 알고리즘
Master secret : 클라이언트와 서버 간에 공유하는 48비트 길이의 비밀 값
재사용 여부 : 세션이 새로운 연결에 사용 가능한지 여부를 나타내는 플래그
세션이 설정된 후 해당 세션 내에 수행되는 각 커넥션에서 메시지는 세션 정보의 Master secret과 클라이언트의 난수를 통해서 각 커넥션마다 다르게 생성된 비밀 키에 의해서 암호화된다. 따라서 공격자는 스니핑을 통해서 전송 내용을 도청하더라도 전송되는 메시지를 복호화하기 위한 정보를 얻어내기 어렵게 된다.
세션을 설정하는 첫번째 단계로 클라이언트와 서버는 Hello 메시지를 교환하며, 이 과정을 통해서 SSL 프로토콜 보존, 세션 ID, 암호 알고리즘, 압축 방법을 설정하고 ClientHello.random과 ServerHello.random을 생성, 교환하게 된다. ClientHello 메시지를 받은 서버는 클라이언트의 인증서를 요구할 수 있으며, 이 경우 서버 자신의 인증서를 보내며 그렇지 않을 경우 ServerKeyExchange를 응답에 포함하여, CertificateRequest를 보내고, Hello 절차가 완료됨을 알리는 ServerHelloDone 메시지를 클라이언트로 보내어 응답한다.
클라이언트는 Hello에 대한 응답을 받아서 클라이언트의 인증서 또는 ClientKeyExchange와 클라이언트가 사용할 ChangeCipherSpec 메시지를 보내고 뒤이어 CipherSpec에 맞추어 작성된 finished 메시지를 서버로 보낸다.
서버는 ChangeCipherSpec 메시지와 이를 이용해서 만들어진 Finished 메시지를 받은 후 서버가 사용할 CihpherSpec을 ChangeCipherSpec 메시지와 Finished 메시지를 보내고 이후에는 합의된 내용으로 Application Data의 교환이 이루어지게 된다.
* 세션(Session)과 커넥션(Connection)
커넥션은 실제로 데이터이 송 수신이 이루어지는 단위를 말하며, Peer-to-Peer 관계가 성립하는 개념이다. 이에 비해서 세션은 논리적인 개념에 가까우며 컴퓨터 사용 시부터 종료 시까지의 개념을 포함한다. 실제로 한 세션은 여러 커넥션을 포함할 수 있다.
* SSL 레코드 프로토콜
SSL 레코드 프로토콜은 상호 송수신을 위한 암호화 스펙이 SSL 핸드쉐이크 프로토콜에 의해 공유된 후 이러한 스펙에 따라 실제로 전송하는 데이터를 TCP 패킷으로 변환하기 위한 기능을 수행한다. SSL 레코드 프로토콜은 이를 위해 먼저 전송하는 메시지를 일정한 단위의 조각으로 분리하는 Fragmentation, 레코드 압축과 해제, 메시지 인증 및 암호화, 복호화 기능을 수행한다.
SSL 레코드 프로토콜은 각 메시지에 대해 다음과 같은 절차를 통해서 전송을 수행한다. 먼저 전송할 메시지를 일정한 크기의 레코드 프로토콜 유닛(Record Protocol Unit)으로 분해하고, 각 유닛을 SSL 핸드쉐이크 프로토콜로 사전에 협의한 규칙에 맞게 압축한다. 다음으로 압축된 유닛마다 해시를 이용한 MAC을 생성한 후 이것을 포함하여 암호화한 후 전송한다.
이 과정에서 사전에 클라이언트와 서버 간에 협의한 스펙에 따라 암호화, MAC 생성, 압축 방식 등을 수행하므로, 메시지를 수신한 측에서도 정상적으로 해독할 수 있다.
* 변경 암호 스펙 프로토콜
SSL 변경 암호 스펙(Change Cipher Spec) 메시지는 이후에 전송되는 레코드에 대해서 암호 스켁(Cipher Spec)에 정의된 알고리즘과 키를 이용해서 보호할 수 있도록 수신측에 알려주는 용도로 사용한다. 간단히 요약하면 송수신하는 데 사용하는 암호화 알고리즘, MAC, 압축 방식 등을 요약하고 있는 암호 스펙을 변경하는 데 이용한다.
클라이언트는 키 교환 메시지와 인증서 확인 메시지를 전송한 후 보내며, 서버는 클라이언트에서 받은 키 교환 메시지를 성공적으로 처리한 후 보내게 된다.
* SSL 경고 프로토콜
SSL 경고 프로토콜(SSL Alert Protocol)은 SSL의 동작 과정에서 발생할 수 있는 문제 상황에 대해 경고를 전달하기 위해서 사용한다. 전송하는 경고 정보는 SSL 스펙에 정의되어 있는 치명적은 경고 목록과 메시지의 심각성을 나타내는 2바이트 데이터로 구성된다.