HTTPS에 대해 그려달라고 해보았습니다. 출처: ChatGPT4o

 

인터넷은 우리의 일상에서 필수적인 도구가 되었으며, 이를 통해 우리는 다양한 정보와 서비스를 이용합니다. 그러나 인터넷을 통해 주고받는 정보가 안전하지 않다면, 우리의 개인정보와 중요한 데이터가 쉽게 노출될 수 있습니다. 때문에 오늘날에는 거의 모든 인터넷 연결은 HTTPS로 이루어집니다. HTTPS는 HTTP의 보안(Sercure) 버전으로 신뢰할 수 있고 안전한 연결을 보장하는 방법입니다. 그런데 HTTPS는 어떻게 안전한 연결을 보장할 수 있을까요?

HTTP(HyperText Transfer Protocol)

HTTP는 웹 브라우저와 웹 서버 간의 데이터 전송을 위한 프로토콜입니다. 웹 브라우저와 웹 서버 간의 통신을 담당하며, 인터넷상의 다양한 리소스(웹 페이지, 이미지, 동영상 등)를 전송하는 데 사용됩니다. HTTP는 클라이언트-서버 모델을 기반으로 작동합니다. 클라이언트는 웹 브라우저와 같은 사용자의 요청을 보내는 쪽이고, 서버는 웹 페이지와 같은 리소스를 제공하는 쪽입니다. 클라이언트는 서버에 요청(request)을 보내고, 서버는 이에 대한 응답(response)을 반환합니다.

 

HTTP에서 클라이언트와 서버는 요청과 응답을 주고 받은 뒤 연결을 종료합니다. 각각의 요청은 독립적으로 이루어지며 이를 비연결성이라고 합니다. 또한 각 요청을 독립적으로 처리하기 때문에 이전 요청의 상태를 유지하지 않습니다. 그래서 로그인을 한 뒤에도 토큰 등의 클라이언트 정보를 계속해서 서버로 보내야 합니다.

 

슬프게도 인터넷 환경에서는 전송중인 데이터를 누군가가 가로챌 수 있습니다. 그리고 HTTP 요청에는 클라이언트에 대한 민감한 정보가 담겨 있을 수 있기 때문에 이러한 정보들을 보호할 필요가 있습니다. 그래서 등장한 것이 HTTPS(HyperText Transfer Protocol Secure)입니다. HTTPS는 HTTP의 보안 버전으로 요청과 응답에 포함되는 모든 데이터들을 암호화하여 전송하는 프로토콜입니다.

암호화

HTTPS가 데이터를 암호화하는 과정을 이해하기 위해서는 먼저 대칭키와 비대칭키에 관하여 간단하게 알아볼 필요가 있습니다. 대칭키와 비대칭키 모두에서 말하는 '키'는 암호화된 데이터인 암호문을 원본 상태(평문)로 복호화하는 데 사용되는 암호 해제(복호화) 방법을 의미합니다.

대칭키 암호화와 비대칭키 암호화를 정리해서 그려달라고 하였습니다. 출처: ChatGPT4o

대칭키 암호화

대칭키 암호화는 암호화와 복호화에 동일한 키를 사용하는 방식입니다. 하나의 키로 암호문을 평문으로, 평문을 암호문으로 변환할 수 있습니다. 대칭키 암호화는 비대칭키를 사용하는 암호화보다 훨씬 빠르다는 장점이 있습니다. 가장 많이 사용하는 대칭키 암호화 방식은 AES-128입니다.

 

대칭키 암호화에서는 암호화와 복호화에 사용되는 키가 동일하기 때문에 네트워크 통신에서 사용하기 위해 서버와 클라이언트 모두가 같은 키를 알아야 합니다. 그리고 이 키를 서로에게 처음 보내줄 때는 복호화를 할 방법이 없기 때문에 만약 대칭키를 통해 암호화를 하려면 키를 평문인 상태로 보내야 하는데, 인터넷 세상에서는 데이터가 하이재킹될 수 있기 때문에 대칭키를 인터넷을 통해 전송하는 행위는 아주 위험합니다.

비대칭키 암호화

비대칭키 암호화는 두 개의 서로 다른 키를 사용하는 방식입니다. 두 개의 키는 서로 반대의 역할을 하게 됩니다. 공개 키(Public Key)로 암호화된 데이터는 비밀 키(Private Key)로만 복호화할 수 있으며, 반대로 비밀 키로 암호화된 데이터는 공개 키로만 복호화할 수 있습니다. 서버는 공개 키를 클라이언트가 사용할 수 있도록 보내주고 클라이언트가 공개키를 기반으로 암호화할 수 있도록합니다. 이를 PKI(Public Key Infrastructurem, 공개키 기반 구조)라고 합니다.

 

비대칭 키를 사용한다면  클라이언트와 서버에서는 각각 자신의 비대칭키 쌍을 생성합니다. 그리고 각자의 공개키를 서로에게 보냅니다(이 과정은 IKE, Internet Key Exchange라고도 불립니다). 통신을 할 때는 상대방의 공개키를 사용하여 암호화하여 데이터를 보내고 각자의 비밀키를 사용하여 데이터를 복호화합니다.

