카테고리 없음

HTTP가 무엇이고 왜 쓰나요? (Feat. 대칭키 vs. 비대칭키)

컴공 윤서혜 학습일기 2021. 1. 29. 14:36

1. HTTPS(Hyper-Text-Transfer-Protocol-Secure)를 사용하는 이유가 뭔가요?

예전에는 HTTP가 많았지만 요즘 공신력 있는 사이트들은 거의 전부 HTTPS를 사용하는걸 보실수 있을거에요. 

지금 HTTPS를 사용하는 이유는, 기존의 HTTP 사이트보다 안전하기 때문입니다.

크게 2가지로부터 안전합니다.

 

첫번째, 내가 어떤 웹사이트에 보내는 정보를  다른 누군가 훔쳐보지 못하게 합니다. 만약 그냥 HTTP로 보내면 이 암호가 입력한 텍스트 그대로, 누구든 알아볼 수 있는 형식으로 보내진다. 그래서 누군가가 이 정보를 중간에 들여다 본다면 그 누군가는 이제 여러분의 아이디와 비밀번호를 알게 되는겁니다. 일반적으로 사이트들, 앱들에 같은 아이디와 비밀번호를 설정하니까 사실상 사용자의 모든 사이버 정보가 털린다고 볼 수 있다. HTTPS는 이 정보를 네이버만 알아볼 수 있는 암호화된 텍스트로 변경해서 실어 보낸다. 해커가 들여다봐도 뭐라고 쓴건지 알아 볼수 없도록 만들어줍니다.

 

두번째, 사용자가 접속한 사이트가 진품인지, 신뢰할 수 있는 사이트인지 판별해줍니다.

예를들어 '네이버'에 들어가려고 링크를 클릭했는데 알고보니 '네이놈'이라는 피싱 사이트인 경우가 있습니다. 거기에 네이버 아이디랑 비밀번호를 입력해버리면 이 피싱 사이트가 사용자의 네이버 계정을 알게 되버립니다. 여기서 온라인 뱅킹 사이트의 경우가 된다면 더 큰일이 되는겁니다. 

그래서 HTTPS는 이런 수상한 사이트를 걸러낼 수 있도록 해줍니다. 기관으로부터 검증된 사이트만 주소에 HTTPS 사용이 허가되고 이제 그냥 HTTP를 사용하는 사이트들은 주소창에 '안전하지 않다'라는 표시가 뜨게 됩니다.

 

요약하자면,
첫번째 내 사이트에 보내는 정보들을 제 3자가 보지 못하게 합니다.
두번째, 접속한 사이트가 믿을 만한 곳인지를 알려줍니다.

 

 

2. HTTP란 무엇일까요?

사용자 컴퓨터에서 네이버 웹사이트에 접속하면 컴퓨터는 네이버 서버에 메시지를 보냅니다. 그럼 네이버 서버는 사용자에게 메시지를 다시 보냅니다. 그런데 그 메시지는 매우복잡하고 어려워서 사람들이 보기에도 어렵고, 특이하게도 컴퓨터도 못읽습니다. 왜냐하면 이 메시지가 어떤 형식으로 작성됐는지를 모르기 때문입니다. HTTP는 인터넷상의 커뮤니케이션에 사용되는 형식들중 하나입니다. 사용자 컴퓨터에서 네이버 서버에 요청을 보낼 때는 주소를 보낼때마다 '자 이 메세지들은 HTTP(S) 형식이야' 하고 주소창에 써서 일일이 명시를 해 줘야 네이버 서버는 이걸 HTTP 형식으로 읽어본 다음에 '이러한 페이지를 보여달라는구나!' 하고 알아듣고서 그에 맞는 응답을 작성해서 보내고 내 컴퓨터는 이걸 HTTP형식에 따라 해독해서 화면을 보여주게 됩니다. 

즉, 이 HTTP형식에 앞서 말한 보안 기능까지 추가한게 HTTPS 인겁니다.

 

 

 

3. 대칭키란 무엇일까요?

