공개키 암호는 '한 번도 만난 적 없는 상대'와 비밀을 나누는 방법입니다.
해시는 되돌릴 수 없습니다 — 확인에는 좋지만, 다시 읽어야 하는 비밀에는 못 씁니다.
결제 정보나 통신 내용은 잠갔다가 다시 열어야 하죠. 그것이 암호화입니다.
암호화에는 두 종류가 있고, 이 둘의 차이를 이해하면 HTTPS(6강)가 통째로 이해됩니다.
먼저, 흔한 착각부터 — 인코딩은 암호가 아닙니다
base64 같은 인코딩은 모양만 바꿉니다. 열쇠가 없어요.
누구나 되돌릴 수 있는데도, 이걸 '암호화했다'고 착각하는 시스템이 정말 많습니다.
결과 아래 설명 — 이건 암호가 아닙니다.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
인코딩은 잠금이 아니라 '표기법 바꾸기'일 뿐입니다.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
대칭키 — 같은 열쇠로 잠그고 연다
가장 직관적인 암호입니다. 자물쇠 하나에 열쇠 하나. AES 가 대표적이에요.
빠르고 튼튼합니다. 문제는 딱 하나 — 그 열쇠를 상대에게 어떻게 전달하죠?
인터넷에서 처음 만난 서버와는 열쇠를 미리 나눌 방법이 없습니다.
열쇠를 그냥 보내면 도청하는 사람(8강)이 같이 봐 버리고요. 이게 수천 년 묵은 난제였습니다.
대칭키 암호 — 빠르지만 열쇠 전달이 숙제로 남습니다.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
공개키 — 열쇠를 둘로 쪼갠 혁명
1970년대에 이 난제가 풀립니다. 열쇠를 짝으로 만드는 거예요.
공개키 (public)
누구에게나 줘도 된다. 이걸로 잠그면 개인키로만 열린다
개인키 (private)
나만 갖는다. 절대 남에게 주지 않는다
이제 상대가 나에게 비밀을 보내려면 내 공개키로 잠그면 됩니다.
그건 내 개인키로만 열리니까, 도중에 누가 가로채도 못 열어요.
열쇠를 미리 나눌 필요가 없어졌습니다!
공개키/개인키 한 쌍을 만듭니다. 짝의 두 가지 쓰임을 보세요.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
거꾸로 잠그면 — '서명'이 됩니다
개인키로 잠그고 공개키로 여는 것도 됩니다. 이게 왜 쓸모 있냐고요?
나만 개인키를 갖고 있으니, 개인키로 잠근 것을 공개키로 열 수 있다면
"이건 틀림없이 그 사람이 만든 것"이라는 증명이 됩니다. 이것이 디지털 서명이에요.
패키지를 내려받을 때 서명을 확인하는 이유가 이것입니다 —
중간에서 누가 바꿔치기하면 서명이 깨지거든요. 인증서(6강)도 이 서명 위에 세워집니다.
다운로드가 진짜 원본인지 서명으로 확인합니다.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
🤔 확인 문제
인터넷에서 처음 만난 서버와 미리 열쇠를 나눈 적이 없는데도 비밀 통신이 가능한 이유는?
해설 공개키 암호의 핵심입니다. 상대의 공개키로 잠근 것은 상대의 개인키로만 열리므로, 도청자가 가로채도 열 수 없어요. 열쇠 전달 문제가 사라진 겁니다.
🤔 확인 문제
어떤 파일이 base64 로 '인코딩'되어 있습니다. 안전한가요?
해설 인코딩은 표기법 바꾸기일 뿐 잠금이 아닙니다. 열쇠가 없으니 base64 -d 한 줄로 되돌아와요. 비밀번호를 base64 로 '숨긴' 시스템이 유출되면 그냥 다 털립니다.