검수요청.png검수요청.png

TLS

위키원
Asadal (토론 | 기여)님의 2021년 2월 19일 (금) 21:06 판 (같이 보기)
이동: 둘러보기, 검색

TLS(티엘에스)란 "Transport Layer Security"의 약자로서, 네트워크를 통한 데이터 통신에서 전송 정보를 보호하기 위해 사용하는 보안 유지 프로토콜이다. 전송계층보안이라고 한다. 기존의 SSL 3.0 버전을 기초로 TLS를 만들었다.

개요

웹브라우저, 이메일, 메신저, 인터넷전화VoIP 등 네트워크를 통해 정보를 전송하는 경우, 정보를 보내는 측과 받는 측이 통신하여 어떤 암호화 알고리즘을 사용할 것인지를 정하고 공개키 기반의 암호키를 교환한 후에 실제 데이터를 암호화하여 전송하는 방식이다. 중간에 제3 자가 전송 내용을 가로채더라도 암호를 풀지 못해 정보를 안전하게 보호할 수 있다. TLS는 응용 프로그램이 네트워크상에서 안전하게 통신하기 위해 사용되는 프로토콜로, 이메일, 웹 브라우징, 메세징, 그리고 다른 프로토콜들의 감청을 통한 정보의 변형을 방지한다.[1] SSL과 TLS는 모두 웹 서버와 사용자의 웹 브라우저 간 통신을 암호화하는 데 사용되는 프로토콜이다. 공개키와 개인키를 교환하여 보안 세션을 생성하여 통신을 암호화하는 방식을 사용한다. TLS는 맥(MAC) 함수 생성을 위해 다른 암호화 알고리즘을 사용하고, 이전 버전의 SSL보다 많은 경고 코드를 포함하고 있다. SSL(Secure Sockets Layer)은 보안 소켓 계층이라는 뜻으로, 인터넷을 통해 전달되는 정보 보안의 안전한 거래를 허용하기 위해 Netscape 사에서 개발한 인터넷 통신 규약 프로토콜이다. TLS는 SSL 3.0을 기초로 하여 IETF가 만든 프로토콜로, SSL 3.0을 보다 안전하게 하고, 프로토콜의 스펙을 더 정확하고 안정성을 높이는 목적으로 고안되었다.[2]

특징

SSL과 TLS는 모두 네트워크 우선 보안을 제공하는 암호화 프로토콜을 소규모 클라이언트, 서버 프로토콜이다. 서버와 클라이언트가 TLS로 통신을 할 때, 어떠한 제3 자도 메시지를 변형시키거나 감청할 수 없도록 한다. 모든 브라우저는 TLS를 지원하고, 안전한 연결을 하기 위해서 유효한 디지털 인증서를 제공하는 것을 요구한다.[1] 상대 사이트에 대한 신뢰성을 인증하고, 다양한 함호화 알고리즘을 이용하여 메시지를 암호화한다. 또한, 송수신 메시지에 대한 체크섬 기능이 있고, 변조를 방지한다. 지원 프로토콜로는 HTTPS, 텔넷(Telnet), POP3S, SFTP가 있다.[3] 그리고 응용 계층과 전송 계층 사이에 있다.[4]

핸드쉐이크

