HTTPS와 TLS(Transport Layer Security) -- TLS 핸드셰이크

carlkim·2023년 11월 2일
0

CS학습 - 네트워크

목록 보기
26/48

HTTPS와 TLS(Transport Layer Security) - TLS 핸드셰이크

SSL(Server Socket Layer)는 SSL 1.0부터 시작해서 SSL 2.0, SSL 3.0, TLS(Transport Layer Security) 1.0, TLS 1.3까지 버전이 올라가며 마지막으로 TLS로 명칭이 변경.
TLS 1.3을 기준으로 설명
TLS는 전송 계층에서 보안을 제공하는 프로토콜이다.
클라이언트와 서버가 통신 할 때 TLS를 통해 제 3자가 메세지를 도청하거나 변조하지 못하게 합니다.

TLS와 SSL 같은 의미 -- SSL이 TLS가 된것.

클라이언트와 서버가 인증이 끝나면
(인증 작업에서 비대칭 암호화)

인증을 기반으로 대칭 암호화를 수행한다.
[비대칭 암호화가 더 방법이 어려워, 한번 비대칭으로 인증하고 다음 단계는 수월하게 대칭 암호화를 한다.]

TLS 핸드셰이크 방식 순서

싸이퍼슈트 : 암호화관련 알고리즘 리스트.

  1. CLIENT HELLO

클라이언트는 TLS 버전 사이퍼슈트와 클라이언트 랜덤값(무작위 문자열), 임시 DH 매개변수를 서버에게 보낸다.

  1. SERVER HELLO, EncryptedExtensions, Certificate, CertificatedVerify.

    2-1 서버는 클라이언트로부터 받는 옵션을 확인한다.
    2-2 서버와 클라이언트 모두에서 지원하는 가장 높은 TLS 버전을 식별하며 결정, 사이퍼슈트 지원 여부를 확인한다.
    2-3 공개키가 포함된 SSL 인증서 서버랜덤값, 임시 DH 매개변수를 보낸다. 그리고 클라이언트와 서버 각각 서로 교환한 DH 매개변수를 사용하여 임시 암호 키(세션키)를 생성한다

  2. Finished
    클라이언트와 서버와 세션키를 기반으로 대칭 암호화된 통신이 시작된다
    (보안세션이 시작되었다고도 말한다)

키교환 알고리즘으로는 대표적으로 RSA와 DH가 있다. RSA같은 경우에는 취약점이 있어 공식적 지원하지 않는다. DH의 경우 타원곡선 DH를 사용한다.

DH 매개변수

기본 원리

DH는 Diffle-Hellman 을 의미.
Diffle-Hellman 알고리즘은 서로 공개값 공유, 비밀값 혼함, 혼합값과 공유, 각자의 비밀값과 혼합해서 공통의 암호키를 만드는 알고리즘.

공개 값 공유와 혼합 값 공유는 동시에 가능.

DH는 그냥 디피헬만을 사용하는 DHE와 타원곡선 암호화 방법과 DH를 섞은 ECDHE가 있고 보통 ECDHE를 쓴다.

타원 곡선 암호화 방법

타원곡선 암호화 방법이란 곡선을 사용하여 개인 키 보유자만 알 수 있는 타원곡선을 그린다.
이걸 기반으로 교차점을 생성.
이 교차점의 수를 기반으로 암호를 설정하는 방법을 말한다.

싸이퍼 슈트

사이퍼 슈트는 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약을 말한다.
암호제품군이라고도 불리운다.
TLS1.3버전에는 다섯 개가 있다.

-- TLS는 프로토콜
-- AES_128_GCM은 AEAD 사이퍼 모드
-- SHA256은 해싱 알고리즘

AEAD 사이퍼모드

AEAD(Authenticated Encryption with Associated Data)는 데이터 암호화 알고리즘이다.
AES_128_GCM 등이 있다. 예를 들어 AES_128_GCM이라는 것은 128비트의 키를 사용하는 표즌 블록 암호화 기술과 병렬 계산에 용이한 암호화 알고리즘 GCM이 결합된 알고리즘을 뜻한다.

해싱 알고리즘

