seegongsik
보안

어떻게 모든 게 모이는 자물쇠, HTTPS

주소창 앞에 붙은 작은 자물쇠는 HTTPS로 연결됐다는 표시다. 네트워크 영역에서는 이 연결이 어떤 순서로 이루어지는지 흐름을 따라갔어요. 이번에는 질문을 바꿔, 그 자물쇠가 왜 안전한지를 묻는다. 답은 의외로 익숙하다. 인증서, 키 교환, 대칭키 암호, 지문과 서명까지 이 영역에서 하나씩 배운 조각들이 그 자물쇠 안에 다 들어 있어요.

01

어떻게가 아니라 왜 안전한가

네트워크 영역에서 HTTPS를 만났을 때는 요청이 가고 응답이 오는 사이에 자물쇠가 걸리는 순서를 봤다. 그것이 어떻게의 시선이에요. 여기서는 같은 자물쇠를 왜의 시선으로 본다. 무엇이 무엇을 막기에 믿을 만한지, 속을 열어 따져 보는 것이다.
자물쇠 하나가 막아야 할 위협은 셋이다. 진짜 사이트인 척하는 위장, 오가는 내용을 훔쳐보는 엿보기, 도중에 내용을 바꾸는 위조다. 이 셋을 하나씩 막는 장치가 차례로 맞물려 있어요.

같은 자물쇠, 두 관점
두 관점을 눌러 갈라요. 같은 HTTPS를 다르게 본다.

두 관점을 눌러 견줘요. 네트워크 영역은 흐름, 곧 어떻게를 보고, 이 강은 안전의 이유, 곧 왜를 본다.

흐름은 동작의 순서를 알려 주고, 이유는 그 동작을 믿어도 되는 근거를 알려 준다. 둘 다 필요하지만 이 강의 주인공은 이유예요.
그 이유는 세 고리로 정리된다. 첫째, 상대가 진짜 그 사이트인지 확인한다. 둘째, 둘만 아는 열쇠를 안전하게 나눈다. 셋째, 그 열쇠로 내용을 잠그고 바뀌지 않았는지 확인한다. 세 고리가 모두 닫혀야 자물쇠가 제 구실을 해요.

02

진짜 사이트인지 확인한다

첫 번째 고리는 확인이다. 자물쇠를 걸기 전에 먼저 물어야 할 것이 있다. 나는 지금 정말 그 사이트와 이야기하고 있나, 진짜인 척하는 가짜는 아닌가?
연결이 시작되면 사이트는 자기 인증서를 보낸다. 브라우저는 지난 강에서 본 대로 사슬을 거슬러 믿을 만한 루트까지 닿는지, 서명이 맞는지, 인증서의 도메인이 주소창의 주소와 같은지, 기간이 남았는지를 확인해요. 모두 맞아야 다음 단계로 가고, 하나라도 어긋나면 거기서 멈추고 경고를 띄워요.

인증서를 확인할 사이트 고르기
?
보증
사이트를 고르고 인증서를 확인해요.

사이트를 고르고 인증서를 확인하면, 보증이 맞을 때는 통과하고 가짜일 때는 멈추고 경고가 뜬다.

보증이 맞는 쪽만 초록으로 통과했고 맞지 않는 쪽은 빨갛게 멈췄다. 겉모습을 아무리 똑같이 꾸며도 믿을 만한 기관의 서명까지 흉내 낼 수는 없으니, 첫 단추는 진짜에게만 끼워진다. 이것이 위장을 막는 고리예요.
다만 상대가 진짜라는 것을 확인했다고 대화가 곧바로 안전해지지는 않는다. 오가는 내용은 여전히 누구나 볼 수 있는 길을 지난다. 이제 둘만의 열쇠를 나눌 차례다.

03

열쇠를 안전하게 나눈다

두 번째 고리는 열쇠 나누기다. 내용을 빠르게 잠그려면 둘이 같은 대칭키를 하나씩 쥐고 있어야 한다. 문제는 그 열쇠를 엿보는 사람이 있는 길 위에서 어떻게 나누느냐예요.
방법은 두 가지가 있다. 하나는 브라우저가 대칭키를 만들어 사이트의 공개키로 감싸 보내는 방법이고, 아래 그림이 보여 주는 것이 이쪽이다. 다른 하나는 키 교환 강에서 본 것처럼 양쪽이 공개된 재료를 주고받아 같은 비밀을 함께 만드는 방법이다. 요즘 연결은 대부분 뒤의 방법을 쓰고, 사이트는 자기 몫의 재료에 인증서의 개인키로 서명해 중간에서 바꿔치기할 수 없게 만든다.

1상대의 공개키를 받아요
2비밀 열쇠를 공개키로 감싸요
3개인키로만 풀어요
···
아직 공유키가 없어요.
엿보는 사람
오가는 것을 지켜본다.

단계를 차례로 누르며 열쇠를 나눠 보자. 공개키로 감싸 보낸 열쇠는 개인키 없이는 풀 수 없어서 엿보는 사람은 빈손으로 남는다.

