CS/네트워크

HTTPS와 TLS Handshake(TLS 1.3v과 이전 버전의 차이)

개발자 May 2024. 8. 5.

HTTPS

HTTPS는 애플리케이션 - 전송 계층 사이에 보안 계층인 SSL/TLS 계층을 넣은 ‘신뢰할 수 있는’ HTTP 통신을 얘기합니다. 이를 통해 ‘통신을 암호화’합니다.

SSL/TLS는 보안 세션을 기반으로 데이터를 암호화하며, 보안 세션이 만들어질 때 인증 메커니즘, 키 교환 암호화 알고리즘, 해싱 알고리즘이 사용됩니다.

보안 세션

보안 세션이란 보안이 시작되고 끝나는 동안 유지되는 세션을 말하고, SSL/TLS는 핸드셰이크를 통해 보안 세션을 생성하고 이를 기반으로 상태 정보 등을 공유합니다.

TLS 핸드셰이크

TLS 핸드셰이크의 정확한 단계는 사용되는 키 교환 알고리즘의 종류와, 양측에서 지원하는 암호 모음에 따라서 달라집니다. 이번 글에서는 TLS 1.3v과 그 이전 버전(RSA) 두 가지로 나누어 설명해보겠습니다.

TLS 1.2 및 이전 버전: RSA 키 교환 방식

RSA Handshake 과정

핸드셰이크 과정

  1. 클라이언트 헬로 (Client Hello):
    • 클라이언트가 서버로 Client Hello 메시지를 전송합니다.
    • 이 메시지에는 지원하는 TLS 버전, 암호 스위트 목록, 클라이언트 랜덤 값 등이 포함됩니다.
  2. 서버 헬로 (Server Hello):
    • 서버가 Server Hello 메시지로 응답하여, 선택한 암호 스위트와 서버 랜덤 값, SSL 인증서 등을 클라이언트에 전송합니다.
  3. 클라이언트의 예비 마스터 시크릿 전송:
    • 클라이언트는 서버의 공개 키를 사용하여 암호화된 예비 마스터 시크릿(Pre-Master Secret)을 서버에 전송합니다.
  4. 서버의 예비 마스터 시크릿 복호화:
    • 서버는 자신의 개인 키로 예비 마스터 시크릿을 복호화합니다.
  5. 마스터 시크릿 생성:
    • 클라이언트와 서버는 다음을 사용하여 마스터 시크릿을 생성합니다:
      • 예비 마스터 시크릿
      • 클라이언트 랜덤
      • 서버 랜덤
  6. 세션 키 생성:
    • 마스터 시크릿을 사용하여 세션 키를 생성합니다. 이 키는 데이터 암호화 및 무결성을 보호하는 데 사용됩니다.
  7. 클라이언트와 서버의 Finished 메시지:
    • 클라이언트와 서버는 세션 키로 암호화된 Finished 메시지를 주고받아 핸드셰이크를 완료합니다.

마스터 시크릿의 정의

  • 마스터 시크릿 (TLS 1.2 이하):
    • Pre-Master Secret, Client Random, Server Random을 기반으로 PRF(Pseudo-Random Function)를 사용하여 생성된 값입니다.
    • 마스터 시크릿은 세션 키 파생의 핵심 역할을 하며, 클라이언트와 서버 간의 데이터 암호화에 사용됩니다.

TLS 1.3: ECDHE 키 교환 방식

ECDHE Handshake 과정

핸드셰이크 과정

  1. 클라이언트 헬로 (Client Hello):
    • 클라이언트는 Client Hello 메시지를 서버에 전송하여 핸드셰이크를 시작합니다.
    • 이 메시지에는 지원하는 TLS 버전, 암호 스위트 목록, 클라이언트 랜덤 값, 그리고 임시 공개 키(ECDHE 파라미터)가 포함됩니다.
  2. 서버 헬로 (Server Hello):
    • 서버는 Server Hello 메시지를 통해 선택한 암호 스위트, 서버 랜덤 값, 서버의 임시 공개 키를 전송합니다.
  3. 공유 비밀 (Shared Secret) 생성:
    • 클라이언트와 서버는 교환한 임시 공개 키를 사용하여 동일한 공유 비밀(Shared Secret)을 생성합니다.
  4. 핸드셰이크 트래픽 키 생성:
    • HKDF(Hashed Key Derivation Function)를 사용하여 공유 비밀과 랜덤 값을 입력으로 하여 핸드셰이크 트래픽 키를 파생합니다.
  5. 서버 인증서 및 증명:
    • 서버는 Certificate 메시지를 통해 인증서를 전송하고, Certificate Verify 메시지를 통해 서명을 전송하여 신원을 증명합니다.
    • 이 메시지들은 핸드셰이크 트래픽 키로 암호화되어 전송됩니다.
  6. Finished 메시지 전송:
    • 서버는 Finished 메시지를 전송하여 서버 측의 핸드셰이크를 완료합니다.
    • 클라이언트는 서버의 메시지를 검증하고 자신의 Finished 메시지를 전송하여 핸드셰이크를 마무리합니다.
  7. 애플리케이션 트래픽 키 생성:
    • 핸드셰이크가 완료된 후, 애플리케이션 트래픽 키를 생성하여 데이터 암호화에 사용합니다.

마스터 시크릿의 정의

  • 마스터 시크릿 (TLS 1.3):
    • TLS 1.3에서는 전통적인 마스터 시크릿의 개념이 없으며, 대신 ECDHE 기반의 공유 비밀(Shared Secret)을 사용하여 직접 세션 키를 파생합니다.
    • HKDF를 통해 공유 비밀로부터 트래픽 키를 생성하여 보안성과 성능을 강화합니다.



요약

  • TLS 1.2 이하 RSA:
    • RSA 키 교환을 통해 예비 마스터 시크릿을 전송하고, 이를 기반으로 마스터 시크릿을 생성하여 세션 키를 파생합니다.
    • Finished 메시지를 포함한 모든 데이터는 세션 키로 암호화됩니다.
  • TLS 1.3:
    • ECDHE 키 교환을 통해 임시 공개 키를 교환하여 공유 비밀을 생성하고, 이를 기반으로 핸드셰이크 트래픽 키와 애플리케이션 트래픽 키를 파생합니다.
    • 핸드셰이크와 애플리케이션 데이터 암호화에 각각 다른 키를 사용하여 보안을 강화합니다.

참고

CLOUDFLARE - TLS 핸드셰이크의 원리는 무엇일까요? | SSL 핸드셰이크

도서 - 면접을 위한 CS 전공 지식 노트(주홍철 지음) - HTTP

댓글