해싱 알고리즘은 데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 알고리즘
SSL/TLS 해싱 알고리즘으로 SHA-256 알고리즘과 SHA-384 알고리즘을 쓰는데, 그 중 많이 쓰는 SHA-256 알고리즘을 설명한다.
SHA-256 알고리즘은 해시 함수의 결괏값이 256비트인 알고리즘이며 비트 코인을 비롯한 많은 블록체인 시스템에서도 쓴다.

해싱 알고리즘은 TLS에서 어떻게 쓰이나

  1. 인증 생성작업 : 전자 서명을 만드는데 서명되는 메세지를 해싱합니다

  2. 인증 확인작업 : 메세지를 복호화해서 해시를 서로 비교해 올발느 메시지인지 확인합니다.

    올바른 전자 서명을 하려면 전자서명을 해야하는데
    전자 서명을 위해서 해싱 알고리즘이 필요하다.

    전자서명 : 송신자가 자신의 신원을 증명하는 절차 또는 정보를 말한다.

    이를테면 네이버에서 다운로드한 프로그램이 악성인지 아닌지 네이버에서 공식적으로 다운로드한 프로그램인지 확인하려면??

    인증서를 해석할 때 전자 서명을 쓰는거다.

프로그램 안에 제작자표시를 할 수 있다
이 제작자표시가 전자서명이다.
쉽게 조작 못하도록 기술적 장치를 기반으로하는데 이게 전자 서명이다.

인증서

인증서는
1. 주체(인증서 발급한 CA, 웹사이트 소유자, 인증서 소유자)
2. 공개키(공개키, 공개키암호화방법)을 포함하는 단순한 데이터 파일이다.

자신의 웹사이트 안에서 SSL 인증서를 만들 수도 있지만 보통 인증기관인 CA에서 발급한 SSL 인증서를 기반으로 인증작업을 수행한다.

주체는 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지 확인할 때 쓰이고 공개키는 처음 인증작업을 수행할 때 쓰인다.

CA

인증서의 역할은 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지 보장하는 역할을 한다. 이 인증서를 발급하는 기업들을 CA(Certificate Authority)라 한다.

인증서 종류
1. 단일 도메인 : 단 하나의 도메인에서만 적용되는 인증서 EX) www.naver.com

  1. 와일드 카드 : 도메인의 하위 도메인도 포함하는 인증서, ex) www.cloudflare.com, blog.cloudflare.com

  2. 멀티 도메인 : 이름이 의미하는 것처럼 멀티 도메인 SSL 인증서는 관련되지 않은 다수의 도메인에 적용될 수 있는 인증서

RSA 보안의 취약점

RSA의 경우 클라이언트가 생성한 임시 암호값을 서버로 전송하지만 DH의 경우 클라이언트와 서버가 서로 교환한 DH 매개변수를 사용해 개인키를 만듭니다.
이 때문에 RSA는 클라이언트에서 생성한 임시 암호값이 탈취당한 경우 해킹의 위험이 있다.
허나 DH의 경우 탈취당해도 공통의 암호키를 못 만들기 때문에 해킹 위험이 적다.

TLS1.3의 장점

0-RTT

세션키가 생성된 이 후 다시 그 사이트에 방문한다면 미리 만들어 놓은 세션키(PSK - pre-shared key)를 기반으로 연결을 생성하기 때문에 이 때 인증에 드는 비용은 없다.
즉, 인증에 관한 RTT가 발생되지 않기 때문에 0-RTT 라는 특징을 갖는다.

네트워크 보안을 왜 하나?

신용카드, 주민등록번호 등 민감한 금융정보를 다루는데 이점이 있고 HTTP/2를 구현할 수 있다.
HTTP/2는 HTTPS 위에서만 돌아간다.

암호화가 안되면 정보가 세어 나가면 해커가 탈취해 내가 손해 볼 수 있으니까.

웹사이트가 SSL을 잘 수행하는가에 대해 어떻게 알수 있을까.?

https://www.ssllabs.com/ssltest/

B레이팅이면 괜찮은 것.

TLS 패킷 분석

https://www.wireshark.org/

profile
가장 나답게 문제해결.

0개의 댓글