흑구의 공부내용 공유

HTTPS는 도대체 무슨일을 하나요??

코딩하는흑구 2022. 10. 5. 15:47

HTTPS가 필요한 이유

  1. 개인정보 보호
  2. 무결성
  3. 식별

 

개인정보 보호

  • 서버간 메시지 전송 시 통신하는 서버가 아닌 제 3자가 이를 가로챌 수 없음을 의미한다.
  • 이러한 암호화되지 않은 메시지가 제 3자에게 노출된다면 잠재적으로 악용될 소지가 있음을 나타낸다.
  • HTTPS 없이 웹사이트를 탐색한다면 비밀번호 등 유효정보를 도청당할 수 있다.
  • 브라우저의 URL 표시줄에 자물쇠는 이렇게 몰래 훔쳐보고 있는 제 3자가 없다는 것을 뜻한다.

 

무결성

  • 무결성은 메시지가 목적지로 가는 도중에 조작되지 않음을 의미한다.
  • 예를 들어, 내가 누군가에게 메시지를 좋은 말로 보냈는데 제 3자에 의해 수정되어 못된 말로 변경되어 가는 경우 이러한 무결성이 보장되지 못한다고 볼 수있다.
  • 위의 예처럼 중간에서 조작되는 것을 중간자 공격이라고 한다.
  • 따라서 HTTPS는 무결성을 위해 메시지가 변형되지 않았음을 보장한다.

 

식별

  • 식별은 방문하는 웹사이트가 실제로 내가 생각하는 그리고 누구나 생각하는 신뢰있는 그 사이트라는 것을 의미한다.
  • 피싱사이트의 경우, 이러한 식별되지 않은 사이트에 접근하여 누구나 생각하는 신뢰있는 그 사이트의 정보를 해킹하기 위한 수단인데 HTTPS는 이러한 식별을 도와준다.
  • 실제 클라이언트가 요청시 서버는 클라이언트에게 자신의 공인된 디지털 서명을 첨부해주는데 이것이 바로 SSL 인증서이다.
  • 브라우저 내에 이러한 인증서를 관장하는 CA라는 정보기관들의 목록이 내장되어 있는데 이를 통해 해당 서버에 접근한 클라이언트가 자신이 맞는 서버에 접근했는지를 증명해줄 수 있습니다.

 


 

 

대칭키와 비대칭키 알고리즘

 

HTTPS는 웹에서 개인정보보호, 무결성 및 식별 기능을 제공하기 위한 방법이 필요로 하게 됐는데 이에 대한 바탕이 암호화이다. 이런 암호화는 두가지 유형의 암호화가 있는데 하나는 대칭키 방식, 또하나는 비대칭키(공개키) 방식이다.

 

대칭키

대칭키는 메시지를 암호화하고 암호를 해독하는 키가 단 하나밖에 없는 암호화 알고리즘을 뜻한다. 쉽게 말해 누군가에게 메시지를 보낼때 그와 나만 아는 어떠한 비밀키로 암호를 만들고 그는 내가 보낸 메시지 암호를 그와 내가 같이 아는 비밀키로 풀어서 읽는 방식이다.

 

이때, 중요한 것은 무조건 이 비밀키(대칭키)를 비밀로 유지해야 된다는 점이다. 또 한가지..! 이 대칭키를 가진 사람은 누구나 메시지를 해독할 수 있다는 것이다.

 

지나치게 단순화하였지만 좀더 자세히 풀어보자.

 

메시지를 암호화한다는건 통신 대상자가 아닌 일반 사용자에게는 엄청나게 난해한 문자열로 밖에 보이지 않는다.

 

(뛿쀍뛹띍fjlsd_%#%#% )

 

텍스트가 일련의 과정을 통해 섞이는 암호화를 통해 난독을 유지할 수 있고 해당 과정을 거꾸로 수행하는 과정을 통해 해독을 진행할 수 있다. 이런 암호화키는 메시지와 함께 혼합되어 있어 알고리즘을 알고있어도 키가 없다면 메시지의 내용은 전혀 알 수 없다.

 

이런 대칭키의 문제중 하나는 키를 공유하는 것이 매우 어렵다는 것이다. 즉, 키를 배포하는 방법에 많은 주의가 필요하다. 따라서 이런 관점을 토대로 만들어진 방법이 비대칭키이다.

 

비대칭키(공개키, 비공개키)

하나는 공개키이고 다른 하나는 비공개키로 가져가는 방식이다.

 

공개키로 암호화한 것은 비공개키로 해독할 수 있고

비공개키로 암호화한 것은 공개키로 해독할 수 있는 방식이다.

 

공개키를 모두에게 공개하여 쉽게 암호화할 수 있게하고 비공개키는 나만 갖고있어 누구나 내게 메시지를 보낼 수 있지만 그 메시지를 읽을 수 있는 사람은 비공개키를 갖고 있는 나밖에 없다는 것이다. 이 방법은 2개의 키 소유자만 메시지를 열어볼 수 있기 때문에 개인정보보호 뿐만아니라 식별에도 유용하다. 

 

 


 

 

 

이제 이러한 두가지 키 암호화 방식을 토대로 어떻게 SSL 인증처리를 진행하는지 살펴보자.

 

핸드쉐이크(handshake)

어떤 유명한 A 포털사이트에 접근하게 된다면 브라우저 URL 창에 자물쇠를 보게 될텐데 어떻게 처리된 걸까?

 

브라우저에서 A 포털사이트를 보는 시점에서는 브라우저와 A 포털사이트 서버간의 보안 연결 설정을 이미 마친 상태이다. 그러나 이전에 A 포털사이트 서버와 나의 브라우저는 안전하게 통신하는 방법에 대해서 동의해야한다. 이에 성공하면 브라우저 상단에서 경고표시로 알려주고 성공해야만 자물쇠 표시가 나타나게 되는 것이다.

 

 

이렇게 브라우저와 네이버 서버간의 협상 프로세스를 핸드쉐이크라고 한다. 

  1. 클라이언트 헬로 : 나의 브라우저는 SSL/TLS 버전 및 암호화 알고리즘을 A 포털사이트 서버쪽으로 전달한다.
  2. 서버 헬로 : A 포털사이트 서버는 나의 브라우저가 보낸 SSL/TLS 버전과 암호화 알고리즘을 선택한다. 그리고 A 포털사이트 서버의 공개키가 포함된 SSL인증서로 회신하여 식별할 수 있도록 제공한다.
  3. 클라이언트 키 교환 : A 포털사이트 서버에서 보낸 인증서가 합법적인지 확인이 필요하다. (브라우저 CA 목록 참조) 그 후, pre-master-key를 생성하여 제공받은 A 포털사이트 서버의 인증서에 담겨진 공개키로 암호화하여 A 포털사이트 서버로 전달한다.
  4. Chipher 스펙 변경 : A 포털사이트 서버는 개인키를 사용하여 암호화된 pre-master-key를 해독한다. 이제 각각의 과정을 통해 master-key를 만들어내고 이후 해당 키를 토대로 세션을 유지한다.

 

즉, 핸드쉐이킹 과정을 통해 두 서버간 통신에서 비대칭키 방식으로 대칭키를 공유하고 이후의 네트워크 통신은 세션을 유지하며 대칭키 방식으로 통신하게 된다.

 

 

해당 글은 아래의 레퍼런스를 통해 제작되었습니다.

https://howhttps.works/ko/

 

How HTTPS works

🙀 A cat explains how HTTPS works...in a comic! 😻

howhttps.works