TLS의 통신 과정은 핸드쉐이크가 이루어진다. 먼저 클라이언트가 요청하면 TCP 레벨에서 연결이 맺어진 이후 TLS 핸드쉐이킹을 수행한다. ClientHello 메시지에는 클라이언트에서 가능한 TLS 버전, 세션 식별자, 암호 설정 등의 정보를 포함하는데, 이 메시지를 보낸다. 다음으로, 서버에서 암호화를 위한 인증서의 공개키를 내려주면 클라이언트는 이 공개키가 신뢰할 수 있는 인증서의 키인지 확인한다. 이후 서버는 ServerHello 메시지를 클라이언트에게 보낸다. 이 메시지에는 ClientHello 메시지의 정보 중 서버에서 사용하기로 선택한 TLS 버전, 세션 식별자, 암호 설정 등의 정보가 포함된다. 또한, Certificate 메시지를 보낸다. 이 메시지에는 서버의 인증서가 들어있다. 이 인증서는 인증 기관에서 발급받은 것이고, 서버가 신뢰할 수 있는 자임을 인증한다. 전송이 끝나면 ServerHelloDone 메시지를 보내서 끝난 것을 알린다. 클라이언트 측에서 해당 공개키를 신뢰한다면, 이 클라이언트는 세션키를 생성하여, 서버로부터 받은 공개키로 암호화하여 서버로 전달한다. 클라이언트는 서버에서 받은 인증서를 검증하여 유효기간이 만료되지 않았는지, 신뢰할 수 있는 인증 기관에서 발급되었는지, 인증서가 해당 서버에게 발급된 인증서가 맞는지 등을 확인하여 서버를 신뢰할 수 있다고 판단하면 다음 단계로 넘어간다. 클라이언트는 임의의 pre-master secret을 생성한 뒤, 서버가 보낸 인증서에 포함된 공개키를 사용해 암호화한다. 이렇게 암호화된 pre-master-secret을 ClientKeyExchange 메시지에 포함하여 서버에 전송한다. 해당 서버는 서버에 있는 개인키를 통해 복호화를 하여 클라이언트의 세션키를 확보하고, 클라이언트가 준 cipherspec에서 서버가 허용하는 cipherspec을 클라이언트에게 전달한다. 서버는 전송받은 정보를 복호화하여 pre-master-secret을 알아내고, 이 정보를 사용하여 master secret을 생성한다. master secret에서 세션키를 생성하는데, 이 세션키는 앞으로 서버와 클라이언트 간의 통신을 암호화하는 데 사용한다. 클라이언트 역시 자신이 만들어낸 pre-master secret을 알고 있으므로, 같은 과정을 거쳐 세션키를 스스로 만들 수 있다. 서버와 클라이언트는 동일한 세션키를 가지게 되어 이 세션키를 가지고 상호 암호화, 복호화를 수행한다. 서버와 클라이언트는 각자 동일한 세션키를 갖고 있고, 이를 사용하여 대칭 키 암호를 사용하는 통신을 할 수 있다. 따라서 우선 서로에게 ChangeCipherSpec 메시지를 보내서 앞으로의 모든 통신 내용은 세션키를 사용하여 암호화해서 보낼 것을 알려준 뒤, Finished 메시지를 보내 각자의 핸드쉐이크 과정이 끝났음을 알린다.[2]

비교

개발하는 서비스 중에서 인터넷의 연결이 필요 없는 서비스는 거의 없다. 이런 서비스는 만든 앱 혹은 웹을 통해 데이터를 받아 서버에 저장한다. 이 데이터에는 굉장히 민감한 정보인 카드 번호, 주소, 심지어 집 거실에 있는 공유기의 맥(MAC) 주소까지 포함되어 있는데 이 정보들이 데이터화되어 전송된다. 중간에 데이터가 조작되거나 변조되지 않도록 암호화하여 데이터를 보내야 한다. 이런 정보를 보내기 위해 HTTP보다는 HTTPS를 사용해야 한다. HTTPS의 안정성은 TLS 프로토콜을 통해 보장된다. HTTPS는 보안용 프로토콜에 HTTP를 얹어서 보안 된 HTTP 통신을 하는 프로토콜이고, SSL과 TLS는 보안 통신을 하기 위한 보안용 프로토콜이다.[4][5] SSL과 TLS는 본질적으로 같고, 버전이 다른 정도라고 생각하면 된다. 클라이언트가 사용할 인증서가 없으면, TLS 프로토콜의 경우는 "인증서 없음" 메시지를 보내고, SSL 프로토콜의 경우는 별도의 메시지가 필요 없다. TLS는 주로 맥(MAC)을 적용하지만 SSL은 MD5와 SHA를 사용한다. H-MAC을 사용하면 해시 함수를 아무거나 사용할 수 있다는 장점이 있다. TLS 키를 만들 때 H-MAC 스탠다드와 PRF를 사용한다. 반면 SSL은 RSA Diffie-Hellman, Fortezza/DMS를 사용한다. TLS에서 인증서 확인 메시지는 이미 세션에서 교환된 핸드셰이크 메시지에 들어있다. 반면에 SSL은 따로 보내줘야 한다. TLS에서 Finished 메시지는 PRF를 통해 "Client Finished", "Server Finished"가 같이 생성되는데, SSL에서는 키가 생성되었던 방식과 같은 방법으로 Finished 메시지가 생성된다.[6]

각주

  1. 1.0 1.1 전송 계층 보안(TLS)〉, 《MDN Web Docs》
  2. 2.0 2.1 와스프로 GodNR, 〈(ETC) SSL vs TLS 차이점 및 확인방안〉, 《티스토리》, 2018-06-18
  3. SSL(TLS)란?〉, 《티스토리》, 2017-04-13
  4. 4.0 4.1 장구리, 〈HTTPS와 SSL/TLS의 뜻과 차이〉, 《네이버 블로그》, 2019-08-28
  5. 오세용 기자, 〈(마소 394호) 알아두면 쓸데없는 신비한 TLS 1.3〉, 《아이티조선》, 2018-10-25
  6. RoaZium, 〈https://roazium.tistory.com/66 (정보) SSL과 TLS 차이]〉, 《티스토리》, 2018-06-28

참고자료

같이 보기


  검수요청.png검수요청.png 이 TLS 문서는 인터넷에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.