Computer Science

[CS] SSL과 TLS란?

이진유진 2024. 8. 22. 11:20
반응형

1. SSL/TLS 개요

SSL의 등장 배경 

인터넷이 보편화되면서 웹 브라우저와 서버 간의 정보 교환이 증가하게 되었고, 이러한 통신의 보안 문제가 중요하게 대두되었습니다. 처음에는 모든 데이터가 평문(Plain Text)로 전송되었기 때문에 중간에서 누군가가 데이터를 가로채면 쉽게 읽을 수 있었습니다.

이를 해결하기 위해 Netscape가 SSL을 개발하게 되었습니다. 

TLS로의 진화

SSL 3.0 이후에 발생한 여러 가지 취약점으로 인해 SSL 프로토콜의 한계가 드러나기 시작했습니다. 이를 해결하기 위해 SSL의 후속 버전인 TLS가 등장했습니다. TLS는 SSL의 개선된 버전으로, 더 강력한 보안 기능과 다양한 개선사항을 포함하고 있습니다. 

2. SSL/TLS의 필요성

데이터 보안 : SSL/TLS는 데이터 암호화를 통해 인터넷 통신에서 민감한 정보(ex. 로그인 정보, 결제 정보 등)를 보안합니다. 
신뢰성 확보 : SSL/TLS 인증서로 웹사이트의 신원을 검증하여 사용자에게 신뢰를 제공합니다. 
검색 엔진 최적화(SEO)와 HTTPS : 구글 등 주요 검색 엔진은 HTTPS를 사용하는 웹사이트를 선호하기 때문에 SSL/TLS 사용은 SEO 측면에서도 중요합니다. 

SSL/TLS의 보안 원칙

1. 기밀성(Confidentiality)
SSL/TLS는 암호화를 통해 전송되는 데이터의 내용을 보호합니다. 이로 인해 데이터가 전송 중에 가로채여도 복호화되지 않는 이상 내용을 알 수 없습니다. 

2. 무결성(Integrity)
SSL/TLS는 데이터를 송수신하는 동안 중간에 변조되지 않도록 보호합니다. 디지털 서명과 해시 함수를 사용하여 데이터가 손상되거나 변조되었는지 확인할 수 있습니다. 

3. 인증(Authentication)
SSL/TLS는 클라이언트와 서버 간의 신뢰 관계를 구축합니다. 서버는 인증서를 통해 자신의 신원을 증명하여, 클라이언트는 이를 검증하여 신뢰할 수 있는 서버와 통신하고 있음을 확인합니다.

3. SSL/TLS 작동 원리 

핸드셰이크 과정 
클라이언트와 서버 간의 초기 연결 과정에서 암호화 키와 인증서 교환이 이루어집니다. 이 과정에서 클라이언틑는 서버 인증서를 검증하고, 양측은 세션 키를 생성합니다. 

데이터 암호화 
핸드셰이크 이후에는 대칭키 암호화를 통해 실제 데이터가 암호화되어 전송됩니다. TLS 1.3에서는 보안과 성능을 위해 핸드셰이크 과정이 간소화되었습니다. 

인증서
SSL/TLS 인증서는 공인 인증 기관(CA)이 발급하며, 클라이언트는 서버가 제공하는 인증서를 통해 웹사이트의 진위 여부를 확인할 수 있습니다. 

1.핸드셰이크(Handshake) 과정 

핸드셰이크는 클라이언트와 서버 간의 안전한 연결을 설정하는 과정입니다. 

이 과정에서는 대칭키와 비대칭키 암호화가 결합되어 사용됩니다. 

1. 클라이언트 헬로(ClientHello)

클라이언트가 서버에 접속할 때, 클라이언트는 'ClientHello' 메세지를 전송합니다. 이 메시지에는 다음과 같은 정보가 포함되어 있습니다. 

TLS 버전 : 클라이언트가 지원하는 TLS 프로토콜 버전
암호화 스위트 목록 : 클라이언트가 지원하는 암호화 알고리즘의 목록
무작위 데이터(Nonce) : 클라이언트가 생성한 랜덤 데이터로, 나중에 세션 키 생성에 사용됩니다.

2. 서버 헬로(ServerHello)

서버는 ServerHello 메시지로 응답합니다. 이 메시지에는 다음과 같은 정보가 포함됩니다. 

