TLS-Handshake (SSL-Handshake) feat.비밀키, 공개키

Seongkeun·2022년 10월 5일
3

Network

목록 보기
3/3
post-thumbnail

목차

  1. SSL/TLS 가 뭐야 ?
  2. SSL/TLS 는 OSI 의 어느 Layer 에서 돌아가니?
  3. Handshakes
    3-1. 3-way handshake / 4-way handshake
    3-2 TLS handshake

SSL/TLS 가 뭐야 ?

SSL(Secure Sockets Layer)보안 프로토콜로서, 개인정보 보호, 인증, 무결성 을 인터넷 통신에 제공한다. SSL 이란 명칭은 TLS(Transport Layer Security)로 발전했다. SSL/TLS 를 사용하는 웹사이트의 URL에는 "HTTP" 대신 "HTTPS" 가 있다.

SSL 이 발전되어 TLS 이라는 용어로 변경되었지만 SSL 의 인지도가 크기 때문에 현재까지 TLSSSL 로 부르며 사용한다고 한다. 소유권 변경을 위해 TLS 라는 이름으로 변경 되었을 뿐 SSL 의 최종 버전(3.0) 과 TLS 첫 버전의 차이는 크지 않다.

이 글에서 SSL/TLS 의 용어 선택은 TLS 로 하겠다

Http vs Https Http vs Https ( 참고 : cloudflare )

> 목차로 돌아가기


TLS 는 OSI 의 어느 Layer 에서 돌아가니?

TLSHTTPS 의 보안을 위한 프로토콜이다. 확실한 것은 TLSTransportApplication 사이에서 동작한다는 것이다. 하지만 이 부분에 대해서는 말이 많다. "PresentationEncryption 을 맡고있기에 Presentaion Layer 에 속한다.", "아니다, Session 영역에 속한다. OSI model 은 그저 Guide line 일 뿐 엄청 과학적인 분야는 아니다.", "OSI model 의 어느 계층에서 속하는 것이 아니라 독립적인 것이다." 이 외에도 여러가지 말이 있다.

위에도 언급 했지만 어쨌든 TLSTransportApplication 사이에서 동작한다.

> 목차로 돌아가기


Handshakes

HandshakeClientServer 간의 대화를 뜻한다. 연결적 요소 인 셈이다. TCP 에서 Server 와 연결할 때의 3-way handshake, 해제할 때의 4-way handshake 가 있다.

그 위 계층에서는 ServerSSL 인증서, 공개키, Client비밀키 를 교환하는 TLS Handshake 가 있다. TLS Handshake 는 암호화를 하는 일련의 과정.


3-way handshake / 4-way handshake

Transport Layer 에 있는 프로토콜인 TCP신뢰성 기반이라 UDP 와는 다르게 연결지향(Connection-Oriented) 프로토콜이다. TCP 의 데이터 전송 단위는 패킷 이다.

TCPClientServer 사이에서 3-way handshake 방식으로 연결하며 4-way handshake 방식으로 해제를 한다.

  • 3-wayhandshake 방식

    Client : 서버야 우리 통신 하자 (통신요청) SYN
    Server : 그래, 요청 잘 받았어 ACK
    Server : 준비는 됐어? 통신하자 SYN
    Client : 그래 너도 통신하자고 한 요청 잘 받았어 ACK

  • 4-way handshake 방식

    Client : 서버야 이제 통신 끝내자 FIN
    Server : 그래 니가 통신 끝내자는 요청 잘 받았어 ACK
    Server : (어디 뭐 더 보낼 메시지가 있나 확인좀 해보고..) Close_Wait
    Server : 그래 끝내자 FIN
    Client : 그래 너도 끝내자고 응답한 것 잘 받았어 ACK

SYN : Synchronize sequence Numbers 의 약자. 연결 요청 플래그

  • 세션을 연결할 때 보내는 플래그

ACK : Acknowledgment 의 약자. 응답 플래그

  • 패킷을 받았다는 걸 알려주는 패킷
  • 보통 보낸 쪽 시퀀스 번호에 +1을 해서 보냄
  • 보낸 패킷에 대한 성공, 실패를 판단하여 재전송 하거나 다음 패킷을 전송

FIN : 연결종료 플래그

  • 더 이상 전송할 데이터가 없을 때 보내는 플래그
TCP session Establishment and Termination TCP session Establishment and Termination ( 참고 : rfwireless-word )

> 목차로 돌아가기


TLS Handshake

Client : 안녕하세요 ! 안전한 통신을 구축하고 싶습니다. 여기 제 TLS 버전 과 제가 알고있는 여러가지 암호알고리즘 이 있습니다. ClientHello

Server : 네 안녕하세요. 귀하의 암호 알고리즘들과 TLS 버전 을 확인했습니다. 음...귀하가 갖고있는 알고리즘에서 이 알고리즘을 사용하는 것이 좋을 것 같군요 ( Client 가 제시한 알고리즘 중 하나 선택 ) ServerHello
Server : 여기 제가 갖고있는 SSL 인증서제 공개키 를 써서 드리겠습니다.Certificate
Server : ( SSL 인증서에 자신의 공개키가 없을 때 ) 아차 ! 제 공개 키를 깜빡했군요. 여기 제 공개 키 입니다 ( Server 가 Client 에게 직접 공개키 전달 / 만약 SSL 인증서에 자신의 공개 키가 들어있다면 이 구간은 생략한다 ) ServerHello Done (Server Key Exchange)

Client : 여기 내가 갖고있던 CA(인증기관)공개 키 로 Server 가 보내준 SSL 인증서 를 열어봐야겠다( CA 의 공개키로 복호화 가 성공했다면 이 SSL 인증서 는 CA 가 서명한 것이 맞는 셈이다 ). 이제 저와 당신만의 비밀 키 ( 공유 비밀 키 ) 를 생성하고, 이 비밀 키 를 당신이 준 공개키로 암호화 해서 보낼게요 ClientKeyExchange

이제 Server자신의 비밀 키 로 Client 가 보내준 공유 비밀 키를 복호화해서 열어본다. 그 후 Client, Server 서로가 교환할 정보를 모두 교환한 뒤 통신할 준비가 다 되었음을 알리는 ChangeCipherSpec 패킷을 보낸 뒤 Finished 패킷을 보내며 TLS Handshake 를 종료합니다

  • CA(Certificate Authority) : 디지털 인증서를 저장, 서명 및 발급하는 인증기관
  • 암호화를 할 때는 공개 키로 복호화는 자신이 가진 비밀 키로 합니다.
  • Cipher Suite : 암호화의 집합, 위 ClientHello 단계에서 서버에게 자신이 가진 암호화 알고리즘을 알리는 것. 그 암호화 알고리즘이 이 Cipher Suite 이다.

아래 사진은 Client 와 Server 간 TCP 를 거쳐 TLS 까지 Handshake 하는 과정이다.
파란색 부분TCP3-way handshake 주황색 부분TLS-handshake 가 그려져 있다.

TLS Handshake3-way Handshake와 TLS Handshake ( 참고 : cloudflare )

> 목차로 돌아가기

Reference

profile
지혜는 지식에서 비롯된다

0개의 댓글