[암호화] TLS(Transport Layer Security)

2022. 9. 30. 18:06TIL💡/Network

TLS는 어떻게 작동합니까?

웹사이트나 응용 프로그램이 TLS를 사용하기 위해서는 원본 서버에 TLS 인증서가 설치되어 있어야 한다.

인증 기관(CA)이 도메인을 소유한 사람 혹은 비즈니스(회사)에게 TLS 인증서를 발행한다.

인증서는 서버의 공개키와 더불어 누가 도메인 소유자인지에 대한 중요한 정보를 포함하여, 이 두 가지는 모두 서버의 신원을 확인하는 데 중요하다.

 

TLS 연결은 TLS Handshake로 알려진 일련의 순서를 사용하여 초기화된다.

TLS Handshake 동안 사용자 장치와 웹 서버는 다음과 같은 일을 수행한다.

- 사용할 TLS 버전 지정

- 사용할 암호 제품군 결정

- 서버의 TLS 인증서를 사용해 서버의 신원 인증

- Handshake가 완료된 후 키 간의 메시지를 암호화하기 위한 세션 키 생성

 

Handshake도 인증을 처리하며, 이는 대개 클라이언트에게 신원을 증명하는 서버로 구성된다. 이는 공개키를 사용하여 수행된다.

공개키는 단방향 암호화를 사용하는 암호화 키로, 공개 키는 단방향 암호화를 사용하는 암호화 키로, 공개 키를 가진 누구나 신뢰성을 보장하기 위해 서버의 개인키로 암호화된 데이터를 해독할 수 있음을 의미하지만 원래 발신자만 개인 키를 사용해 데이터를 암호화할 수 있다. 서버의 공개키는 TLS 인증서의 일부이다.

 

데이터가 암호화되고 인증되고 나면, 메시지 인증 코드(MAC)와 함께 서명된다. 수신자는 데이터의 무결성을 보장하기 위해 MAC을 확인할 수 있다.

 

Client Hello: 클라이언트는 서버에게 지원 가능한(암호, 키교환, 서명, 압축) 방식을 서버에게 알려준다.

Server Hello: 서버는 클라이언트에게 지원 가능한(암호, 키교환, 서명, 압축) 방식을 응답해준다.

Certificate Message: 서버는 공개키(RSA 암호용)가 포함된 서버 인증서를 클라이언트에게 발송한다.

(만약 서버가 클라이언트 인증서를 요구할 때 이에 대한 요청도 함께 발송한다.)

Server Hello Done: 서버의 전송이 끝나면 발송

 

ClientKeyExchange: 클라이언트는 전송받은 서버 인증서에 대해 브라우저에 내장된 신뢰기관으로부터 발급 여부를 확인한다.(이 과정은 유효한지, 해당 서버에서 발급된 인증서인지 확인)

세션키로 사용될 Pre-Master Key(세션키(대칭키))를 랜덤으로 생성하여 공개키로 암호화해 서버로 전송한다.

서버는 자신의 개인키로 클라이언트에게 전송받은 암호화된 Pre-Master Key(세션키(대칭키))를 복호화한다.

서버와 클라이언트는 일련의 과정을 거쳐 다음과 같은 순으로(Pre-Master Key → Master Key → 세션키) 세션키를 획득한다.

또한 세션키를 대칭키 방식으로 사용한다.

 

ChangeCipherSpec:

- 서버는 협상과정에서 전송된 모든 메시지에 대하여(암호, 키교환, 서명, 압축) 방식을 다음부터 적용할 것을 알리는 종결메세지를 발송한 후 데이터 전송 단계로 이동한다.

- 클라이언트는 협상과정에서 전송된 모든 메시지에 대하여 방식을 다음부터 적용할 것을 알리는 종결 메시지를 발송한 후 데이터 전송단계로 이동한다.

이렇게 서로에게 ChangeCipherSpec 메시지를 보내 앞으로 모든 통신 내용은 세션키를 이용해 암호화해 보낼 것을 알려준다.

 

'TIL💡 > Network' 카테고리의 다른 글

[HTTP] HTTP 개념 정리 💡  (0) 2022.10.26
[Network] JWT란  (0) 2022.09.30
[암호화] SSL의 지원하는 기술  (0) 2022.09.30
[암호화] 두 가지 암호화 기술  (0) 2022.09.30
[Network] Ethernet이란?  (0) 2022.09.30