선택된 TLS 버전 : 클라이언트가 제안한 버전 중 서버가 선택한 버전
선택된 암호화 스위트 : 서버가 선택한 암호화 알고리즘
서버에서 생성한 무작위 데이터(Nonce)

3. 서버 인증 및 키 교환(Server Certificate and Key Exchange)

서버는 자신의 SSL/TLS 인증서를 클라이언트에게 전송합니다. 이 인증서에는 서버의 공개 키가 포함되어 있습니다. 

서버는 ServerKeyExchange 메시지를 보내 클라이언트와 공유할 추가 정보를 제공할 수 있습니다. 

4. 클라이언트 인증(Client Certificate Request)

만약 서버가 클라이언트 인증을 요구하는 경우, 서버는 CertificateRequest 메시지를 클라이언트에게 보냅니다. 

5. 클라이언트 인증서 전송(Client Certificate)

클라이언트는 자신의 인증서를 서버에 전송합니다(클라이언트 인증이 요구될 때)

6. 키 교환 및 세션 키 생성

Pre-Master Secret 생성 : 클라이언트는 서버의 공개 키로 암호화된 Pre-Master Secret을 생성하여 서버로 전송합니다. 

세션 키 생성 : 클라이언트와 서버는 Pre-Master Secret , 클라이언트와 서버의 무작위 데이터(Nonce)를 사용하여 세션 키를 생성합니다. 이 과정은 대칭키 암호화에 사용할 키를 생성하는 단계입니다. 

7. 완료 메시지(Finished Messages)

클라이언트와 서버는 세션 키를 사용하여 각각 Finished 메시지를 암호화하여 상대방에게 전송합니다. 이 메시지는 핸드셰이크가 성공적으로 완료되었음을 나타냅니다. 

8. 세션 키를 이용한 암호화된 데이터 전송

핸드셰이크가 완료된 후, 클라이언트와 서버는 생성된 세션 키를 사용하여 대칭키 암호화 방식으로 데이터를 암호화하고 안전하게 통신합니다. 

대칭키와 비대칭키 암호화의 역할 

1. 비대칭키 암호화(Asymmetric Encryption)
역할 : 초기 핸드셰이크 과정에서 안전하게 키를 교환하고, 서버의 신원을 인증하는 데 사용됩니다. 
작동 : 비대칭키 암호화에서는 공개 키와 개인 키 쌍을 사용합니다. 클라이언트는 서버의 공개키를 사용하여 데이터를 암호화하고, 서버는 자신의 개인 키로 이를 복호화합니다. 
예시 : 서버의 인증서에 포함된 공개 키로 클라이언트가 Pre-Master Secret 을 암호화하여 서버로 전송합니다.

2. 대칭키 암호화(Symmetric Encryption)
역할 : 핸드셰이크가 완료된 후, 클라이언트와 서버 간의 실제 데이터 전송을 암호화하는 데 사용됩니다. 대칭키 암호화는 빠르고 효율적입니다. 
작동 : 대칭키 암호화에서는 동일한 키로 데이터를 암호화하고 복호화합니다. 핸드셰이크 과정에서 생성된 세션 키를 사용하여 데이터의 기밀성과 무결성을 보장합니다. 
예시 : 핸드셰이크 후, 클라이언트와 서버는 생성된 세션 키를 사용하여 암호화된 HTTP 데이터를 주고받습니다.
데이터 무결성(Data Integrity)

디지털 서명 및 메시지 인증 코드 (MAC) 

SSL/TLS는 데이터가 전송 중에 변조되지 않았음을 확인하기 위해 디지털 서명과 MAC을 사용합니다. 
이를 통해 데이터가 전달 과정에서 변경되지 않았음을 보장합니다. 

 

 

 

출처

https://babbab2.tistory.com/7

https://run-it.tistory.com/54

https://www.cloudflare.com/ko-kr/learning/ssl/how-does-ssl-work/

https://kanoos-stu.tistory.com/46

https://www.digicert.com/kr/what-is-ssl-tls-and-https

https://brunch.co.kr/@swimjiy/47

 

반응형

'Computer Science' 카테고리의 다른 글

[CS(OS)] Heap과 Stack메모리에 대하여  (0) 2024.08.16