SSL/TLS Handshake Protocol

2017. 7. 21. 18:56NetworkHacking/Network





SSL ( Secure Socket Layer ) / TLS ( Transport Layer Security )

· 컴퓨터 네트워크에서 통신보안을 제공하는 암호화 프로토콜입니다 ( 데이터 전송시 평문이 아닌 암호화된 내용을 전송 )

· 웹브라우징, 전자메일, 인터넷 팩스, 인스턴트 메시징 및 VoIP와 같은 응용프로그램에서 널리 사용된다

· 웹 사이트의 경우 TLS를 사용하여 서버와 웹 브라우저 간의 모든 통신을 보호할 수 있다

· 전송계층과 응용계층 사이에 독립적으로 위치한다

· SSL 1.0 => SSL 2.0 => TLS( SSL 3.0 ) 순으로 개발되고 있다


1> 서버와 클라이언트는 연결( 세션 ) 마다 고유한 암호키를 공유하는 DES나 RC4와 같은 대칭키 암호화 알고리즘으로 보안을 제공한다 

( 해당 암호키는 SSL Handshake Protocol로 결정된다 )


2> 서버와 클라이언트의 상호 인증이 이루어집니다

( RSA와 같은 공개키 암호 알고리즘, DSS와 같은 전자서명 알고리즘, X.509공개키 인증서가 사용된다 )


3> 메시지 인증 코드를 이용하여 메시지의 무결성을 보장합니다




SSL Handshake Protocol 

인증서를 교환해서 서로를 인증하고, 공유키를 생성해서 암호화된 통신을 수행한다


[ 협상 단계 과정 ]


1> Client Hello ( Client -> Server )

- 자신이 사용할 SSL의 버전정보, Cipher suite list, 클라이언트 난수를 생성해서 보낸다

- Cipher suite : 대칭키 암호화시스템 + 공개키 암호화시스템 + 해쉬함수


2> Server Hello ( Server -> Client )

- 암호화 방법을 선택하고 서버난수를 생성해서 보낸다

3> Server Certificate ( Server -> Client ) 

- 클라이언트는 CA의 공개키로 이 인증서를 해독하여 서버의 공개키를 획득한다

- 클라이언트는 클라이언트와 서버의 난수를 각각 사용해  Pre-Master Secret 값을 생성한다

- PMS를 서버의 공개키로 암호화해서 서버에게 보내면 서버는 개인키를 사용해 해당 암호문을 복호화한다

- 암호문이 복호화가 제대로 이루어지면 서버는 클라이언트에게 인증할 수 있습니다 

4> Server Key Exchange ( Server -> Client )

- 인증서가 없거나 인증서가 서명용으로만 사용되어질 때 해당 메시지를 보낸다

5> Certificate Request ( Server -> Client ) 

- 클라이언트에게 인증서를 요구한다 ( 암호 제품군에 따라 Server의 마음대로 보내도 되고 보내지 않아도 된다 )

6> Server Hello Done( Server -> Client )

- 서버가 클라이언트에게 보낼 메시지를 모두 보냈음을 의미한다


7> Client Certificate ( Client -> Server )

- 클라이언트의 인증서 개인키로 암호화하고 클라이언트 인증서 공개 키를 사용해서 확인한다 

8> Certificate Verify ( Client -> Server )

- 클라이언트의 인증서를 서버가 쉽게 확인할 수 있도록 전자서명하여 보낸다

- 해당 메시지를 통해서 서버는 클라이언트의 인증서의 공개키가 유효한지 확인한 후 클라이언트 인증을 마친다

9> Client Key Exchange ( Client -> Server ) 

- PMS, 대칭 암호화 키, 메시지 인증코드 생성에사용되는 46바이트의 난수, 서버의 공개키로 만든 암호 등이 포함된다

- Pre-Master Secret : 일종의 난수값

- PMS, Client 난수, Server 난수 이 세값을 이용해 암호화키와 메시지 인증 코드용 공유 를 생성한다

10> Change Cipher Spec ( Client -> Server )

- 이후에 전송되는 모든 메시지는 서버와 협상된 알고리즘과 키를 이용해 암호화 시키겠다고 서버에 알린다

- 그리고 바로 Finished메시지를 생성하여 서버에 전송한다

11> Finished ( Client <-> Server )

- 클라이언트와 SSL서버간의 SSL 핸드쉐이크를 종료한다



# SSL 에서 사용하고 있는 암호 기술

- 공개 키 암호    : 사전 마스터 비밀을 암호화 한다

- 일방향 해시 함수    : 의나난수 생성기를 구성한다

- 디지털 서명    : 서버나 클라이언트의 인증서를 검증한다

- 의사난수 생성기    : 사전 마스터 비밀을 만든다 / 마스터 비밀로 부터 키를 만든다 / 초기화 벡터를 만든다




참고사이트 : http://shayete.tistory.com/