비둘기로 설명하는 HTTPS(HTTPS explained with carrier pigeons)

암호화(Cryptography)는 이해하기 어려운 주제일 수 있다. 그것은 수학적인 증명으로 가득차 있다. 그러나 실제로 암호화 시스템을 개발하는 것이 아니라면, 무슨 일이 벌어지고 있는지 파악하는 데에는 암호화 시스템의 복잡성이 크게 필요한 것은 아니다.
이 글을 보는 여러분이 차세대(next) HTTPS 프로토콜을 만들려고한다면 내가 하는 비둘기 비유는 충분한 설명이 되지 않을 것이다. 만약 그런 분이 아니라면 커피를 끓이고 이 글을 즐기자.

Alice, Bob 그리고... 비둘기?

한마디로 얘기해서 인터넷에서하는 모든 활동 (이 기사를 읽거나 Amazon에서 물건을 사거나 고양이 그림을 업로드하는 행위)은 서버와 메세지를 주고 받는 것이라고 할 수 있다.
이 설명은 약간 추상적 일 수 있으니, 비둘기(carrier pigeon)가 이러한 메세지를 전달 한다고 상상해보자. 이 비유가 적절한 비유일지 확신 할 순 없지만, HTTPS가 훨씬 빠르게 동작하는 것을 제외하곤 동작 방식은 동일하니 나를 믿어보자.
또한 서버, 클라이언트 및 해커에 대해 이야기하는 대신 Alice, Bob과 Mallory에 대해 이야기 할 것이다. 암호화 개념에 대해 어느정도 지식이 있다면 이런 이름이 기술적인 글에서 널리 사용된다는 것을 알 수 있을 것이다.

최초의(a first naive) 커뮤니케이션

Alice가 Bob에게 메시지를 보내려고한다면, 그녀는 비둘기 다리에 메시지를 첨부하여 Bob에게 보낼것이다. Bob이 메시지를 받아서 읽으면 된다.
그러나 Mallory가 중간에서 Alice의 비둘기를 가로 채고 메시지를 변경한다면? Bob은 Alice가 보낸 메시지가 중간에서 변경 됐다는 것을 알 수있는 방법이 없다.
이것이 HTTP가 작동하는 방식이다. 무섭지 않나? 난 HTTP로 은행 계좌 정보를 보내지 않을 것이고, 당신도 당연히 그래야 한다.

시크릿 코드

Alice와 Bob이 매우 똑똑하다면(crafty)? 그들은 시크릿 코드를 사용하여 메시지를 전달 할 것이다. 이 둘은 각 알파벳에서 3번 전 알파벳을 적을 것이다. 예를 들어 D → A, E → B, F → C 이렇게. 일반 텍스트 메시지 "secret message"는 "pbzobq jbppxdb"이가 되는 것이다.
Mallory가 비둘기를 가로 채서 메시지를 보더라도 의미있는 문자로 바꿀 수 없게 되며 어떤 말인지도 이해할 수 없게 된다. 왜냐하면 그녀는 코드를 모르기 때문이다. 그러나 Bob은 코드를 역순으로 적용해서 A → D, B → E, C → F의 메시지를 해독 할 수 있다. 암호 텍스트 "pbzobq jbppxdb"는 "secret code"로 다시 해독된다.
성공!
이것을 대칭 키 암호화(symmetric key cryptography)라고한다. 메시지를 암호화하는 방법을 알고 있으면 암호를 해독하는 방법도 알 수 있기 때문이다.
위에서 설명한 코드는 일반적으로 Caesar cipher라고 한다. 실제로는 보다 복잡한 코드를 사용하지만, 기본 아이디어는 이와 같다.

키를 어떻게 결정할까?

보내는 사람과 받는 사람 이외의 다른 사람이 어떤 키가 사용되었는지 알지 못하면 대칭 키 암호화는 매우 안전하다. Caesar cipher에서 중요한 것은 각 문자를 몇 자리 씩 이동했는지에 대한 오프셋 값이다. 이 예에서는 오프셋 3을 사용했지만 4 또는 12가 될 수도 있는 것이다.
문제는 앨리스와 밥이 비둘기와 메시지를 보내기 전에 미리 만나지 않으면 키를 안전하게 만들 수 없다는 것이다. 그들이 메시지 자체에 키를 보내면, Mallory는 메시지를 가로 챈 다음 키를 알 수 있게 된다. 그러면 Mallory는 원하는대로 메시지를 읽거나 변경할 수 있게 된다.
이것은 Man in the Middle Attack의 전형적인 예이며, 이것을 피하는 유일한 방법은 암호화 시스템을 전부 변경하는 것이다.

