HTTPS 와 TLS


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 핸드쉐이크 과정을 도표로 나타낸 것입니다. TLS-handshake

인증 기관

인증 기관(Certificate Authority, CA)은 전자 인증서(Digital Certificate)을 발급하는 기관입니다. 전자 인증서를 발급은 아래와 같이 비대칭 키 암호화 방식을 통해 이뤄집니다.

  • 서버가 CA에 전자 인증서 발급을 요청한다. 전자 인증서에는 서버의 공개 키, 개인 키, 그리고 전자 서명이 있다.
  • 인증 기관은 해당 서버가 요청자가 실제 소유한다는 것을 확인한 후 인증서의 전자 서명을 인증 기관의 개인 키를 사용해 암호화 한 후 서버에 전송한다.
  • 이후 인증기관의 공개 키를 알고 있는 경우 해당 전자 인증서가 인증 기관에 의해 서명된 것을 확신할 수 있다.

인터넷 브라우저들은 신뢰할 수 있는 인증 기관의 공개 키를 이미 알고 있기 때문에 위의 TLS 핸드 쉐이크 과정에서 서버의 전자 인증서가 실제 CA에 의해 서명된 것인지를 확인할 수 있습니다. 브라우저에서 방문한 웹사이트의 인증서를 서명한 CA를 알고 싶으면 주소창 왼쪽의 자물쇠 아이콘을 선택하면 볼 수 있습니다. CA