HTTPS 와 TLS - TLS 핸드쉐이크
Transport Layer Security
Last updated
Transport Layer Security
Last updated
Secure Socket Layer 는 SSL 1.0부터 시작해서 SSL 2.0, SSL3.0, TLS(Transport Layer Security Protocol) 1,0, TLS 1.3 까지 버전이 올라가며 마지막으로 TLS 로 명칭이 변경되었다.
TLS 는 전송 계층에서 보안을 제공하는 프로토콜이다. 클라이언트와 서버가 통신을 할 때, TLS 를 통해 제 3자가 메시지를 도청하거나 변조하지 못하도록 한다.
사용할 TLS 버전을 정하고 사이버슈트, 서버의 공개키, SSL 인증서를 기반으로 인증작업을 수행한다.
이후 대칭 암호화를 위해 세션키를 생성한다.
비대칭암호화 이후 대칭암호화를 사용하는 이유?
비대칭암호화는 연산 처리 비용이 대칭 암호화보다 훨씬 비싸다. 때문에 통신 초기에만 비대칭암호화로 엄격하게 신원 인증을 한 뒤, 그 이후로는 대칭 암호화로 가볍게 사용하는 것이다.
Client hello
TLS 버전, 사이퍼슈트, 클라이언트의 랜덤값(무작위 문자열), 임시 DH 매개변수를 서버에게 보낸다.
ServerHello, ServerCertificates(EncryptedExtensions, Certificate, CertificateVerify)
서버가 클라이언트로부터 받은 정보를 확인한다.
TLS 버전을 식별하여 결정하고, 사이퍼슈트(암호화 리스트) 지원여부를 확인한다.
공개키가 포함된 SSL 인증서, 서버 랜덤값, 임시 DH 매개변수를 보낸다.
클라이언트와 서버는 각각 서로 교환한 DH 매개 변수를 사용하여 임시 암호화 키(세션키)를 생성한다.
Finished
클라이언트와 서버가 세션키를 기반으로 대칭 암호화된 통신을 시작한다. 보안 세션이 시작되었다고도 말할 수 있다.
키를 교환하는 알고리즘으로는 대표적으로 RSA 와 DH 가 있다.
TLS 1.3 버전에서는 RSA 같은 경우, 취약점이 있기 때문에 공식적으로 지원하지 않는다.
DH 의 경우, 타원곡선 DH 를 사용한다.
Diffle-Hellman 알고리즘은 서로 공개값을 공유한 뒤, 각자의 비밀값과 혼합하고, 혼합값을 공유한 뒤, 각자의 비밀갑솨 혼합해서 공통의 암호키를 만드는 알고리즘이다.
DH 는 2가지 종류가 있다. 보통은 ECDHE 를 사용한다.
그냥 디피헬만을 사용하는 DHE,
타원곡선 암호화 방법 + DH = ECDHE
타원곡선 암호화 방법이란 곡선을 사용하여 개인 키 보유자만 알 수 잇는 타원 곡선을 그린다.
이것을 기반으로 교차첨을 생성한다. 이 교차점의 수를 기반으로 암호를 설정하는 방법을 말한다.
프로토콜, AEAD 사이퍼모드, 해싱 알고리즘이 나열된 규약을 말하며, 암호제품군이라고도 불린다. TLS 1.3 버전에는 다섯개가 있다. (취약점이 모두 사라진 최종 5개)
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
TLS_AES_128_CCM_8_SHA256
TLS_AES_128_CCM_SHA256
TLS_AES_256_GCM_SHA384 프로토콜의 경우, 세가지 규약이 들어있는 셈이다.
TLS : 프로토콜
AES_128_GCM : AEAD 사이퍼모드
SHA384 : 해싱 알고리즘
Authenticated Encryption with Associated Data
데이터 암호화 알고리즘이며, AES_128_GCM 등이 있다.
128 비트의 키를 사용하는 표준 블록 암호화 기술과
병렬 계산에 용이한 암호화 알고리즘 GCM 결합된 알고리즘을 뜻한다.
데이터를 추정하기 힘든 더 작고 섞여잇는 조각으로 만드는 알고리즘이다.
SSL/TLS 해싱 알고리즘으로 SHA-256 알고리즘과 SHA-384 알고리즘을 쓰는데, 그 중 많이 쓰는 것은 SHA-256 이다.
해시 함수의 결과값이 256비트인 알고리즘을 말하며 비트코인을 비롯한 많은 블록체인 시스템이서도 쓰인다.
인증서가 올바른 인증서인지 확인할 때, 전자서명을 이용하는데 이때 해싱 알고리즘이 쓰이게 된다.
인증 생성작업 : 전자 서명을 만드는데 서명되는 메시지를 해싱한다.
인증 확인작업 : 메시지를 복호화해서 해시를 서로 비교해 올바른 메시지인지 확인한다.
전자서명 : 송신자가 자신의 신원을 증명하는 절차나 정보를 말한다.
전자서명을 통해 인증서에 적힌 주체가 서비스제공자인지 확인하고 인증서에 기록된 전자서명을 기반으로 CA의 공개키로 복호화해서 지문을 얻고 인증서에 기록된 정보들을 해시 함수에 입력하여 해시를 얻어내서 두 해시의 일치 여부를 확인한다.
두 지문이 일치한다면 인증서 자체가 변조된 적이 없다는 것을 뜻한다. 이를 통해 인증서의 유효성을 검증한다.
인증서가 변조되지 않았고, 인증서가 서비스 제공자의 것임을 확인하는 절차이다.
주체와 공개키를 포함하는 단순한 데이터 파일이다.
주체 : 인증서를 발급한 CA, 도메인, 웹사이트 소유자, 인증서 소유자
공개키 : 공개키, 공개키 암호화 방법
자신의 웹사이트 안에서 SSL 인증서를 만들수도 있지만, 보통은 인증 기관인 CA 에서 발급한 SSL 인증서를 기반으로 인증 작업을 수행한다.
주체는 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지 확인할 때 쓰이고, 공개키는 처음 인증작업을 수행할 때 쓰인다.
클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지를 보장하는 역할을 한다.
이 인증서를 발급하는 기업들을 CA(Certificate Authority) 라고 한다.
참고로 서비스의 도메인, 공개키와 같은 정보는 서비스가 CA 로부터 인증서를 구입할 때 제출해야한다. 인증서는 다양한 유형의 인증서가 있다.
단일 도메인 : 하나의 도메인에 적용되는 인증서
와일드카드 : 도메인 하위 도메인도 포함하는 인증서.
멀티 도메인 : 이름이 의미하는 것처럼 멀티 도메인 SSL 인증서는 관련되지 않은 다수의 도메인에 적용될 수 있는 인증서이다.
클라이언트가 생성한 임시 암호값을 서버로 전송하는데, 이 임시 암호값이 탈취당한 경우, 해킹의 위험이 될 수 있다.
반면 DH 의 경우, 클라이언트와 서버가 서로 교환한 DH 매개변수를 사용해 개인키를 만들게 된다.이 경우, 탈취당해도 공통의 암호키를 못만들기 때문에 더 좋다.
세션키가 만들어지고 난 뒤, 다시 해당 사이트에 방문할 경우, 이전에 만들어진 세션키(PSK, Pre-shared key)를 기반으로 연결을 생성하기 떄문에 인증에 드는 비용이 없다.
즉 인증에 관한 RTT 가 발생하지 않기 때문에 0-RTT 라는 특징을 갖는다.
신용카드 등 민감한 금융정보등을 다루는데 안전하다.
HTTP/2를 구현할 수 있다. HTTPS 위에서만 돌아가기 때문이다.
아래의 사이트에서 등급을 보면 알 수 있다.
wireshark 로 패킷 분석해보기