HTTP/2 는 HTTPS위에서 동작한다. HTTPS는 애플리케이션 계층과 계층 사이에 신뢰계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말한다. 이를 통해 통신을 암호화 한다.

SSL(Secure Socket Layer)은 SSL 1.0 부터 시작해서 2.0, 3.0, TLS(Transport Layer Security Protocol)1.0 ~ 1.3까지 버전이 올라가며 마지막으로 TLS로 명칭이 변경 되었으나 보통 합쳐서 SSL/TLS로 부른다.
SSL/TLS는 전송계층에서 보안을 제공하는 프로토콜이다. 클라이언트와 서버가 통신할 때 SSL/TLS를 통해 제 3자가 메시지를 도청하거나 변조하지 못하도록한다.
그림처럼 공격자가 인터셉터하는걸 방지할 수 있다.
SSL/TLS는 보안세션을 기반으로 데이터를 암호화하며 보안 세션이 만들어질 때 인증 메커니즘, 키교환 암호화 알고리즘, 해싱 알고리즘이 사용된다.
보안이 시작되고 끝나는 동안 유지되는 세션. SSL/TLS는 핸드셰이크를 통해 보안 세션을 생성하고 이를 기반으로 상태 정보등을 공유한다.
세션
운영체제가 어떠한 사용자로부터 자신의 자산 이용을 허락하는 일정한 기간.
사용자는 세션동안 응용프로그램, 자원등을 사용할 수 있다.
클라이언트와 서버와 키를 공유하고 이를 기반으로 인증, 인증 확인 등의 작업이 일어나는 단 한 번의 1-RTT가 생긴 후 데이터를 송수신하는 것을 볼 수 있다.
클라이언트에서 사이퍼슈트를 서버에 전달하면 서버는 받은 사이퍼슈트의 암호화 알고리즘 리스트를 제공할 수 있는지 확인한다.
if 제공할 수 있으면 서버에서 클라이언트로 인증서를 보내는 인증 메커니즘이 시작
-> 해싱알고리즘 등으로 암호화된 데이터 송수신 시작
사이퍼 슈트는 프로토콜, AEAD사이퍼모드, 해싱알고리즘등이 나열된 규약을 말한다.
5개가있다.
ex) TLS_AES_128_GCM_SHA256 에는 3개의 규약이 있다.
TLS = 프로토콜
AES_128_GCM = AEAD사이퍼모드
SHA256 = 해싱 알고리즘
CA(Certificate Authorities)에서 발급한 인증서를 기반으로 이루어진다. CA에서 발급한 인증서는 안전한 연결을 시작하는데 있어 필요한 publickey를 클라리언트에 제공하고 사용자가 접속한 서버가 신뢰할 수 있는 서버임을 보장한다.
자신의 사이트 정보와 publickey를 CA에 제출하면 CA가 publickey를 해시한 값인 finger print를 사용하는 CA의 private key 기반으로 CA인증서를 발급한다.
대수곡선 기반의 ECDHE(Elliptic Curve Diffie-Hellman Ephermeral) 또는 모듈식 기반의 DHE(Diffle-Hellman Ephermeral)를 사용한다.
둘 다 디피-헬만 방식 기반으로 만들어졌다.
y = g^x mod p
의 식에서 g 와 x와 p를 안다면 y는 구하기 쉽지만 g와 y와 p만 안다면 x를 구하기는 어렵다는 원리를 기반으로 한 알고리즘이다.
그림처럼 혼합한 후 각자의 비밀키값과 또 혼합. 그 이후 공통의 암호키인 PSK(Pre-Shared Key)가 생성된다.
이런식으로 PSK가 있어야 통과되기 때문에 보안을 유지할 수 있다.
데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 알고리즘.
SSL/TLS는 해싱 알고리즘으로 SHA256과 SHA384알고리즘을 쓰는데 SHA-256를 많이 쓴다.
함수의 결과값이 256비트인 알고리즘. 비트코인같은 블록체인 시스템에서도 쓴다.
SHA-256 알고리즘은 해싱을 해야 할 메시지에 1을 추가하는 등 전처리를 하고 전처리된 메시지를 기반으로 해시를 반환한다.
참고로 TLS 1.3 은 사용자가 이전에 방문산 사이트로 다시 방문한다면 SSL/TLS에서 보안 세션을 만들 때 걸리는 통신을 하지 않아도 된다. 이를 0-RTT라한다.
TCP위에서 돌아가는 HTTP/2와는 달리 HTTP/3은 QUIC이라는 계층 위에서 돌아가며 TCP기반이 아닌 UDP 기반으로 돌아간다.
또한 HTTP/2에서 장점이었던 멀티플렉싱을 가지고 있으며 초기 연결 설정 시 지연시간 감소라는 장점이 있다.
QUIC는 TCP를 사용하지 않기 때문에 통신을 시작할때 3웨이 핸드셰이크가 필요없다.
첫 연결설정에 1-RTT만 소요된다.
QUIC은 순방향 오류 수정 메커니즘(FEC, Forword Error Correction)이 적용되어있다.
이는 전송한 패킷이 손실되었다면 수신 측에서 에러를 검출하고 수정하는 방식이며 열악한 네트워크 환경에서도 낮은 패킷 손실률을 자랑한다.