본문 바로가기

Network

[얄팍한 코딩사전] HTTPS는 무엇인가? 그리고 왜 쓸까?(ft. 대칭키 vs 비대칭키) 2편

앞서 1편에서 HTTP대신 HTTPS를 사용하는 이유를 크게 2가지로 설명하였다.

1. 내가 사이트에 보내는 정보(ex: 내 ID, password)를 제3자가 알아보지 못하게 하기 위해서(암호화)

2. 내가 접속한 사이트가 믿을만한 곳인지

 

이 두 보안 기능이 어떤 원리로 구현되는지 알기 위해서는

대칭키비대칭키의 개념을 알아야 한다.

 

 

1. 대칭키 방식

전쟁에서 아군에게 편지로 메시지를 보낼 때, 중간에 적군이 편지를 탈취해도 이를 알아볼 수 없도록 하려면 메시지의 내용을 '암호화' 해야한다.

그 암호화된 메시지는 아군만 읽을 수 있어야 한다. 그래서 옛날부터 이를 위한 방식들이 고민되어 왔다.

그동안 널리 사용되어 온 건 이 '대칭키 방식'.

 

ex: 양쪽 모두 A=27, B=9, C=51.. 이런 표를 대칭으로, 즉 양쪽이 똑같이 가지고 있다면 

중간에 편지가 가로채여도 본문이 노출될 걱정없이 얼마든지 메시지를 주고받을 수 있다.

단, 이 표만 노출되지 않는다면!

양쪽다 똑같은 표(대칭키)를 가지고 있다.

 

 

컴퓨터에서 사용하는 '대칭키'는 이 표와도 같다.

이런 임의의 문자열(a084#...)이 있다. 이걸 '키'라고 부른다.

4(보내고자 하는 메시지)에 3(대칭키)을 곱하면 12(암호화된 메시지. 즉, 뒤죽박죽의 텍스트)가 된다.

이처럼, 상대방에게 보내고자 하는 메시지를 이 '대칭키'와 함께 어떤 알고리즘에 넣고 돌리면 전혀 알수없는 암호문이 만들어진다.(암호화)

 

 

 

12(암호화된 메시지)에서 4(보내고자 하는 메시지)를 얻어내려면 3(대칭키)으로 나눠야 한다.

이처럼, 암호문을 받은 사람은 이걸 해독하려면, 이 키값(대칭키)을 넣고 이 알고리즘을 거꾸로 돌리면 된다.

이 과정 --> 복호화

 

 

 

내 컴퓨터와 네이버 서버가 동일한 키(대칭키)를 가지고 있다면,

내가 로그인할 때 실어보내는 비밀번호를 이 대칭키로 암호화하고,

네이버는 대칭키로 암호화된 내 비밀번호를, 똑같이 가지고 있는 대칭키로 복호화하여 인식할 수 있다.

중간에 제3자가 이걸 훔쳐보더라도 완전히 뒤죽박죽의 텍스트라 알아볼 수 없다.

 

 

 

 

하지만, 대칭키의 한계가 존재한다!

뚜둥..!

 

문제는, 어떻게! 이 동일한 키(대칭키)를 애초에 양쪽에 공유하느냐 이다.

결국, 한번은 한쪽에서 다른 한쪽으로 이 키를 전송해야 하는데,

그때 중간에 이걸 제3자가 훔쳐본다면 말짱 꽝이 된다..

이것이 바로 대칭키의 한계.

 

 

 

2. 비대칭키 방식(= 공개키 방식)

이러한 대칭키의 한계점을 보완한 새 방식이 1970년대에 수학자들에 의해 개발되었다.

--> 비대칭키 방식 또는 공개키 방식이라고 불리는 시스템

비대칭키 방식에는 서로 다른 두 개의 키가 사용된다.

각각 A키와 B키라고 하자. 이 둘은 한 쌍이고, 서로 다르기 때문에 '비대칭키'라고 부른다.

 

대칭키 시스템에서는 어떤 키로 암호화를 하면, 같은 키로 복호화를 할 수 있었지만 

여기서는 A키로 암호화를 하면, B키로만 복호화를 할 수 있다.

반대로 B키로 암호화를 하면, A키로만 복호화를 할 수 있다.

A키로 암호화 하면, B키로만 복호화를 할 수 있다.
B키로 암호화를 하면, A키로만 복호화를 할 수 있다.

 

네이버 서버는 한 쌍의 두 키들 중, 하나는 비밀로 보관하고(이걸 '개인키'라고 부른다.) 다른 하나를 누구나 볼 수 있도록 대중에게 공개한다.(이건 '공개키'라고 부른다.)

이제 사용자는 이 공개키로 비밀번호를 암호화하여 네이버에 전송한다.

만약, 중간에 누가 가로채면 어떡하지..? 말했듯이, 같은 공개키를 갖고 있는 제3자는 이 암호문을 풀어낼 수 없다.

이 암호문을 복호화 할 수 있는 건 개인키를 가진 네이버 뿐이다.

같은 공개키를 가지고 있는 제3자는 암호문을 해독할 수 없다. 한 쌍 중 다른 키인 개인키를 가진 네이버만 복호화할수 있을뿐!

 

 

앞에서 설명한 대칭키, 비대칭키를 이용하여 내가 사이트에 보내는 정보(ex: 내 ID, password)를 제3자가 알아보지 못하게 할 수 있었다.

 

 

그렇다면 내가 접속하는 사이트가 네이버인건 대칭키와 비대칭키를 이용해서 어떻게 증명할까?

네이버에서 우리에게 보내는 정보들은 그 일부가 이 네이버의 개인키로 암호화되어있다.

우리가 네이버의 공개키로 풀어서 알아볼 수 있는건 네이버의 개인키로 암호화된 정보들 뿐이다.

네이버가 아닌 '네이놈'이라는 사이트에서 온 정보들은 네이버의 공개키로 복호화 할 수 없기 때문에('네이놈'사이트에서 온 정보들은 네이버의 개인키가 당.연.히. 없기 때문) 네이버의 공개키로 열어보려 하면 오류가 난다.

 

신뢰할 수 있는 기관에서 우리에게 네이버의 공개키만 검증해준다면, 우린 이걸 기준으로 안전하게 네이버를 이용할 수 있다.

여기까지는 중간맛까지이고, 

 

조금 더 구체적인 HTTPS 통신과정은

이전에 발행한 포스트를 참고하면 훨씬 좋을 것 같다!

 

2021.11.04 - [인증 보안] - HTTPS 통신과정

 

HTTPS 통신과정

HTTPS 통신과정이 한 자료만 읽고 이해하기에는 나한테는 많이 어려웠다. 여러 블로그 글들, '얄팍한 코딩사전', '생활코딩' 영상을 보고 드디어 HTTPS 통신과정을 이해하게 되었고, 이해한 걸 스스

lion284.tistory.com

 

 

**모든 글과 그림의 출처는 유튜브 영상 '얄팍한 코딩사전'입니다.