앞서 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키로만 복호화를 할 수 있다.
네이버 서버는 한 쌍의 두 키들 중, 하나는 비밀로 보관하고(이걸 '개인키'라고 부른다.) 다른 하나를 누구나 볼 수 있도록 대중에게 공개한다.(이건 '공개키'라고 부른다.)
이제 사용자는 이 공개키로 비밀번호를 암호화하여 네이버에 전송한다.
만약, 중간에 누가 가로채면 어떡하지..? 말했듯이, 같은 공개키를 갖고 있는 제3자는 이 암호문을 풀어낼 수 없다.
이 암호문을 복호화 할 수 있는 건 개인키를 가진 네이버 뿐이다.
앞에서 설명한 대칭키, 비대칭키를 이용하여 내가 사이트에 보내는 정보(ex: 내 ID, password)를 제3자가 알아보지 못하게 할 수 있었다.
그렇다면 내가 접속하는 사이트가 네이버인건 대칭키와 비대칭키를 이용해서 어떻게 증명할까?
네이버에서 우리에게 보내는 정보들은 그 일부가 이 네이버의 개인키로 암호화되어있다.
우리가 네이버의 공개키로 풀어서 알아볼 수 있는건 네이버의 개인키로 암호화된 정보들 뿐이다.
네이버가 아닌 '네이놈'이라는 사이트에서 온 정보들은 네이버의 공개키로 복호화 할 수 없기 때문에('네이놈'사이트에서 온 정보들은 네이버의 개인키가 당.연.히. 없기 때문) 네이버의 공개키로 열어보려 하면 오류가 난다.
신뢰할 수 있는 기관에서 우리에게 네이버의 공개키만 검증해준다면, 우린 이걸 기준으로 안전하게 네이버를 이용할 수 있다.
여기까지는 중간맛까지이고,
조금 더 구체적인 HTTPS 통신과정은
이전에 발행한 포스트를 참고하면 훨씬 좋을 것 같다!
2021.11.04 - [인증 보안] - HTTPS 통신과정
**모든 글과 그림의 출처는 유튜브 영상 '얄팍한 코딩사전'입니다.
'Network' 카테고리의 다른 글
[얄팍한 코딩사전] HTTPS는 무엇인가? 그리고 왜 쓸까?(ft. 대칭키 vs 비대칭키) 1편 (1) | 2024.01.25 |
---|---|
로그인 인증/인가 방식 2. 토큰 방식 (2) | 2024.01.22 |
로그인 인증/인가 방식 1. 세션 방식 (0) | 2024.01.17 |
HTTPS 통신과정 (0) | 2021.11.04 |
[얄팍한 코딩사전] HTTP는 뭘까? (0) | 2021.11.04 |