개념정리 - HTTPS

Seungmin Shin·2021년 8월 2일
1

코딩 개념정리

목록 보기
27/33

HTTP? HTTPS?

우리는 기존에 HTTP ( Hyper Text Transfer Protocol ) 에 대해서는 배웠었습니다.
살짝 복기를 하자면 HTTP는 " 웹상에서 클라이언트와 서버가 데이터를 주고받기 위한 통신규약 " 이죠.

HTTPS 는 우리가 웹서핑을 하면서 너무나도 쉽게 접할 수 있지 않나요?
구글에만 들어가도 그 주소가 " https://www.google.com " 이죠? 정말 흔하게 볼 수 있습니다.

예전에는 HTTP 가 많이 쓰였지만, 이제는 모두가 알법한 유명한 사이트들은 거의 전부 HTTPS 를 사용합니다.
왜 그럴까요? S가 하나 붙고 안붙고가 어떤 차이를 가지길래 그러는걸까요? 그 이유에 대해 알아보겠습니다.

HTTPS 의 기능

일단 HTTPS 뒤에 오는 S는 " Secure " 을 뜻합니다, 직역하면 ' 안전한 ' 이란 뜻이죠,
기존의 HTTP 보다 안전하다는 의미를 가지고 있습니다. 그렇다면 무엇으로부터 안전하다는 말일까요?
크게 두가지로 나뉘게 됩니다.

1. 내가 특정 웹사이트에 보내는 정보를 제 3자가 훔쳐보지 못하게 한다.

우리가 구글에 접속해서 로그인을 하려고 아이디와 비밀번호를 입력했다고 생각해보겠습니다.
정보를 입력하고 로그인 버튼을 누르면, 우리가 입력한 아이디와 비밀번호의 정보가 인터넷을 타고
구글의 서버로 전송되게 됩니다. 그런데 이것을 그냥 HTTP로 보낸다면 우리가 입력한 정보들이
우리가 입력한 텍스트 그대로, 누구나 알아볼 수 있는 형식으로 보내지게 됩니다.

만약 제3자인 누군가가 이 정보를 중간에 들여다볼 수 있게 된다면? ( 아마 해커들이겠죠? )
우리가 입력한 정보가 그대로 노출이 될겁니다. 그 사람은 이제 우리의 구글 아이디와 비밀번호를 알게된겁니다.

다 알고 있습니다, 대부분 다른 웹사이트 들도 다 똑같은 아이디와 비밀번호를 쓰고 계시죠?
그렇다면 사실상 다른 웹사이트의 정보들도 모두 털렸다고 볼 수 있겠네요.

( 그래서 웹사이트들 마다 조금씩 다른 로그인 정보를 입력하는걸 권장합니다. )

아무튼 이런 상황이 생기지 않기위해, HTTPS 는 무엇을 하느냐?

바로 우리가 입력한 정보들을 서버에 전송할때 그냥 보내는것이 아니라 뭔가 뒤죽박죽 섞인 텍스트로 변환하여
서버에 전송합니다.

이런식으로 말이죠, 위의 사진으로 이해가 되시나요? 같은 정보를 입력해서 전송했는데
HTTP는 작성한 내용 그대로 전송이 되기에 저것을 보는 우리들도 입력된 정보의 내용을 확인할 수 있지만.
HTTPS는 그 내용을 저런식으로 암호화 시켜서 서버에 보내게 됩니다. 그럼 제 3자가 본다고 해도
저 내용이 무엇을 의미하는지는 알아낼 수 없을겁니다.

2. 우리가 접속한 사이트가 신뢰할 수 있는 사이트인지를 판별한다.

구글에 들어가려고 링크를 클릭했더니 굉장히 비슷한 고글이라는 피싱사이트에 들어가게 되는 경우가 있습니다.
너무 교묘해서 젊은 층도 많이 헷갈리고 인터넷을 잘 모르시는 어르신들은 쉽게 당하시는 피싱입니다.