디지털 서명

디지털 서명이란 네트워크에서 송신자의 신원을 증명하고 데이터의 무결성을 확인하는 방법입니다. 이는 PKI(Public Key Infrastructure)를 통해 이루어질 수 있습니다. 디지털 서명은 전송된 데이터가 송신자로부터 온 것이며, 전송 중에 변조되지 않았음을 보장합니다.

송신자는 원본 데이터를 해시 함수(Hash Function)를 사용하여 요약된 데이터(해시 값)를 생성합니다. 해시 함수는 입력 데이터를 고정된 길이의 해시 값으로 변환하는 알고리즘으로, 데이터의 고유한 지문 역할을 합니다. 생성된 해시 값은 송신자의 개인 키(Private Key)로 암호화되어 디지털 서명을 만듭니다. 이 디지털 서명은 원본 데이터와 함께 수신자에게 전송됩니다.

수신자는 먼저 송신자로부터 받은 디지털 서명을 송신자의 공개 키(Public Key)를 사용하여 복호화합니다. 복호화된 값은 송신자가 원본 데이터를 해시하여 생성한 해시 값이 됩니다. 수신자는 수신한 원본 데이터를 동일한 해시 함수를 사용하여 다시 해시 값을 생성합니다. 그런 다음, 수신자는 복호화된 해시 값과 자신이 생성한 해시 값을 비교합니다. 두 값이 일치하면, 이는 데이터가 전송 중에 변경되지 않았고, 송신자가 데이터를 보낸 것이 맞음을 증명합니다.

 

PKI를 통해 데이터는 훨씬 더 안전해졌지만 모든 면에서 완벽하지는 않습니다. 비대칭 키는 키 생성과 암호화에 더 많은 연산이 들어가기 때문에 대칭키 암호화보다 느립니다. 복호화의 경우도 마찬가지입니다. 그래서 효율을 위해 대칭키 방식과 함께 사용합니다.

대칭키와 비대칭 키의 혼합

서버에서는 키생성으로 인한 지연을 줄이기 위해 미리 비대칭키의 쌍을 생성해둡니다. 클라이언트는 서버에 접속을 하는 순간 대칭키를 생성합니다. 그리고 서버가 공개키를 클라이언트에 전송합니다. 클라이언트는 서버로부터 받은 공개키를 사용해 본인의 대칭키를 암호화하여 서버로 보내줍니다. 그러면 클라이언트의 대칭키가 안전하게 서버로 전송됩니다. 이후 서버와 클라이언트는 대칭키를 이용해 데이터를 암호화 및 복호화합니다.

 

하지만 여기서도 취약점이 존재합니다. 만약 서버가 보내는 공개키가 누군가에 의해 위조 또는 변조된 뒤 클라이언트에 전달되면 클라이언트는 공격자에 의해 위/변조된 키로 데이터를 암호화하여 공격자가 복호화할 수 있게 됩니다. 이러한 공격 방식은 MITM(Man-In-The-Middle Attack) 공격이라고 부릅니다. 간단하게 설명하자면 송신자와 수신자가 주고받는 인증 정보를 탈취하여, 두 당사자 간의 세션을 가로채고 통신을 모방하는 공격 방법입니다. 세션을 가로챈 뒤 원래의 인증정보로 암호화하여 수신자에게 데이터를 다시 보내기 때문에 공격을 받고 있다는 사실을 알아채기조차 힘듭니다. 이런 공격을 막기 위해 서버의 공개키를 인증서 형태로 만들어 신뢰할 수 있는 공개키를 따로 저장합니다.

인증서

PKI기반 인증서를 그려달라고 하였습니다. 출처: ChatGPT4o


인증서는 웹 사이트와 사용자 간의 안전한 통신을 보장하는 방법으로 인증 기관(CA)과 등록 기관(RA)을 통해 발급 및 검증됩니다. CA는 해당 기관이 발행한 비대칭키의 쌍으로 암호화된 해시값들을 공개된 DB에 등록합니다. 그리고 해시값을 복호화하기 위한 공개키는 운영 체제에 미리 설치되어 있습니다. 클라이언트는 각 서버에게 받은 SSL 인증서를 CA의 공개키를 통해 복호화 한 뒤 CA의 공개된 DB에서 올바른 인증서인지 검증합니다. 인증서가 CA에 등록된 경우, 브라우저는 이를 신뢰할 수 있는 인증서로 간주하며 안전한 통신을 할 수 있게 됩니다. 만약 CA에 등록되지 않은 인증서라면 신뢰할 수 없는 인증서로 취급하게 됩니다.

참고 자료

Google Cloud, 암호화란 무엇인가요?
AWS, 암호화란 무엇인가요?
위키백과 공개 키 기반 구조
NordVPN, PKI란? PKI 뜻과 작동 방식

IBM. SSL/TLS의 디지털 서명

MDN, 인증 기관 (Certificate authority)

 

+ Recent posts