상자를 나르는 비둘기

그래서 Alice와 Bob은 더 나은 시스템을 고안하게 된다. Bob이 Alice에게 메시지를 보내려고 할 때 아래 절차대로 보내도록 하는 것이다:
  • Bob은 아무런 메시지없이 Alice에게 비둘기를 보낸다.
  • Alice는 비둘기에게 열려있는 상자를 보내고, 열쇠는 가지고 있는다.
  • Bob은 메시지를 상자에 넣고 잠근 다음 상자를 Alice에게 보낸다.
  • Alice는 상자를 받고 키로 열어 메시지를 읽는다.
이렇게하면 Mallory는 비둘기를 가로 채서 메시지를 변경할 수 없다. 열쇠를 가지고 있지 않기 때문이다. Alice가 Bob에게 메시지를 보내려고 할 때도 동일한 프로세스가 진행된다.
앨리스와 밥은 일반적으로 비대칭 키 암호(asymmetric key cryptography)로 알려진 것을 사용했다. 비대칭이라고 불리는 이유는 메시지를 암호화 (상자 잠그기)해도 암호를 해독 할 수 없기 때문이다 (닫힌 상자 열기).
기술적으로 설명하자면 상자는 공개 키(public key)이며, 알려져 있으며이를 열 수있는 키를 개인 키(private key)라고 한다.

상자는 어떻게 신뢰할 수 있을까?

주의를 기울였다면 우리는 여전히 문제가 있음을 알 수 있다. Bob이 열린 상자를 받으면 어떻게 Alice에게서 왔는지, 그리고 Mallory가 비둘기를 가로 채지 않고 상자를 바꾸지 않았다고 확신 할 수 있을까?
Alice는 상자에 서명을 한다. Bob이 상자를 받으면 서명을 확인해서 이 서명이 상자를 보낸 Alice의 것인지를 확인한다.
여러분 중 일부는 이런 생각을 할 것이다. Bob이 처음에 Alice의 서명을 어떻게 식별할까? 좋은 질문이다. Alice와 Bob도 이 문제를 인지하고 있었기 때문에 Alice가 상자에 서명하는 대신 Ted가 상자에 서명 할 것이라고 결정했다.
Ted는 누구일까? Ted는 매우 유명하고 잘 알려져 있으며 신뢰할만한 사람이다. Ted는 모두에게 자신의 서명을 줬고, 모든 사람은 테드가 합법적인 사람에게만 서명 할 것이라고 믿는다.
Ted는 서명을 요구하는 사람이 Alice라고 확신하는 경우에만 Alice 상자에 서명한다. 그래서 Mallory는 Alice를 대신해 Ted가 서명한 상자를 얼을 수 없다. Ted는 그들이 신원을 확인한 후에만 상자에 서명을 하기 때문에 Bob이 상자가 가짜(fraud)라는 것을 알게 되기 때문이다.
기술 용어로 Ted는 일반적으로 인증 기관(Certification Authority)이라고하며 이 글을 읽는 브라우저에는 다양한 인증 기관(Certification Authorities)의 서명이 함께 제공된다.
그래서 당신이 처음으로 웹 사이트에 접속하면 당신은 상자를 신뢰한다. 왜냐하면 당신은 Ted를 신뢰할 것이고 Ted는 상자가 합법적이라고 당신에게 얘기해주기 때문이다.

상자는 무겁다

Alice와 Bob은 이제 신뢰할 수 있는 시스템을 만들었지만 상자를 들고있는 비둘기는 메시지만 전달하는 것보다 느리다는 것을 깨닫는다.
그들은 대칭 암호를 사용하여 메시지를 암호화하는 키를 선택하기 위해서만 상자 방법(비대칭 암호화)을 사용하기로 결정한다(Caesar cipher를 기억 하는가?).
이 방법으로 그들은 두 세계의 장점을 얻는다. 비대칭 암호화의 신뢰성과 대칭 암호화의 효율성.
실제 세계에서는 이렇게 느린 비둘기가 없지만 대칭 암호화를 사용하는 것보다 비대칭 암호화를 사용하는 것이 속도가 느리기 때문에 암호화 키를 교환하는 데만 사용한다.
이제 HTTPS가 작동하고 커피가 어떻게 준비되어야하는지 알게되었다. 자, 이제 커피를 마셔보자😉.


이 글은 번역글 입니다. 원문은 아래에서 확인 할 수 있습니다. 혹시 오역이 있으면 알려주세요. 감사합니다.