HyperText Transfer Protocol Secure(HTTPS)는 HTTP의 보안 통신 확장입니다. HTTPS는 Transport Layer Security(TLS)를 기반으로 클라이언트와 서버간의 안전한 통신을 보장하기에 HTTPS over TLS와 같은 표현을 사용하기도 합니다.
대칭 키 암호화, 비대칭 키 암호화
HTTPS와 TLS가 어떻게 동작하는지를 알기 위해서는 우선 대칭 키 암호화와 비대칭 키 암호화에 대해 알아야 합니다.
대칭 키 암호화
대칭 키 암호화, 또는 비밀키 암호화는 Alice와 Bob이 통신을 할 때 동일한 키(비밀키)를 사용해서 암/복호화를 하는 암호화입니다. 이 방식은 비대칭 키 암호화 방식에 비해 성능상 우위를 가지지만 Alice와 Bob이 서로 통신을 하기 이전에 동일한 비밀키를 어떤 식으로든 평문으로 전달해야 한다는 약점이 있습니다. 이를 해소하기 위해 비대칭 키 암호화가 등장합니다.
비대칭 키 암호화
비대칭 키 암호화, 또는 공개 키 암호화는 대칭 키 암호화와는 반대로 암호화 때 사용하는 키와 복호화 때 사용하는 키가 다른 암호화입니다. 비대칭 키 암호화에서는 공개 키와 개인 키 두 개가 하나의 키 쌍을 이룹니다. 공개 키를 사용해 암호화된 비문은 오직 개인 키를 이용해서 복호화 할 수 있고, 역으로 개인 키를 이용해 암호화 된 비문은 오직 공개 키를 통해 복호화 될 수 있는 특징을 가집니다. 이 특징을 이용하면 대칭 키 암호화와는 달리 키를 평문으로 전달하지 않고 암호화된 통신을 할 수 있습니다. 이 방식을 이용한 대표적인 알고리즘이 RSA 암호화입니다.
TLS
TLS의 동작 방식을 요약하면 이렇습니다.
- 비대칭 키 암호화 방식을 통해 하나의 비밀 키를 공유한다.
- 그 비밀 키를 이용해 대칭 키 암호화 방식으로 통신한다.
일반 통신 시 대칭 키 암호화 방식을 사용하는 이유는 상기한 것처럼 비대칭 키 암호화 방식이 성능 상으로 불리한 부분이 많기 때문입니다.
여기서 비대칭 키 암호화 방식을 통해 비밀 키를 공유하는 과정을 좀 더 자세히 살펴보면,
- 서버는 클라이언트에게 신뢰받는 인증 기관(Trusted Certificate Authority)에서 인증받은 전자 인증서를 전송한다.
- 클라이언트는 해당 인증서가 유효한지 검사한다.
- 해당 인증서가 유효하면 클라이언트는 비밀 키를 생성한 뒤 인증서에 포함된 서버의 공개키를 사용해 비밀 키를 암호화 한 후 서버에 전송한다. 이 암호화된 비문은 오직 서버의 개인 키로만 복호화 할 수 있다.
- 서버는 전송받은 비문을 서버의 개인 키를 사용해 복호화 한다.
위 과정을 거치면 클라이언트와 서버가 서로 동일한 비밀 키를 공유하지만 전송 과정에서 평문이 오가지 않았기 때문에 중간자 공격에 당하지 않습니다. 아래는 TLS 핸드쉐이크 과정을 도표로 나타낸 것입니다.
인증 기관
인증 기관(Certificate Authority, CA)은 전자 인증서(Digital Certificate)을 발급하는 기관입니다. 전자 인증서를 발급은 아래와 같이 비대칭 키 암호화 방식을 통해 이뤄집니다.
- 서버가 CA에 전자 인증서 발급을 요청한다. 전자 인증서에는 서버의 공개 키, 개인 키, 그리고 전자 서명이 있다.
- 인증 기관은 해당 서버가 요청자가 실제 소유한다는 것을 확인한 후 인증서의 전자 서명을 인증 기관의 개인 키를 사용해 암호화 한 후 서버에 전송한다.
- 이후 인증기관의 공개 키를 알고 있는 경우 해당 전자 인증서가 인증 기관에 의해 서명된 것을 확신할 수 있다.
인터넷 브라우저들은 신뢰할 수 있는 인증 기관의 공개 키를 이미 알고 있기 때문에 위의 TLS 핸드 쉐이크 과정에서 서버의 전자 인증서가 실제 CA에 의해 서명된 것인지를 확인할 수 있습니다. 브라우저에서 방문한 웹사이트의 인증서를 서명한 CA를 알고 싶으면 주소창 왼쪽의 자물쇠 아이콘을 선택하면 볼 수 있습니다.