HTTPS란? - 대칭키와 비대칭키

Sandro·2023년 2월 8일
0

CS

목록 보기
5/6
post-thumbnail

배포한 프로젝트는 아직 https를 사용하지 않습니다. https를 사용하기 전에 이해하고자 얄코님 영상을 보고 내용을 정리해봤습니다.

잘못된 점이나 미흡한 부분은 댓글로 알려주시면 감사하겠습니다~


https는 http의 보안 문제를 해결하기 위해 사용된다.

문제

  • http 통신시 데이터는 암호화되지 않는다. 따라서 중간에서 데이터를 가로챌 경우 데이터가 그대로 노출된다.
  • 접속하는 사이트가 위/변조된 경우 내 데이터가 그대로 다 노출될 수 있다.

해결책

  • 데이터를 암호화해서 데이터가 노출되지 않게 한다.
  • 접속하는 사이트가 정상적인지 확인하는 로직을 추가한다.

방법

데이터를 암호화하고, 사이트의 위/변조를 검증하는 방법으로 대칭키와 비대칭키가 사용된다. 먼저 대칭키와 비대칭키에 대해서 알아본다.

대칭키와 비대칭키

정보를 암호화/복호화 할 때 사용하는 규칙을 라고 한다. 대칭키는 정보를 주고 받는 양쪽이 같은 키를 갖는 방식이다. 클라이언트가 키를 사용해서 데이터를 암호화해서 전달하고 서버에서도 같은 키를 사용해서 데이터를 복호화한다. 이 방식의 단점은 처음 한 번은 키를 공유하기 위해서 키를 전송해야 하는데 이때 키가 노출되면 암호화가 의미 없어진다.

비대칭키는 대칭키의 단점을 보완하기 위해서 사용된다. 대칭키와 다르게 비대칭이란 말 그대로 클라이언트와 서버가 서로 다른 키를 가지고 암호화/복호화하는 방법이다. A키로 암호화하면 B키로 만 복호화 할 수 있고, 반대로 B키로 암호화하면 A키로 만 복호화 할 수 있다. A(개인)키는 서버에 숨겨두고 B(공개)키는 그냥 공개한다. 데이터를 탈취해가도 개인키만 외부로 노출하지 않으면 외부에서 데이터를 복호화할 수 있는 방법이 없다.

비대칭 키를 사용해서 접속하는 사이트가 정상인지 판단할 수도 있다. 서버가 개인키로 암호화한 정보를 클라이언트에게 보내면 클라이언트는 공개키로 복호화 해보고, 문제가 없다면 정상 서버와 통신하고 있다는 뜻이다. 다만 공개키가 위/변조 되었을 가능성이 있기 때문에 공개키를 인증해주는 Certificate Authority(CA)가 있다. 우리가 사용하는 브라우저에는 CA의 공개키가 내장되어 있고 이걸 사용해서 공개키의 위/변조 여부를 판단한다.

전체 과정

조금 더 자세하게 전체 과정을 살펴본다.

  1. 먼저 클라에서 임의의 데이터를 생성해서 서버로 전송한다.
  2. 요청을 받은 서버 역시 임의의 데이터를 생성하고 서버의 인증서와 함께 응답으로 보낸다. 인증서는 CA의 개인키로 암호화 되어 있고 안에는 서버의 공개키가 들어있다.
  3. 클라는 받은 인증서가 진짜인지 브라우저에 내장된 CA의 공개키로 복호화한다. 문제가 없다면 인증서는 정상적이고 안에든 서버의 공개키 역시 인증되었다는 것을 의미한다. 이제 클라와 서버는 안심하고 데이터를 주고받을 수 있다.
  4. 비대칭키를 주고 받았지만 본격적으로 통신할 때는 대칭키를 사용한다. 비대칭키는 대칭키에 비해 길이가 길기 때문에 암/복호화시 더 많은 자원을 사용한다.
    클라는 처음 악수할 때 주고받은 임의 데이터를 이용해서 임시 키를 만들고 서버의 공개키로 암호화해서 서버에게 보낸다. 양쪽에서 임의 키를 가지고 동일한 대칭키를 생성해서 통신에 이용한다.

얄코님 영상에서 이 과정을 ‘악수’라고 표현하셨는데 얼핏 들어본 ‘3 Way Handshake’ 랑 관련이 있는 건지 아니면 그냥 개념적으로 악수를 했다고 표현하신 건지 잘 모르겠다.

결론

아직은 클라이언트로 중요한 데이터를 받지 않는다고 생각해서 https의 필요성을 느끼지 못했는데 내 사이트에 신뢰도를 높이기 위해서는 https를 사용하는 것이 좋겠다. 곧 인증기능을 달 생각이니까 추가해놓아야겠다.

참고

profile
안녕하세요!

0개의 댓글