TLS 통신이 이루어지는 과정과 그에 사용되는 주요 개념들을 상세하게 정리해보려 한다
1. TLS란 무엇인가
TLS는 네트워크 통신에서 데이터의 기밀성, 무결성, 그리고 인증을 보장하기 위한 암호화 프로토콜이다. 웹 브라우징(HTTPS), 이메일 전송, 데이터베이스 연결 등 다양한 분야에서 정말 널리널리 사용된다.
2. TLS 통신 과정 상세 분석
TLS 통신은 크게 핸드셰이크 단계와 데이터 전송 단계로 나눌 수 있다.
2.1. 핸드셰이크 단계
2.1.1. 클라이언트 헬로(Client Hello)
- 클라이언트가 서버에 연결을 시도하며 ClientHello 메시지를 보낸다.
- 이 메시지에는 다음 정보가 포함된다:
- 지원하는 TLS 버전 목록
- 지원하는 암호 스위트(cipher suite) 목록
- 임의의 난수 값(클라이언트 랜덤)
- 기타 확장 정보 (예: SNI(Server Name Indication), ALPN 등)
2.1.2. 서버 헬로(Server Hello)
- 서버는 ServerHello 메시지로 응답한다.
- 메시지 내용:
- 선택된 TLS 버전
- 선택된 암호 스위트
- 임의의 난수 값(서버 랜덤)
- 디지털 인증서를 클라이언트에 전송한다.
- 인증서에는 서버의 공개키와 인증 기관(CA)의 서명이 포함된다.
- 필요한 경우 서버 키 교환 메시지와 요청 메시지(클라이언트 인증이 필요한 경우)를 추가로 보낸다.
2.1.3. 서버 인증서 검증
- 클라이언트는 서버의 인증서를 검증한다.
- 신뢰할 수 있는 CA에 의해 서명되었는지 확인한다.
- 인증서의 유효 기간을 확인한다.
- 인증서의 도메인 이름과 접속하려는 도메인 이름이 일치하는지 확인한다.
2.1.4. 키 교환 및 세션 키 생성
- 프리마스터 시크릿(Pre-Master Secret) 생성:
- 클라이언트는 임의의 프리마스터 시크릿을 생성한다.
- 서버의 공개키로 암호화하여 서버에 전송한다.
- 서버는 자신의 개인키로 프리마스터 시크릿을 복호화한다.
- 마스터 시크릿(Master Secret) 생성:
- 클라이언트와 서버는 클라이언트 랜덤, 서버 랜덤, 프리마스터 시크릿을 사용하여 동일한 마스터 시크릿을 생성한다.
- 세션 키(Session Key) 생성:
- 마스터 시크릿을 기반으로 실제 데이터 암호화에 사용될 세션 키를 생성한다.
2.1.5. Change Cipher Spec 및 핸드셰이크 완료
- ChangeCipherSpec 메시지 교환:
- 클라이언트와 서버는 이후 통신에서 세션 키를 사용하겠다는 의사를 표시한다.
- Finished 메시지 교환:
- 지금까지의 핸드셰이크 메시지에 대한 검증 값을 포함하며, 세션 키로 암호화된다.
- 이를 통해 핸드셰이크 과정이 정상적으로 완료되었음을 서로 확인한다.
2.2. 데이터 전송 단계
- 핸드셰이크가 완료되면, 클라이언트와 서버는 생성된 세션 키를 사용하여 애플리케이션 데이터를 암호화하여 주고받는다.
- 데이터는 기밀성과 무결성이 보장된다.
3. TLS에서 사용되는 핵심 개념들
3.1. 대칭키 암호화와 비대칭키 암호화
- 대칭키 암호화:
- 동일한 키로 데이터의 암호화와 복호화를 수행한다.
- 속도가 빠르지만 키의 안전한 교환이 필요하다. 아무튼 속도가 빨라서 대용량에 적합하다
- 비대칭키 암호화:
- 공개키와 개인키의 쌍을 사용하여 암호화와 복호화를 수행한다.
- 공개 키로 암호화된 데이터는 오직 대응하는 개인 키로만 복호화할 수 있다. 개인키로 암호화된 데이터는 오직 대응하는 공개키로 복호화할 수 있다.
- 키 교환 시에 안전하지만 연산 속도가 느려서 대용량에는 적합하지 않다
- TLS에서는 키 교환 단계에서 비대칭키 암호화를 사용하고, 실제 데이터 암호화 단계에서는 대칭키 암호화를 사용한다.
3.2. 디지털 인증서와 인증 기관(CA)
- 디지털 인증서:
- 공개키와 소유자 정보를 포함하며, CA의 전자 서명이 추가된 문서이다.
- 인증 기관(CA):
- 인증서를 발급하고 서명하는 신뢰할 수 있는 기관이다.
- 클라이언트는 CA의 공개키를 이용하여 서버 인증서의 유효성을 검증한다.
3.3. 해시 함수와 메시지 인증 코드(MAC)
- 해시 함수:
- 임의의 길이의 데이터를 고정된 길이의 값으로 매핑하는 함수.
- 데이터의 무결성 검증에 사용된다.
- 메시지 인증 코드(MAC):
- 해시 함수와 대칭키를 결합하여 데이터의 무결성과 인증을 제공한다.
- TLS에서는 MAC를 사용하여 데이터의 변조 여부를 확인한다.
3.4. 디지털 서명
- 디지털 서명은 전자 문서에 대한 작성자의 신원을 증명하고, 문서의 무결성을 확인할 수 있게 해준다.
- 비대칭키 암호화 방식을 활용하여 서명을 생성하고 검증한다.
- TLS에서는 서버 인증서의 검증 과정에서 디지털 서명을 사용한다.
3.5. 난수와 시드
- 클라이언트 랜덤과 서버 랜덤은 세션 키 생성에 사용되는 난수이다.
- 난수의 품질은 암호화의 강도에 직접적인 영향을 미친다.
4. TLS의 보안 기능
4.1. 기밀성(Confidentiality)
- 세션 키를 사용하여 데이터를 암호화함으로써 도청으로부터 보호한다.
4.2. 무결성(Integrity)
- MAC를 사용하여 데이터가 전송 중에 변조되지 않았음을 확인한다.
4.3. 인증(Authentication)
- 디지털 인증서와 서명을 통해 서버의 신원을 검증한다.
- 필요에 따라 클라이언트 인증을 추가로 수행할 수 있다.
4.4. 상호 인증(Mutual Authentication)
- 클라이언트와 서버가 서로의 신원을 확인하는 기능이다.
- 금융 거래 등 높은 수준의 보안이 필요한 환경에서 사용된다.
5. TLS의 발전과 최신 버전
5.1. TLS 1.2
- 오랜 기간 표준으로 사용되었던 버전으로, 다양한 암호 스위트를 지원한다.
5.2. TLS 1.3
- 보안성과 성능을 개선한 최신 버전이다.
- 핸드셰이크 과정이 단축되어 연결 성능이 향상되었다.
- 안전하지 않은 암호 스위트와 기능들이 제거되었다.