그래서 그 고글이라는 피싱사이트의 로그인창에 구글 아이디와 비밀번호를 입력하고 로그인버튼을 누른다면
그 피싱사이트가 우리의 구글계정을 알게되는것입니다. 일반적인 사이트의 정보가 해킹되도 타격이 큰데
만약 나의 계좌 정보가 들어있는 은행 사이트라면? 상황은 심각해지겠죠? 항상 주의하셔야합니다.

HTTPS는 이런 같은 수상한 사이트를 걸러줍니다.

HTTPS는 아무 웹사이트에서 사용할 수 있는게 아닙니다. 검증된 기관의 허가가 있어야만
그 사이트에 HTTPS를 사용할 수 있게됩니다.

그리고 이제 그냥 HTTP를 사용하는 사이트들에는

이렇게 " 안전하지 않다 " 라는 경고표시가 뜨게 됩니다.

그렇기 때문에 이제 주소창의 HTTPS, HTTP 를 잘 확인하시고 사이트를 방문한다면
기존보다는 조금 더 안전하고 신뢰있게 사이트를 이용할 수 있겠죠?

결론
1. 내가 특정 웹사이트에 보내는 정보를 제 3자가 훔쳐보지 못하게 한다.
2. 우리가 접속한 사이트가 신뢰할 수 있는 사이트인지를 판별한다.

  • 이 두가지 이유로 HTTP 보다 HTTPS가 더 안전하다.

3. HTTPS 의 기능이 작동하는 원리

위의 2번의 개념은 HTTPS 의 가장 기초적인 원리입니다, 저정도는 개발자와 관련 없는 분들이 알아두어도
크게 어렵지 않을 개념입니다. 하지만 우리는 개발자 지망생이니 여기서 한층 더 들어가 보겠습니다.

바로 위에서 설명한 HTTPS의 두가지 기능이 작동하게 되는 원리를 알아보는겁니다.

그러기 위해서는 일단 대칭키비대칭키라는 개념에 대해 알아야 합니다.

1) 대칭키

전시상황이라고 가정해봅시다, 전시상황에 다른 지역에 있는 아군에게 우리의 기밀정보가 담긴
편지를 전달해야 합니다, 하지만 혹시나 모를 상황 ( 적군에게 편지를 탈취당한다 ) 이 생긴다면
우리의 기밀정보들이 모두 적군에게 넘어갈 수 있으니 정보의 내용을 암호화 해야되겠죠?
그리고 그 암호화 된 정보는 아군만이 읽을 수 있어야 할겁니다.

어떤 상황인지 이해가 되시나요? 중간의 제 3자의 개입이 있다고 해도 결국은 보내는사람과 받는사람만이
주고받는 정보를 읽을 수 있게 하기위해 그 정보를 암호화 시키는겁니다.

그 방법을 오랫동안 고민해 왔고 그 고민을 해결하고 널리 쓰여졌던것이 바로 대칭키 방식이었습니다.
보내는쪽과 받는쪽이 모두 정보를 암호화시키고, 복호화시키는 키를 공유하고있는 방식이었죠.

예를 들어

순서복호화 문자암호화 문자
1aae#g
2b@%Dc
3cg6&%

이런식으로 암호를 해독할 수 있는 표를 양쪽이 똑같이 가지고 있는겁니다.
이렇게 된다면 중간에 누가 가로챈다고 해도 해석할 수 없으니, 표를 가지고 있는 두 사람만 얼마든지
메세지를 주고받을 수 있을겁니다, 표만 노출되지 않는다면 말이죠.

컴퓨터에서 사용하는 대칭키라는것이 바로 이런 암호표와 같습니다.
"a04$kd%3d@#34" 같은 임의의 문자열이 있는데, 이것을 "키"라고 부릅니다.

3 x 4 = 12 가 되죠? 이런 방식처럼 우리가 전달하고자 하는 메세지와 저 키를 어떤 알고리즘에 넣고
돌리면 전혀 알 수 없는 암호문이 만들어집니다.

