SSL (Secure Socket Layer) 와 TLS (Transport Layer Security)
SSL / TLS는 네트워크 상에서 전송되는 데이터를 암호화 하기 위한 규약입니다. 넷스케이프에서 개발된 SSL 3.0을 기반으로 TLS가 개발되었습니다. 데이터 암호화를 위한 규약은 많이 논의되고 개발되어 왔습니다. Point to Point로 Encryption 적용한 Link Encryption은 보안성은 좋으나 비효율적인 측면이 있었으며 Application Layer에서 암호화를 하는 End to End Encryption는 어플리케이션에서 직접 데이터를 암호화 복호화 함으로서 데이터는 숨길 수 있으나 보내는 이과 받는 이의 정보가 그대로 노출되는 문제가 있으며 웹 측면에서 웹페이지 HTML을 암호화하는 과정은 비효율적인 측면이 있습니다. SSL과 TLS는 Transport Layer에서 암호화와 복호화를 진행합니다.
SSL (Secure Socket Layer)
먼저 SSL (Secure Socket Layer) 에 대해 간략히 정리해보고자 합니다.
SSL은많이 사용되는 보안서비스 중 하나입니다. SSL은 TCP에 의존적인 프로토콜의 집합으로써 구현되어있습니다. Application Layer와 Transport Layer사이에 SSL이 위치해 있으며, Handshake Protocol, ChangeCipherSpec Protocol, Alert Protocol, Record Protocol로 총 4개의 프로토콜로 구성되어 있습니다.
------------------------------------------------------------------------------
Application Layer
------------------------------------------------------------------------------
Handshake Protocol | ChangeCipherSpec Protocol | Alert Protocol
------------------------------------------------------------------------
Record Protocol
------------------------------------------------------------------------------
Transport Layer
------------------------------------------------------------------------------
1. Record Protocol
Record Protocol은 데이터 교환을 위한 프로토콜입니다. SSL payload의 암호화를 위해(Confidentiality), 메시지 인증 코드(MAC, message authentication code)를 만들기 위해 Handshake protocol에서 정의한 shared secr et key를 사용합니다. 위에서 설명한 기능을 위해 여러 절차를 걸쳐 수행되는데요,
상위 레이어 프로토콜로 부터 전달된 Payload를 잘라내고(Fragment) 압축합니다.(Compression) 압축한 값을 다른 값을 이용해 Hash 함수를 이용해 MAC를 만들어 기존의 압축된 Payload 뒤에 붙여줍니다. 그럼 [ Compressed Fragment ] 가 [ Compressed Fragment | MAC ] 형태가 됩니다. 이렇게 만들어진 값을 다시 암호화(Encryption)함으로서 confidentiality를 보장하게 됩니다. 암호화된 fragment를 Record Protocol Header 앞에 붙여주게 됩니다. 매우 복잡한 과정을 거치게 되죠.
2. HandShake Protocol
Handshake는 TCP/IP에 대해 알고계신분들은 익숙하실텐데요, SSL에서도 보안성 강화를 위해 Handshake 기법을 사용합니다. Handshake의 프로세스는 아래 그림과 같습니다.
서버-클라이언트 간 HandShake의 수행과정을 보여줍니다. 총 4개의 Phase로 나뉘어져 수행됩니다.
Phase 1. (client hello ~ server hello)
클라이언트 - 서버 간 hello 메시지를 서로 전송합니다. 해당 메시지에는 프로토콜 버전, 세션 ID, cipher suite, 암축 방법, 초기 랜덤수 정보가 포함되어 있습니다.
Phase 2. (Certificate ~ server_hello_done)
서버는 certificate, key exchange를 보내고 certificate를 요청합니다. 서버가 보낸 Certificate 메시지에는 인증서가 포함되어 있으며 인증된 기관에서 발급된 것으로 서버가 신뢰할 수 있다는 것을 보장하게 됩니다. 그 후 server_hello_done 메시지로 끝났음을 알립니다.
Phase 3. (Certificate ~ Certificate_verify)
클라이언트는 서버에서 전달받은 인증서를 검증합니다. 유효기관, 발급기관등을 확인하고 인증되었다면 다음 단계로 진행합니다. 클라이언트는 임의의 pre-master secret을 생성한 뒤, 서버가 보낸 인증서에 포함된 공개 키를 사용해 암호화합니다. 이렇게 암호화된 pre-master secret을 ClientKeyExchange 메시지에 포함시켜 서버에 전송합니다.서버는 클라이언트로부터 전달받은 정보를 복호화하여 pre-master secret을 알아냅니다. 이정보를 이용해 master secret을 생성하게 되죠, 이 master secret을 이용해 지금부터 서버 클라이언트 간 데이터 송수신 시 암호화하는데 사용할 Session key를 생성하게 됩니다. 클라이언트는 pre-master secret을 이미 알고 있기에 스스로 Session key를 만들게 되고 이를 기반으로 통신을 하게 됩니다.
Phase 4. (change_cipher_spec ~ finished)
서버와 클라이언트는 동일한 Session key를 이용해 통신을 할 수 있습니다. change_cipher_spec 메시지를 서로 교환함으로서 모든 데이터는 Session key를 사용해 암호화할 것임을 알려주고 Finished 메시지를 통해 Handshake 과정을 종료합니다.
위 단계를 거쳐 서버-클라이언트 간 안정한 통신을 할 수 있습니다.
3. Change Cipher Protocol
서버 - 클라이언트 간 암호화된 통신을 위해 일련의 암호화 알고리즘 정보를 사전에 협의하기 위해 상대방에서 보안 정보를 전송하는데 사용하는 프로토콜 입니다.
4. Alert Protocol
Handshake 진행 중 상대가 제시한 암호화 방식을 지원할 수 없는 경우나 그 외 여러 문제가 발생한 경우 문제를 알려주기 위한 기능을 수행하는 프로토콜 입니다.
더욱 상세한 내용은 기회가 된다면 다시 정리해보도록 하겠습니다. 감사합니다.
'ETC > Security' 카테고리의 다른 글
[정보보호개론] 스푸핑 공격 (Spoofing) (0) | 2018.11.07 |
---|---|
[정보보호개론] 스니핑 (Sniffing) (0) | 2018.11.07 |
[정보보호개론] 인증 (Authentication) (0) | 2018.11.04 |
[정보보호개론] Dos와 DDos (서비스 거부 공격) (0) | 2018.11.04 |
[정보보호개론] 정보보안의 3가지 속성 (0) | 2018.11.04 |