HTTPS 개념 / 사용 이유 / 원리 (대칭키 vs 비대칭키)

방충림·2023년 4월 4일
4

CS

목록 보기
24/26
post-thumbnail
post-custom-banner

HTTP란?

HTTP는 Hyper Text Tranfer Protocol로 하이퍼텍스트를 전송하는 프로토콜, 즉 일종의 통신규약이다.

컴퓨터는 내가 사이트에 접속하면 서버에 아래와 같이 생긴 메시지를 보낸다.

그러면 서버측도 나의 컴퓨터에 이러한 응답을 보내온다.

컴퓨터는 이 메시지들을 바로 알아볼까? 그렇지않다. 컴퓨터도 이 문자들이 어떠한 형식으로 쓰였는지를 알아야 이 메시지들을 해석할 수 있다.
이 메시지가 어떤 형식으로 작성되었는지를 알려주는 것. 그것이 바로 프로토콜이며, 주소 HTTP(S)를 붙이는 행위는 "이 메시지들은 HTTP(S)형식이야 참고해." 라고 컴퓨터에게 일러주는 행위인 것이다.



HTTPS란?

웹사이트의 주소 앞에 HTTP나 HTTPS가 붙은 것을 많이 보았을 것이다.
예전에는 HTTP가 많았지만 요즘 공신력있는 사이트들은 거의 전부 HTTPS를 사용하는 것을 볼 수있다.

이 둘의 차이는 무엇일까? 알아보도록하자.

HTTPS의 S는 secure의 약자이다. 즉 기존의 HTTP사이트보다 안전하다는 이야기다.



HTTPS를 사용하는 이유

어떤 부분에서 안전하다는 걸까? 그것은 크게 두가지로 나뉜다.

  1. 내가 사이트에 보내는 정보들을 제 3자가 못보게한다.
  2. 접속한 사이트가 믿을 만한 곳인지를 알려준다.

하나씩 자세히 설명해보겠다.

1. 내가 사이트에 보내는 정보들을 제 3자가 못보게한다.

내가 어떠한 웹사이트에 접속해 로그인을 위해 아이디와 비밀번호를 입력하면, 해당 정보가 인터넷을 타고 해당 사이트의 서버로 전송이 된다.
이때 그냥 HTTP로 보내면 이 암호가 입력한 텍스트 그대로, 누구든 알아볼 수 있는 형식으로 보내진다.
만약 누군가가 이 정보를 중간에 들여다본다면 나의 아이디와 비밀번호가 탈취되고 만다.
HTTPS는 이 정보를 해당 사이트만 알아볼 수 있는 텍스트로 암호화 하여 전송한다. 때문에 악의적인 누군가가 중간에 들여다본다고 해도 알아볼 수 없게된다.

2. 접속한 사이트가 믿을 만한 곳인지를 알려준다.

내가 어떠한 웹사이트에 접속하려고 하는데 그 사이트가 정상적인 사이트가아닌 피싱사이트일 수 있다. 그것을 진짜 웹사이트와 착각해 진짜 웹사이트의 아이디와 비밀번호를 입력해버린다면 피싱사이트가 나의 진짜 웹사이트 아이디 비밀번호를 알게될 것이다.
HTTPS는 이런 수상한 사이트를 걸러 낼 수 있도록 해준다.
기관으로부터 검증된 사이트만 주소에 HTTPS 사용이 허가된다.



HTTPS의 암호화 원리

HTTPS의 암호와 방법에는 대창 키 암호화 알고리즘과, 비대칭 키 암호화 알고리즘이 사용된다.

대칭 키 암호화 알고리즘

오랫동안 널리 사용되어 오던 방식이다. 이는 메시지를 보내는 쪽과 받는 쪽이 메시지를 암호화하고, 이를 다 시 복호화하는데에 같은 키를 사용하는 방식이다.

보내지는 메시지는 암호화된 상태로 전송되기 때문에 악의적인 제3자가 해당 메시지를 가로채서 들여다 보더라도 암호화와 복호화에 쓰이는 키값을 알지못하면 암호화된 메시지를 알아볼 수 없기때문에 보안이 유지가된다.

하지만 문제는 그 이전에 발생한다. 결국엔 이 들도 처음에는 한쪽에서 한쪽으로 공유를해야만 한다. 이 과정에서 이 키가 탈취된다면 보안은 뚫리게된다. 이것이 대칭키의 한계이다.

비대칭 키(공개 키) 암호화 알고리즘

이를 보완한 새 방식이 1970년대에 수학자들에 의해 개발되었다. 비대칭키 또는 공개키라고 불리는 시스템이다. 여기에는 두가지 키가 사용된다. 이 두 키는 서로 한 쌍이다. 한 쌍이지만 서로 다르기 때문에 '비대칭키'라고 불린다.

이 두개의 키는 공개키개인키로 불리운다.
공개키는 말그대로 대중에게 공개되는, 누구나 접근할 수 있는 키이며,
개인키는 키를 만든 당사자만 가지고 있는 개인적인 키이다.

