철학과 학생의 개발자 도전기

TLS/SSL Handshake 본문

컴퓨터네트워크

TLS/SSL Handshake

Younghun 2023. 12. 14. 17:55

1. TLS/SSL이란

  • SSL(Secure Sockets Layer)은 TLS(Transport Layer Security)의 과거 명칭이다.
  • TLS는 안전한 인터넷 통신을 위한 암호화 및 인증 프로토콜이다.
  • Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다.

2. TLS Handshake

  • TLS Handshake는 TLS 암호화를 사용하는 통신 세션을 실행하는 프로세스이다.
  • TLS Handshake 중에, 통신하는 양측에서는 메시지를 교환하여 서로를 인식하고 검증하며 사용할 암호화 알고리즘을 구성하고 세션 키에 합의한다.
  • 이는 HTTPS 작동 원리의 근간이 된다.

출처: https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/

TLS Handshake 과정

RSA 키 교환 알고리즘

TLS Handshake의 정확한 단계는 사용되는 키 교환 알고리즘의 종류와 양측에서 지원하는 암호 모음에 따라 달라진다.

RSA 키 교환 알고리즘은 지금은 안전하지 않은 것으로 간주되지만, 1.3 이전 버전의 TLS에서 사용되었다.

이 알고리즘은 대략 다음과 같이 진행된다.

  1. '클라이언트 헬로' 메시지: 클라이언트가 서버로 "헬로" 메시지를 전송하면서 핸드셰이크를 개시한다. 이 메시지에는 클라이언트가 지원하는 TLS 버전, 지원되는 암호 제품군, 그리고 "클라이언트 무작위"라고 하는 무작위 바이트 문자열이 포함된다.
  2. '서버 헬로' 메시지: 클라이언트 헬로 메시지에 대한 응답으로 서버가 SSL 인증서, 암호 제품군, 또 다른 무작위 바이트 문자열인 "서버 무작위"를 포함하는 메시지를 전송한다.
  3. 인증: 클라이언트가 서버의 SSL 인증서를 인증서 발행 기관을 통해 검증한다. 이를 통해 서버가 인증서에 명시된 서버인지, 그리고 클라이언트가 상호작용 중인 서버가 실제 해당 도메인의 소유자인지를 확인한다.
  4. 예비 마스터 암호: 클라이언트가 "예비 마스터 암호"라고 하는 무작위 바이트 문자열을 하나 더 전송한다. 예비 마스터 암호는 공개 키로 암호화되어 있으며, 서버가 개인 키로만 해독할 수 있습니다. (클라이언트는 서버의 SSL 인증서를 통해 공개 키를 받습니다.)
  5. 개인 키 사용: 서버가 예비 마스터 암호를 해독한다.
  6. 세션 키 생성: 클라이언트와 서버가 모두 클라이언트 무작위, 서버 무작위, 예비 마스터 암호를 이용해 세션 키를 생성한다. 모두 같은 결과가 나와야 한다.
  7. 클라이언트 준비 완료: 클라이언트가 세션 키로 암호화된 "완료" 메시지를 전송한다.
  8. 서버 준비 완료: 서버가 세션 키로 암호화된 "완료" 메시지를 전송한다.
  9. 안전한 대칭 암호화 성공: 핸드셰이크가 완료되고, 세션 키를 이용해 통신이 계속 진행된다.

임시 Diffie-Hellman 핸드셰이크

모든 TLS 핸드셰이크가 비대칭 암호화(공개 키와 개인 키)를 사용하지만, 세션 키를 생성하는 과정에서 모두가 개인 키를 사용하는 것은 아니다. 예를 들어, 임시 Diffie-Hellman 핸드셰이크는 다음과 같이 진행된다.

  1. 클라이언트 헬로: 클라이언트가 프로토콜 버전, 클라이언트 무작위, 암호 제품군 목록을 포함하는 클라이언트 헬로 메시지를 전송한다.
  2. 서버 헬로: 서버가 SSL 인증서, 선택한 암호 제품군, 서버 무작위를 포함하는 응답을 전송한다. 위에 설명한 RSA 핸드셰이크와 달리, 서버는 이 메시지에 3단계 내용을 포함한다.
  3. 서버의 디지털 서명: 서버에서는 이 시점까지의 모든 메시지에 대한 디지털 서명을 계산한다.
  4. 디지털 서명 확인: 클라이언트는 서버의 디지털 서명을 확인하여 서버가 자칭하는 사람이 맞는지 확인한다.
  5. 클라이언트 DH 매개변수: 클라이언트가 DH 매개변수를 서버로 전송한다.
  6. 클라이언트와 서버가 예비 마스터 암호를 계산: RSA 핸드셰이크의 경우에서처럼 클라이언트가 예비 마스터 암호를 생성하여 서버로 전송하는 대신, 클라이언트와 서버가 서로 교환한 DH 매개변수를 사용하여 일치하는 예비 마스터 암호를 별도로 계산한다.
  7. 세션 키 생성: 이제 클라이언트와 서버가 RSA 핸드셰이크에서와 마찬가지로 예비 마스터 암호, 클라이언트 무작위, 서버 무작위를 사용하여 세션 키를 계산한다.
  8. 클라이언트 준비 완료: RSA 핸드셰이크와 동일
  9. 서버 준비 완료
  10. 안전한 대칭 암호화 성공

*DH 매개변수: DH는 Diffie-Hellman을 의미한다. Diffie-Hellman 알고리즘은 지수 계산을 이용해 동일한 예비 마스터 암호를 생성한다. 서버와 클라이언트가 각자 계산을 위한 매개변수를 제공하고, 각자 서로 다른 계산 결과가 나오지만, 합치면 결과가 동일해진다.

'컴퓨터네트워크' 카테고리의 다른 글

동기/비동기 통신  (0) 2023.12.22
로드 밸런싱  (0) 2023.12.22
HTTP와 HTTPS  (1) 2023.12.07
대칭키와 공개키  (0) 2023.11.30
TCP 흐름 제어/오류 제어/혼잡 제어  (1) 2023.11.30