만약에 아군이 아군사이에 메시지를 보낼때 중간에 적이 편지를 탈취해도 이를 알아볼 수 없도록 하려면 암호화를 해야합니다. 그리고 그 암호화된 메시지는 아군만 읽을 수 있어야 합니다. 그래서 옛날부터 이를 위한 방식들이 고민되어 왔습니다. 그동안 널리사용되온 건 대칭키 방식입니다. 메시지를 보내는 쪽과 메시지를 받는 쪽이 메시지를 암호화하고 이를 다시 메시지로 바꾸는 즉, 복호화 같은 방식을 공유하는 겁니다. 만약 암호 해독 하는 표를 대칭으로 양쪽이 똑같이 가지고 있다면 중간에 편지가 가로채어도 본문이 노출될 걱정이 없이 얼마든 메시지를 주고 받을 수 있습니다. (대칭으로 가지고 있는 암호 해독하는 표만 노출이 안된다면 문제가 없습니다.)

대칭키가 만들어지는 방식은 다음과 같습니다.

만약 임의의 문자열이 있습니다. 이걸 '키'라고 부릅니다. 상대방에게 보내고자하는 메시지를 이 '키'와 함께 어떤 알고리즘에 넣고 돌리면 전혀 알 수 없는 암호문이 만들어집니다. 이 암호문을 받은 사람이 해독하려면 이 키값을 넣고 이 알고리즘을 거꾸로 돌리면 됩니다. 이 과정을 복호화라고 합니다. 그래서 이 '키'값을 알지 못하면 절대 이 암호문을 해독할 수 없습니다. 즉, 이제 사용자 컴퓨터와 네이버 서버에 동일한 키가 있다면 사용자가 로그인할 때 실어보내는 비밀번호를 키로 암호화하고 네이버는 이것을 복호화해서 인식할 수 있습니다.

그런데 문제가 있습니다. 그런 중요한 '키'를 애초에 양쪽이 공유한다는 겁니다. 결국 한번은 한쪽에서 다른 한쪽으로 이 키를 전송해야하는데, 중간에 이 키를 훔쳐본다면 말짱 꽝이 되는겁니다. 다시 원점으로 돌아오게 되는거죠. 이게 대칭키의 한계입니다.

 

 

 

4. 비대칭키란 무엇일까요? (개발자들은 '공개키'라고 많이 부릅니다.)

아까 언급한 대칭키를 보안한 새 방식이 1970년대에 수학자들에 의해 개발이 되었습니다. 비대칭키, 또는 공개키라 불리는 시스템입니다. 비대칭키는 신기하게도 두개의 키가 사용됩니다. 각각 A키와 B키라고 부르겠습니다.

이 둘은 한쌍입니다. 서로 다르기 때문에 '비대칭키'라고 부릅니다. 이 암호화 방식을 개발한자들은 보통 '공개키'라고 많이 부릅니다. 대칭키 시스템에서는 어떤 키로 암호화를 하면 같은 키로 복호화를 할 수 있었지만, 여기서는 A키로 암호화를 하면 B키로만 복호화를 할 수 있습니다. 반대로 B키로 암호화를 하면 A키로만 풀 수 있습니다. 

그래서 네이버 서버는 이 두키들 중 하나를 비밀키로 보관합니다. 이것을 '개인키'라고 부릅니다. 다른 하나를 그냥 대중에게 공개를 해요. 누구나 볼 수 있도록 말이죠. 이것을 '공개키'라고 부릅니다.

이제는 사용자는 이 공개키로 정보를 암호화해서 네이버에 보냅니다. 누군가가 가로채도 안전하다. 아까 말씀드렸듯 같은 공개키로는 이 암호문을 절대 풀어낼 수 없습니다. 이걸 볼 수 있는건 오직 이 개인키를 가진 네이버 뿐인겁니다. 

 

그럼 다음문제로는, 이 사이트가 네이버인걸 어떻게 증명하나요? 

네이버에서 우리에게 보내는 정보들은 그 일부가 이 네이버의 개인키로 암호화가 되어있습니다. 우리가 네이버의 공개키로 풀어서 알아볼 수 있는건 네이버의 개인키로 암호화된 정보들 뿐입니다. 그래서 타 사이트에서 온 정보들은 네이버의 공개키로 풀리지 않기 때문에 네이버의 공개키로 열어보려 하면 오류가 납니다. 이렇게 신뢰할 수 있는 기관에서 사용자에게 네이버의 공개키만 검증해준다면 사용자는 이걸 기준으로 안전하게 네이버를 이용할 수 있습니다.

 

 

직접 사이트를 개발을 할 게 아니라면 이정도 배경지식이면 HTTPS를 충분히 이해했다고 할 수 있습니다!