이 두 키는 긴밀한 관계를 가진다.

누군가의 공개키로 암호화된 암호문은 그 사람의 개인키로만 복호화가 가능하다.
반대로, 누군가의 개인키로 암호화된 암호문은 그 사람의 공개키로만 복호화가 가능하다.

이를 HTTPS에 적용해보자.

1. 내가 사이트에 보내는 정보들을 제 3자가 못보게한다.

A가 B에게 메시지를 보내고싶다. A는 B의 공개키를 받아와서 그 키로 메시지를 암호화 하여 B에게 전송한다.
이때, 악의적인 제3자가 C가 그 메시지를 가로채더라도 어차피 메시지를 복호화할 수 있는 건, 개인키를 가지고 있는 B뿐임으로 보안성이 유지가 된다.

2. 접속한 사이트가 믿을 만한 곳인지를 알려준다.

B가 A에게 보내는 메시지들은 B의 개인키로 암호화된 것이므로, A가 B의 공개키를 가지고 해당 암호문을 복호화할 수 있다. 만약 C가 자신의 개인키로 암호화한 메시지를 보내오더라도, 이는 B의 공개키로는 복호화되지 않으므로 B가 보낸것이 아님을 알아챌 수 있다.

다만 여기까지가 완전히 안전한 것은 아니다. 왜냐하면 B의 공개키라고 받아온 것이 C의 공개키일 가능성도 있기 때문이다.
신뢰할 수 있는 기관에서 B의 공개키만 검증해준다면 안전하게 B사이트를 이용할 수 있을 것이다. 그래서 CA라는 것이 등장했다.

공개키가 정품인지를 인증해주는 공인된 민간기업들이 있다.
바로 CA(Certificate Authority)이다.
CA는 엄격한 인증과정을 거쳐야만 자격을 얻을 수 있다.
우리가 사용하는 모든 브라우저에는 이 CA들의 목록이 내장되어 있다.


조금 더 자세히 알아보자

Q. 공개키가 정품인지는 어떻게 알 수 있을까?

클라이언트와 서버가 통신을 한다고 가정해보자.
클라이언트와 서버가 처음 통신을 할 때, 클라이언트는 아직 서버를 신뢰하지 못한다. 그래서 이 둘은 일종의 탐색 과정을 거친다. 이것을 핸드쉐이크(Handshake), 악수라고 한다.

핸드쉐이크를 시작으로 공개키를 받기까지의 순서는 다음과 같다.

  1. 클라이언트는 어떠한 랜덤한 데이터를 생성해서 서버에 보낸다.

  2. 이를 받은 서버는 답변으로 또다시 서버측에서 생성한 무작위 데이터에 해당 서버의 인증서를 실어보낸다. (이것으로 둘은 핸드쉐이크를 한 것이다.)

  3. 이제 클라이언트는 이 인증서가 진짜인지 확인하기 위해 브라우저에 내장된 CA들의 정보를 통해 확인하게 된다.(비대칭키 시스템)

  4. CA의 인증을 받은 인증서들은 해당 CA의 개인키로 암호화가 되어있다. 이 인증서가 진짜라면 브라우저에 저장된 그 CA의 공개키로 복호화를 할 수 있다.

  5. 그렇게 성공적으로 복호화된 인증서에는 서버의 공개키가 포함되어있다.

이 과정을 거쳐 얻게된 공개 키는 정품인 것을 보장받은 것이된다.

Q. 이렇게 좋은 비대칭키가 있는데 대칭키를 왜 쓸까?

HTTPS로 통신함에 있어, 대칭키 방식과 비대칭키 방식은 함께 혼합되어 사용된다. 그 이유는 비대칭키 방식으로 암호화 및 복호화를 하는 것은 대칭키로 할 때보다 컴퓨터에 훨씬 큰 부담을 주기 때문이다.
사이트를 이용할 때 주고받을 그 다량의 데이터를 비대칭키로 일일이 암호화, 복호화하는 것은 무리란 이야기다.

때문에 대칭키를 공유할 때 비 대칭키를 사용하고, 데이터는 대칭키로 암호화를 한다.

Q. CA인증서를 통해 공개키는 받았다. 대칭키는 어디에 있는데?

앞서 클라이언트와 서버는 핸드쉐이크에서 두 무작위 데이터 주고 받았다.
클라이언트는 그 두 데이터를 혼합해서 어떤 임시 키를 만든다.

이 임시 키는 서버의 공개키로 암호화돼서 서버로 보내진다.

이후 양측에서 동일한 과정을 거쳐 대칭키를 만들어낸다.

이제 이 대칭키는 서버와 클라이언트 둘만 갖고있으니 이를 통해 안전하게 대칭키 암호를 통해 데이터를 주고받을 수 있다.



참고문헌 : 얄팍한 코딩사전

profile
최선이 반복되면 최고가 된다.
post-custom-banner

0개의 댓글