본문 바로가기

Network

TLS(Transport Layer Security)

TLS(Transport Layer Security) 란

 

TLS(Transport Layer Security)는 온라인 네트워크에서 데이터를 안전하게 주고받기 위한 암호화 프로토콜이다. 통신 데이터를 TLS 프로토콜을 통해 암호화하면 누군가 데이터를 가로채도 복호화 할 수 없기 때문에 악성 공격에서 데이터를 보호할 수 있다.

 

HTTPS는 HTTP 프로토콜 상위에서 TLS 암호화를 구현한 것으로 HTTP 뒤에 붙은 S는 보안(Security)를 뜻한다.

 


 

TLS와 SSL의 차이점

 

SSL(Secure Sockets Layer)은 넷스케이프사에서 1995년에 개발한 HTTP 암호화 프로토콜이다. TLS가 나오기 전까지 널리 쓰였으나 여러 보안 취약점이 발견되며 사용이 중단되어 현재는 TLS로 대체되었다. TLS 라는 프로토콜 명칭이 쓰이기 시작한 건 SSL 3.1 버전이 TLS 1.0으로 이름이 바뀌면서 이다. 현재는 대부분 TLS를 사용하지만 프로토콜 명칭은 SSL과 TLS를 혼용해서 사용한다.

참고로 최신 웹 브라우저는 대부분 SSL을 지원하지 않는다.

 


 

TLS 역할

 

1. 인증

  • 통신하고 있는 서버를 신뢰할 수 있는지 알려준다.
  • CA(Certification Authority - 인증기관)에서 발급받는 인증서로 상대 서버의 서비스 정보, 공개키, 지문, 디지털 서명 등 다양한 정보를 확인할 수 있다.

2. 암호화

  • 대칭 및 비대칭 암호화 조합을 사용해서 안전하게 데이터를 보호한다.
  • 통신을 시작할 때 비대칭키로 안전하게 대칭키를 공유하고, 실제로 통신 과정에서는 대칭키로 데이터를 암호화 및 복호화한다.

3. 무결성

  • 통신 과정에서 데이터가 손실되거나 변조되는 것을 방지한다.

 

TLS 인증서

 

웹 사이트나 응용 프로그램이 TLS를 사용하기 위해서는 서버에 TLS 인증서가 설치되어 있어야 한다. TLS 인증서는 CA(Certification Authority - 인증기관)로부터 발급받을 수 있다. 인증서는 서버의 공개 키와 더불어 누가 도메인 소유자인지에 대한 중요한 정보를 포함하며, 이 두 가지는 모두 서버의 신원을 확인하는 데 중요한 역할을 한다.

 


 

TLS에서 사용하는 암호화 방식

 

TLS는 다음과 같은 암호화 방식을 혼합해서 사용한다. 자세한 사용법은 아래 TLS 핸드셰이크 과정에서 볼 수 있다.

 

1. 대칭키 암호화 방식

  • 암호화와 복호화에 같은 키를 사용
  • 발송자와 수신자 모두가 같은 키를 가져야 하는 단점
  • 대칭키 전달 과정에서 키가 유출되면 매우 위험
  • 속도는 빠른편

2. 공개키(비대칭키) 암호화 방식

  • 암호화화 복호화에 다른 키를 사용
  • A키로 암호화를 하면 B키로 복호화를 할 수 있고, B키로 암호화 하면 A키로 복호화 할 수 있는 방식
  • 인코딩 키 (public key)는 공개되어 있으며 (그래서 공개키 암호방식이라는 이름이 붙었다.) 보통 디지털 인증서안에 포함되어 있다.
  • 디코딩 키는 (secret key)는 호스트만이 개인 디코딩 키를 알고 있다.
  • 공개키와 비공개키의 분리는 메시지의 인코딩은 누구나 할 수 있도록 해주는 동시에, 메시지의 디코딩은 비밀키 소유자에게만 부여한다.
  • 단 속도는 느린편

 

TLS 핸드셰이크

 

TLS 핸드셰이크는 클라이언트와 서버 간에 안전한 통신을 설정하는 과정이다.

TLS 핸드셰이크는 사용자가 HTTPS로 웹사이트를 방문하거나 브라우저가 웹사이트의 서버와 첫 연결을 시도할 때 발생한다. 또한 API 호출이나 HTTPS를 통한 DNS 쿼리 등 HTTPS를 사용하는 다른 통신에서도 TLS 핸드셰이크가 발생한다.

이러한 TLS 핸드셰이크는 TCP 연결이 설정된 후에 시작된다. 쉽게 말해, 보안 연결을 처음 설정할 때마다 TLS 핸드셰이크가 일어난다고 보면 된다..

 

 TLS 핸드셰이크 과정은 다음과 같다.

 

1. Client Hello

  •  클라이언트가 서버로 hello 메시지를 전달하면서 핸드셰이크 개시
  • 이때 클라이언트가 생성한 랜덤 데이터 포함해서 전송

2. Server Hello

  • 클라이언트 hello 메시지에 대한 응답 전송
  • 이때 서버의 TLS 인증서, 서버가 생성한 랜덤 데이터 포함해서 전송  

3. 인증서 확인

  • 클라이언트가 서버의 TLS 인증서를 검증 (CA에서 발급받은 것인지 확인)
  • 인증서가 유효하면 pre master secret(예비 마스터 암호) 생성
  • 이때 pre master secretClient Hello Server Hello때 주고받은 랜덤 데이터를 이용해서 생성

4. pre master secret(예비 마스터 암호) 전송

  • 클라이언트가 TLS 인증서 안에 있는 공개키를 이용하여 pre master secret를 암호화 한 뒤 서버로 전송

5. pre master secret 복호화

  • 서버는 전달받은 pre master secret를 자신의 TLS 인증서 비공개 키로 복호화
  • 여기까지 오면 클라이언트와 서버는 모두 pre master secret을 공유하게 됨

6. master secret 및 session key 생성

  • 서버와 클라이언트는 공유하게 된 pre master secret을 바로 사용하지 않고 일련의 과정을 거쳐 master secret으로 변경함
  • 서버와 클라이언트는 master secret을 이용해 session key (대칭키)를 생성함
  • 서버와 클라이언트 간에 대칭키 기반의 연결이 수립됨

출처 : 
https://wayhome25.github.io/cs/2018/03/11/ssl-https/
https://opentutorials.org/course/228/4894
https://docs.tosspayments.com/resources/glossary/tls
https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/

 

'Network' 카테고리의 다른 글

TCP와 UDP  (0) 2023.12.10
OSI 모델, TCP/IP 모델  (0) 2023.12.09
HTTP 버전별 차이  (1) 2023.09.09