HTTPS
‘O’ 이 문자가 숫자인지 알파벳인지 한글인지 알려줘야 하듯이 내 컴퓨터에서 서버에 요청을 보낼 때는 보낼 때마다 '자 이 메시지들은 HTTP(S)형식이야 https://www.google.com’ 하고 주소창에 써서 일일이 명시를 해 줘야 한다.
예전에는 HTTP가 많았지만 요즘 공신력 있는 사이트들은 거의 전부 HTTPS를 사용한다.
S 는 Secure. 즉 기존의 HTTP 사이트보다 안전하다는 뜻이다. HTTP에 SSL이라는 기술을 더해 보안이 강화된 통신 규약이다.
HTTPS의 역할은 두가지 이다.
- 내가 사이트에 보내는 정보들을 제 3자가 못 보게 한다.
- 접속한 사이트가 믿을 만한 곳인지를 알려준다.
본격적으로 알아보기에 앞서 대칭키와 비대칭키에 대한 이해가 필요하다.
대칭키
대칭키는 같은 키를 말한다. 그림상의 파란색 부분이라고 보면 된다. 암호화와 복호화를 같은 키를 공유해서 사용한다.
A키로 암호화한 정보를 A키로 복호화하는 것이다.
그렇기 때문에 만일 내 컴퓨터와 서버에 동일한 A키가 있다면 A키로 암호화하고 복호화하며 안전하게 요청과 응답을 주고받을 수 있다. 만약 중간에 정보를 훔쳐가더라도 A키로만 복호화할 수 있기 때문에 알아볼 수 없을 것이다. 하지만 양쪽이 동일한 키를 공유하기 위해서 한번은 키를 전송해야 하기 때문에 여기서 훔쳐간다면 키가 노출되는 것이 대칭키의 한계이다.
비대칭키(공개키)
비대칭키는 서로 다른 A키, B키를 말한다. A키로 암호화하면 B키로만 복호화 할 수 있고 B키로 암호화하면 A키로만 복호화 가능한 한 쌍이다.
서버는 비대칭키 중에서 키 하나를 비밀로 보관하고 (개인키) 다른 하나는 대중에게 공개한다 (공개키)
내 컴퓨터에서 중요한 정보를 서버에 보낼때 서버의 공개키로 암호화해서 보내면 안전하게 정보 전달이 가능하다. 해커도 가지고 있는 같은 공개키로는 복호화가 불가능하고 서버만 가지고 있는 개인키로만 복호화가 가능하기 때문이다. 여기서 https 의 첫번째 역할을 알 수 있다.
내가 사이트에 보내는 정보들을 제 3자가 못 보게 한다.
만약 실수로 네이버를 사칭한 해킹사이트인 네이비에 들어가면 어떻게 될까? 서버의 공개키로 풀어서 알아볼 수 있는 건 서버의 개인키로 암호화된 정보들 뿐인데, 네이비의 정보는 네이버의 공개키로 풀리지 않는다. 그렇기 때문에 사용자는 네이버가 아니라는 것을 알게된다.
신뢰할 수 있는 기관에서 서버들의 공개키만 검증해준다면 이걸 기준으로 풀리는지 풀리지 않는지 보고 믿을 만한 사이트인지를 판단할 수 있게 된다. 그리고 이렇게 https 의 두번째 역할도 알게 되었다.
접속한 사이트가 믿을 만한 곳인지를 알려준다.
SSL
클라인언트가 서버에 접속하면 일종의 탐색 과정을 거치게 된다. (handshacke = 악수) 클라이언트는 어떤 랜덤 데이터를 생성해서 서버에 보내고 서버는 답변으로 랜덤 데이터와 해당 서버의 인증서를 보낸다.
서버가 신뢰할 수 있는 서버인지를 인증해주는 공인된 민간기업들이 있다. CA (Certificate Authority). CA는 신뢰할 수 있는 서버에 기관의 비공개키로 암호화한 인증서를 발급하고 각 브라우저에는 CA 리스트와 각 CA의 공개키가 내장되어 있다.
클라이언트는 이 인증서가 진짜인지 브라우저에 내장된 CA의 공개키로 복호화하고 여기에는 서버의 공개키가 포함되어 있다.
클라이언트는 랜덤 데이터들을 이용해 임시키를 발급하고 서버의 공개키로 암호화하여 전달하면 서버는 개인키로 복호화하여 양쪽에서 일련의 과정을 통해 동일한 대칭키가 만들어진다. 이후 데이터는 이 대칭키로 주고받는다.
비대칭키를 이용한 방식은 알고리즘이 복잡해서 대칭키를 이용한 방식보다 큰 부담을 줌으로 실제 데이터는 대칭키 방식으로 암호화를 하고 대칭키의 키를 공개키 방식으로 암호화한다.
참고
'컴퓨터과학 > 네트워크' 카테고리의 다른 글
[네트워크] 서버와 클라이언트, 클라우드 (0) | 2023.01.19 |
---|