표준 SSL Server Identification 2012.4.26 유창훈
Table of Contents SSL Server Identification 프로토콜 설명 및 구조 SSL handshake
1. SSL Server Identification Site는 Site의 공개키와 Site정보를 인증기관에 제출 인증기관은 검증을 거친 후 인증기관의 개인키로 인증서에 서명 인증기관은 Site로 인증서 발급 사용자의 웹 브라우저에는 인증기관의 인증서(공개키)가 내장. 사용자가 site에 접속요청 Site는 발급받은 인증서를 사용자에게 전달 사용자는 내장된 인증기관의 공개키로 Site 인증서 검증 사용자는 Site 정보와 Site 공개키 획득 획득한 Site 공개키로 대칭키를 암호화 하여 Site로 전송 Site는 개인키로 해독하여 대칭키 획득 안전하게 전달 된 대칭키를 이용하여 암호문을 주고 받음
2. 프로토콜 설명 SSL(Secure Socket Layer)은 넷스케이프사에서 전자상거래 등의 보안을 위해 개발됨. 이후TLS(Transport Layer Security)라는 이름으로 표준화됨. HTTP 뿐만 아니라 FTP, SMTP등 응용계층(Application Layer) 프로토콜의 종류에 상관없이 사용할 수 있는 장점. 일반적으로는 웹 트래픽 보안을 위해서 사용. Authentication, Encryption, Integrity를 보장.
2. 프로토콜 설명 프로토콜 스택 구조 SSL 의 목표는 신뢰할 수 있는 종단-대-종단 의 연결 및 전송을 보장하는 것이다. 따라서 TCP 를 사용하도록 설계되었다. SSL 은 위 그림과 같이 TCP 위에 두 계층의 프로토콜들로 이루어졌다. SSL Record Protocol 이 실제 데이터 처리를 담당하며 그 위에 이를 이용하는 상위 프로토콜들이 존재하는 방식이다.
2. 프로토콜 설명 SSL Record Protocol SSL 레코드 프로토콜은 상호 송수신을 위한 암호화 스펙이 SSL 핸드쉐이크 프로토콜에 의해 공유된 후 이러한 스펙에 따라 실제로 전송하는 데이터를 TCP 패킷으로 변환하기 위한 기능을 수행한다. SSL 레코드 프로토콜은 이를 위해 먼저 전송하는 메시지를 일정한 단위의 조각으로 분리하는 Fragmentation, 레코드 압축과 해제, 메시지 인증 및 암호화, 복호화 기능을 수행한다. SSL 레코드 프로토콜은 각 메시지에 대해 다음과 같은 절차를 통해서 전송을 수행한다. 먼저 전송할 메시지를 일정한 크기의 레코드 프로토콜 유닛(Record Protocol Unit)으로 분해하고, 각 유닛을 SSL 핸드쉐이크 프로토콜로 사전에 협의한 규칙에 맞게 압축한다. 다음으로 압축된 유닛마다 해시를 이용한 MAC을 생성한 후 이것을 포함하여 암호화한 후 전송한다. 이 과정에서 사전에 클라이언트와 서버 간에 협의한 스펙에 따라 암호화, MAC 생성, 압축 방식 등을 수행하므로, 메시지를 수신한 측에서도 정상적으로 해독할 수 있다.
2. 프로토콜 설명 SSL Record Protocol – 메시지 포멧
2. 프로토콜 설명 Record 프로토콜 Handshake 프로토콜 Change Cipher Spec 프로토콜 상위계층 메시지들이 보안성이 유지되며 전송될 수 있도록 하기 위하여, 메시지 분할, 압축, 메시지 인증, 암호화 등의 작업을 수행 Handshake 프로토콜 서버와 클라이언트간의 상호인증을 수행하고, 사용할 키 교환 방식, 대칭키 암호 방식, HMAC 방식, 압축방식 등의 보안속성을 협상 Change Cipher Spec 프로토콜 Handshake 프로토콜에 의해 협상된 압축, MAC, 암호화 방식 등이 이후부터 적용됨을 상대방에게 알림 Alert 프로토콜 세션의 종료 또는 오류 발생시 이를 상대방에게 알림 Application Protocol 다양한 상위계층에 보안서비스를 제공. HTTP, FTP 등. ① Record Protocol 데이터를 암호화하고 압축하여 안전하게 전송하는 프로토콜이다. SSL 의 실제 데이터를 다루며, Data 를 단편화하거나 압축하거나 MAC 을 적용하고 암호화하여 이를 TCP 에 전달하는 역할을 한다. ② Handshake Protocol SSL 세션 연결을 수립하는 역할을 한다. 클라이언트와 서버 간의 안전한 연결 수립을 위해서 클라이언트와 서버 간의 상호 인증을 수행하고 암호 메커니즘 등의 정보를 교환한다. ③ Change Cipher Spec Protocol 한 바이트짜리 메시지로서 약속한 암호화 알고리즘 및 키를 적용하여 전송한다. ④ Alert Protocol 2바이트로 구성되며, 첫번째 바이트에는 warning(1), fatal(2) 이 표현되고 두번째 바이트에는 세부적인 에러코드를 표현한다. 즉, Handshake, Change Cipher Spec, Record Protocol 수행 중 발생하는 오류메시지를 표현한다. ⑤ Application Protocol SSL 레코드 프로토콜은 다양한 상위계층에 보안 서비스 제공한다. 따라서 위 그림에서는 SSL 위에서 작동하는 프로토콜로서 HTTP 가 나와있지만, HTTP 이외의 다른 프로토콜들(ftp) 에도 적용 가능하다.
2. 프로토콜 설명 인캡슐레이션 ex) SSL Record Protocol – HandShake
3. SSL handshake 1 2 3 4 5 6 7 8 9 ClientHello ServerHello 클 서 ClientKeyExchange 6 7 4 ServerHelloDone 9 Finished 2 ServerHello 3 Certificate or ServerKeyExchange ChangeCipherSpec 8 클 라 이 언 트 서 버 ChangeCipherSpec Finished
3. SSL handshake Client Hello SSL버전, 난수, 클라이언트가 지원하는 Cipher Suit 리스트 및 압축방법 리스트 정보전송 cipher_suites : SSL_키교환알고리즘_WITH_암호알고리즘_해쉬알고리즘 예) SSL_RSA_WITH_NULL_MD5, SSL_RSA_WITH_NULL_SHA, SSL_RSA_EXPROT_WITH_RC4_40_MD5(Steam Cipher), SSL_RSA_WITH_RC4_A28_MD5, SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_EXPROT_WITH_RC2_CBC_40_MD5(Block Cipher), SSL_RSA_WITH_IDEA_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_RSA_WITH_3DES_EDE_EBC_SHA 등
3. SSL handshake
3. SSL handshake 1 2 3 4 5 6 7 8 9 ClientHello ServerHello 클 서 ClientKeyExchange 6 7 4 ServerHelloDone 9 Finished 2 ServerHello 3 Certificate or ServerKeyExchange ChangeCipherSpec 8 클 라 이 언 트 서 버 ChangeCipherSpec Finished
3. SSL handshake Server Hello ClientHello메세지에 대한 응답 서버 버전, 난수, 서버에서 선택한 cipher_suit 등을 셋팅하여 알려줌.
3. SSL handshake 1 2 3 4 5 6 7 8 9 ClientHello ServerHello 클 서 ClientKeyExchange 6 7 4 ServerHelloDone 9 Finished 2 ServerHello 3 Certificate or ServerKeyExchange ChangeCipherSpec 8 클 라 이 언 트 서 버 ChangeCipherSpec Finished
3. SSL handshake Certificate ServerKey Exchange ServerHelloDone 서버의 인증서가 포함됨. 서버의 인증서와 인증서를 발급한 CA 인증서가 순서대로 위치 ServerKey Exchange 서버인증을 위한 자신의 공개키 인증서를 가지고 있지 않은경우 클라이언트에게 pre-master secret을 공유하는데 필요한 서버의 공개키를 알려주기 위해 전송됨. ServerHelloDone 서버에서 보낼 메시지를 모두 보냈음을 의미
3. SSL handshake
3. SSL handshake 1 2 3 4 5 6 7 8 9 ClientHello ServerHello 클 서 ClientKeyExchange 6 7 4 ServerHelloDone 9 Finished 2 ServerHello 3 Certificate or ServerKeyExchange ChangeCipherSpec 8 클 라 이 언 트 서 버 ChangeCipherSpec Finished
3. SSL handshake Client Key Exchange Change Cipher Spec Finished 세션키를 생성하는 비밀정보(pre-master secret)를 암호화 하여 서버에 전송. 이를 기반으로 master_secret 과 키블록을 md5, sha1 함수를 통해 생성. 생성된 키 블록이 세션키로 사용. Change Cipher Spec 클라이언트는 마지막으로 Change Cipher Specs 메시지를 서버에 전송하여 이후에 전송되는 모든 메시지는 협상된 알고리즘과 키를 이용할 것임을 알림. Finished 협상된 알고리즘 및 키가 처음으로 적용된 메시지 발송.
3. SSL handshake 랜덤값을 서버의 공개키로 암호화 하여 전달하고 서버는 수신한 값을 복호화 해서 pre_master secret값으로 사용한다.
3. SSL handshake 1 2 3 4 5 6 7 8 9 ClientHello ServerHello 클 서 ClientKeyExchange 6 7 4 ServerHelloDone 9 Finished 2 ServerHello 3 Certificate or ServerKeyExchange ChangeCipherSpec 8 클 라 이 언 트 서 버 ChangeCipherSpec Finished
3. SSL handshake Change Ciper Spec Finished 클라이언트는 마지막으로 Change Cipher Specs 메시지를 서버에 전송하여 이후에 전송되는 모든 메시지는 협상된 알고리즘과 키를 이용할 것임을 알림. Finished 협상된 알고리즘 및 키가 처음으로 적용된 메시지 발송.
3. SSL handshake