반대로 12에서 4을 얻으려면 3으로 나눠야하는것처럼 다시 생성된 암호문에 저 키를 넣고 거꾸로 돌리면
원문이 나타나게 됩니다. 저 임의의 키값을 알지 못하면 절대 암호문을 해독할 수 없습니다.

정리해보자면 우리가 보내게 될 정보를 암호화하거나 해독할 수 있는 키를 보내는쪽 받는쪽이
하나씩 가지고 있으면서, 우리는 정보를 보내면서 이 키로 암호화 시켜서 전달하게되면
받는쪽에서 다시 키를 가지고 암호화 된 정보를 복호화 시켜서 원문을 얻게 되는 방식이 되는겁니다.

2) 대칭키의 치명적 단점

그런데 이 대칭키 방식에는 매우 치명적인 단점이 하나 존재합니다.

원초적인 질문으로 돌아가야 하는데요, 애초에 이 동일한키를 어떻게 양쪽이 모두 가질 수 있냐는 거죠.
같은 키를 두 곳에서 가지려면 어쨌든 한번은 그 키가 한쪽에서 한쪽으로 이동을 해야하는 경우가 발생하는데,
만약 그때를 노리고 제 3자가 그 키를 탈취하게 된다면, 이 대칭키는 아무 의미가 없어지게 됩니다.

문제가 원점으로 돌아와 버렸습니다, 이것이 바로 대칭키의 한계입니다.

3) 비대칭키 ( 공개키 )

위의 대칭키의 단점을 보완하여 새롭게 등장한것이 바로 비대칭키 또는 공개키로 불리는 녀석입니다.
여기서는 비대칭키라고 부르도록 하겠습니다.

이 비대칭키에는 두개의 키가 사용됩니다, A 와 B 라고 부르겠습니다.

이 둘은 한 쌍입니다, 그렇지만 서로 다르기때문에 "비대칭키" 라고 불립니다.

대칭키 방식에서는 어떤 임의의 키로 암호화를 하면 같은키로 복호화를 할 수 있었지만,
이 비대칭키 방식에서는 A로 암호화를 했다면 B로만 복호화를 할 수 있습니다.
반대로 B로 암호화를 했다면, A로만 풀 수가 있습니다.

서버는 이 두개의 키중 하나를 보관합니다, 이것을 개인키 라고 합니다.
나머지 다른 하나는 누구에게나 공개합니다, 이것을 공개키 라고 합니다.

그럼 사용자는 이 공개키를 가지고 정보를 암호화 하여 서버에게 전달합니다.
이 과정에서 제 3자는 정보를 복호화 할 수 없습니다, 복호화는 개인키로만 가능하기때문이죠.
그렇기 때문에 사용자가 보낸 정보를 볼 수 있는건 개인키를 가진 서버뿐입니다.

이러한 원리로 이제는 우리의 개인정보를 안심하고 서버에 전달할 수 있게 된 것입니다!

4) 사이트의 신뢰성 판별원리

아까 HTTPS 의 기능중 두번째 기능인 "우리가 접속한 사이트가 신뢰할 수 있는 사이트인지를 판별한다." 의
기능이 가능하게 되는 원리는 이 비대칭키 방식을 이용하게 됩니다.

서버에서 우리에게 보내는 정보들은 일부가 서버의 개인키로 암호화가 되어있습니다.
서버의 개인키와 연결되어있는 공개키를 가진 우리는 그 암호화된 정보들을 열어볼 수 있을겁니다.

만약 그 서버와 비슷한 피싱서버에서 사용자에게 서버인척 정보를 전달하더라도
그곳에서 온 정보들은 서버와 연결되어있는 공개키로는 열리지 않기때문에
서버의 공개키로 열려고 한다면 오류가 날겁니다.

그리고 이 키 또한 신뢰할 수 있는 기관에서 서버의 키가 맞다고 검증된다면
우리는 걱정없이 서버를 이용할 수 있게 될겁니다.

출처:
https://www.youtube.com/watch?v=H6lpFRpyl14

profile
Frontend Developer

0개의 댓글