단계를 따라가니 둘만 같은 대칭키를 갖게 됐다. 중간에서 지켜보던 사람은 감싼 꾸러미를 봤지만 풀 개인키가 없어 빈손이에요. 비밀 열쇠를 따로 부치지 않았는데도 결과적으로 둘만 그 열쇠를 쥐게 된 것이다.
함께 만드는 방법을 쓰면 한 걸음 더 나아간다. 연결마다 새 비밀을 만들고 쓰고 나면 버리니, 나중에 사이트의 개인키가 새어 나가도 지난 대화는 풀리지 않는다. 이제 그 열쇠로 실제 대화를 잠글 차례예요.

04

세 고리가 닫힌다

세 번째 고리는 잠그기다. 둘만 가진 대칭키로 오가는 내용을 암호화하니, 길 위에서 엿봐도 뜻 모를 글자만 보인다. 대칭키 암호는 빨라서 큰 파일이나 영상도 무리 없이 잠글 수 있어요.
잠그기만 하는 것이 아니다. 내용 조각마다 공유한 키로 만든 검사값을 붙여 보내므로, 누가 도중에 한 글자라도 바꾸면 검사값이 어긋나 받는 쪽이 바로 알아채요. 이 확인을 무결성이라고 부른다. 확인, 열쇠 나누기, 암호화와 무결성. 이 셋이 함께 닫혀야 자물쇠가 잠겨요.

세 고리를 눌러 닫기
안 잠김
아직 빈 고리가 있다. 하나라도 비면 자물쇠가 잠기지 않아요.

세 고리를 하나씩 눌러 닫아 보자. 셋이 다 닫히면 위장, 엿보기, 위조가 모두 막히고, 하나라도 비면 자물쇠가 잠기지 않는다.

세 고리가 다 닫히자 자물쇠가 잠겼다. 위장은 인증서 확인이, 엿보기는 암호화가, 위조는 무결성 확인이 막는다. 위협마다 짝을 이루는 고리가 있는 셈이에요.
하나라도 빠지면 의미가 없다. 확인 없이 암호화만 하면 가짜 사이트와 아주 안전하게 대화하는 꼴이 되고, 확인만 하고 암호화하지 않으면 내용이 길 위에 그대로 드러난다. 그렇다고 자물쇠가 모든 것을 지키지는 않아요. 엿보는 사람은 내가 어느 사이트에 접속했는지와 오가는 양 정도는 여전히 알 수 있고, 사기 사이트도 자기 도메인의 인증서는 정상으로 받을 수 있다. 자물쇠는 상대가 그 주소의 주인이라는 뜻이지, 정직한 사이트라는 뜻은 아니다.

05

정리

한데 모으면 이렇다. HTTPS는 이 영역에서 배운 조각들이 모이는 자물쇠다. 네트워크 영역에서는 흐름을 봤고, 여기서는 왜 안전한지를 봤어요. 안전은 세 고리가 닫혀서 온다. 인증서로 진짜 사이트인지 확인하고, 공개키 기술로 둘만의 대칭키를 안전하게 나누고, 그 대칭키로 내용을 암호화하며 검사값으로 무결성을 확인한다.
위장, 엿보기, 위조를 고리마다 하나씩 막고, 셋이 함께 닫혀야 자물쇠가 잠긴다. 다만 자물쇠가 지키는 것은 오가는 내용이지, 사이트의 정직함까지는 아니에요.

1왜 안전한가
2인증서 확인
3열쇠 안전 교환
4세 고리가 닫힘

핵심 네 가지를 차례로 눌러 되짚는다. 왜 안전한가, 인증서 확인, 열쇠를 안전하게 나누기, 세 고리가 닫힘의 순서예요.

이제 주소창의 작은 자물쇠가 다르게 보일 것이다. 그것은 그림 하나가 아니라 세 고리가 모두 닫혔다는 약속이다. 인증서로 상대를 확인했고, 둘만의 열쇠를 안전하게 나눴고, 그 열쇠로 내용을 잠그고 있다는 약속이에요.
그런데 자물쇠가 지키는 것은 이미 열린 연결 위의 내용이다. 애초에 들어오지 말아야 할 연결은 누가 문 앞에서 거를까? 다음 강에서는 그 일을 맡는 방화벽을 본다.

한 줄 정리HTTPS는 이 영역에서 배운 것들이 한데 모이는 자물쇠다. 네트워크 영역에서 그 흐름을 봤다면 여기서는 왜 안전한지를 본다. 안전은 세 고리가 닫혀서 온다. 첫째, 인증서로 상대가 진짜 그 사이트인지 확인해 위장을 막는다. 둘째, 공개키 기술로 둘만의 대칭키를 안전하게 나눈다. 요즘 연결은 대개 양쪽이 같은 비밀을 함께 만들고 사이트가 그 과정에 서명하는 방식을 쓰며, 연결마다 새 열쇠를 쓰니 나중에 개인키가 새도 지난 대화는 안전해요. 셋째, 그 대칭키로 내용을 암호화해 엿보기를 막고, 조각마다 붙인 검사값으로 위조를 잡아낸다. 세 고리가 함께 닫혀야 자물쇠가 잠기고, 하나라도 비면 안전하지 않아요. 다만 자물쇠는 상대가 그 주소의 주인이라는 뜻이지 정직한 사이트라는 보증은 아니며, 어느 사이트에 접속했는지 같은 정보는 여전히 드러난다.
← 보안
이 페이지가 도움 됐다면 후원하기