Secure Shell의 이해…
SSH란 무엇인가
Secure Shell · 암호화된 원격 접속의 원리를 부절(符節)로 이해하다 네트워크 보안 암호화
원격 서버에 접속할 때 우리는 흔히 SSH를 사용한다.
Secure Shell, 즉 “안전한 껍데기”라는 뜻인데 — 이 간단해 보이는 도구 안에는
수학적으로 정교한 암호화 체계가 숨어 있다. 이 글은 그 원리를
부절(符節)이라는 고전적 개념에 빗대어 직관적으로 풀어낸다.
암호화의 두 가지 방식
대칭 암호화 — 같은 열쇠
가장 단순한 방식이다. 잠글 때 쓴 열쇠와 열 때 쓴 열쇠가 동일하다. 금고 열쇠를 둘이 나눠 갖는 셈인데, 문제는 처음 그 열쇠를 어떻게 안전하게 전달하느냐다. 전달 과정에서 해커에게 탈취되면 모든 암호화가 무너진다.
비대칭 암호화 — 다른 열쇠
비대칭(Asymmetric)이라는 이름은 여기서 나온다. 암호화하는 키와 복호화하는 키가 서로 다르다. 잠그는 자물쇠(Public Key)와 여는 열쇠(Private Key)가 별개인 방식이다.
부절(符節) — 수천 년 전의 암호화
부절(符節)은 고대 동아시아에서 사용하던 신분증이자 계약 증표다. 나무패·옥·금속 등에 글자나 문양을 새기고 정확히 반으로 갈라 각자 한 쪽씩 보관했다가, 나중에 맞춰봄으로써 신원과 계약을 확인했다. 단순하지만 위조가 사실상 불가능했다 — 천연 소재의 결과 문양이 완벽히 일치해야 하기 때문이다.
부절의 역사 — 그리고 한 편의 도둑 이야기
부절의 기록은 주(周)나라(기원전 11세기경)부터 등장한다. 처음에는 대나무나 나무를 반으로 쪼개 사용했지만(木符), 이후 옥·청동·금으로도 제작됐다. 군사 지휘권 위임, 외교 사신 신원 확인, 창고 수령 권한 증명까지 — 고대의 “공인인증서”였다.
그 중 가장 유명한 것이 호부(虎符)다. 호랑이 모양 청동패를 반으로 나눠 황제가 한 쪽, 장군이 한 쪽을 가졌다. 전쟁을 일으키려면 이 두 조각이 반드시 맞아야 했다. 한 쪽만으론 군대를 단 한 명도 움직일 수 없었다.
그런데 기원전 257년, 재미있는 사건이 하나 터진다. 조나라가 진나라 대군에 포위돼 풍전등화가 됐고, 위나라 공자 신릉군(信陵君)은 조나라를 구하고 싶었다. 문제는 위나라 왕이 출병을 거부했다는 것.
고민 끝에 신릉군은 왕의 총애를 받는 여희(如姬)를 설득, 왕의 침실에 보관된 호부를 몰래 훔쳐낸다. 도둑질한 호부를 들고 장수 앞에 나타나자 — 군대가 즉시 움직였다. 호부가 맞았으니까. 군대 입장에선 왕의 명령과 구별이 불가능했다.
이 일화에서 “병부를 훔쳐 군대를 움직였다(竊符救趙-병부절구)”는 고사성어가 탄생했다. 그리고 이 이야기는 부절 시스템의 강점과 약점을 동시에 보여준다 — 물리적 실물이 곧 권한이기에, 실물을 빼앗기면 권한도 빼앗긴다. 현대의 SSH Private Key를 절대 유출하면 안 되는 이유가 바로 여기서 나온다. 우리나라에서도 조선시대 암행어사의 마패(馬牌)가 같은 원리를 이었다.
| 부절 | 디지털 서명 (비대칭 암호화) |
|---|---|
| 찢기 전 원본 패턴 | 키 쌍 생성 시 수학적 기반 |
| 내가 보관하는 반쪽 | Private Key (절대 공개 금지) |
| 상대에게 주는 반쪽 | Public Key (자유롭게 공개) |
| 맞춰보기 | 서명 검증 |
| 딱 들어맞음 | 인증 성공 |
| 반쪽만 봐서는 원본 복원 불가 | Public Key로 Private Key 역추론 불가 |
왜 처음부터 키가 두 개인가
SSH를 처음 접하면 자연스럽게 드는 의문이 있다.
이 의문이 풀리는 순간이 바로 부절을 떠올렸을 때다.
먼저 하나의 완전한 패를 만든다 → 그 패를 갈라 두 조각으로 나눈다.
두 조각을 따로 만들면 절대 맞지 않는다. 갈라지기 전 하나의 원본에서 비롯됐을 때만 비로소 딱 들어맞는다.
SSH 키 생성도 정확히 이와 같다.
ssh-keygen 명령을 실행하는 순간,
컴퓨터는 RSA·ECDSA 같은 수학적 알고리즘으로
두 개의 키를 한 쌍으로 동시에 만들어낸다.
따로 만든 후 연결하는 것이 아니다 —
처음부터 서로만 통하도록 수학적으로 묶인 관계로 탄생하는 것이다.
그리고 이 두 키 사이에는 중요한 단방향 관계가 있다.
| 방향 | 가능 여부 | 이유 |
|---|---|---|
| Private Key → Public Key 유도 | ✓ 가능 | 수학적으로 도출할 수 있음 |
| Public Key → Private Key 역추론 | ✗ 불가 | 천문학적 계산 시간 필요 (현실적으로 불가능) |
SSH 키 쌍의 구조
SSH 연결을 처음 설정할 때, 클라이언트와 서버는 각각 독립적으로 키 쌍을 생성한다. 한 쌍은 서로 교환하지 않는다 — 오직 Public Key만 상대에게 전달한다.
SSH 접속 전체 흐름
실제 SSH 접속은 아래 4단계로 이루어진다. 비대칭 키는 주로 신원 확인에 집중되고, 실제 데이터 전송은 그보다 빠른 대칭키(세션키)가 담당한다.
잠깐 — “맞춰본다”는 게 구체적으로 어떻게 일어나나?
여기서 자연스럽게 드는 의문이 있다. 부절은 두 조각을 물리적으로 갖다 대면 맞는지 바로 보인다. 그런데 SSH에서는 대체 어떻게 “맞춰보는” 걸까? 설마 서버가 내 Private Key를 직접 들여다보는 건 아닐 텐데.
정답은 간단하다. 서버가 퀴즈를 낸다. 보안 용어로는 챌린지-리스폰스(Challenge-Response)라고 하는데, 마치 경비원이 “암호 대봐”라고 하는 것과 비슷하다.
“이걸 암호화해서 보내봐:
x7k2m9q...“→ 매번 다른 문자열 (재사용·도청 방지)
“내 Private Key로 사인했어:
∂ƒ©˙∆≈ç...“→ Private Key 없이는 이 서명을 절대 만들 수 없음
“내가 가진 Public Key로 맞춰보니 딱 맞네 → 입장!”
→ Private Key는 단 한 번도 서버로 전송되지 않음
그래서 이런 비유도 성립한다.
신릉군이 호부를 훔쳐 군대를 움직였듯 — 누군가 나의 Private Key를 탈취한다면,
서버는 그 사람을 나로 믿어버린다.
.pem 파일을 목숨처럼 지켜야 하는 이유가 바로 이것이다.
핵심 정리
.pem 키 파일은 바로 나의 Private Key — 부절에서 내가 간직하는 반쪽이다.
서버에 등록된 Public Key와 수학적으로 딱 들어맞을 때만 문이 열린다.
고대 부절에서 현대 SSH로
수천 년 전 선조들이 맞닥뜨린 문제는 단순했다.
그들이 찾아낸 해답이 부절이었다. 하나의 원본에서 쪼개진 것이니 위조는 불가능하고, 맞춰보는 것만으로 신원이 확인된다. 군사 명령의 정당성, 외교 사신의 신원, 상업 계약의 이행 — 이 모두를 부절 하나로 해결했다.
2천 년이 지난 지금, 같은 문제가 디지털 세계에서 반복된다.
현대의 해답도 본질은 같다. 수학적 알고리즘으로 만든 한 쌍의 키 — 위조가 천문학적으로 불가능하고, 검증은 즉각적이다. 다만 딱 한 가지, 결정적으로 다른 점이 있다.
물리적 일치 vs 수학적 일치
| 🪧 부절 (호부) | 💻 SSH 키 | |
|---|---|---|
| 맞춰보는 방식 | 두 조각을 물리적으로 갖다 댄다 | 수학적 서명을 계산해 검증한다 |
| 위조가 어려운 이유 | 천연 소재의 결을 재현할 수 없음 | 소인수분해를 역산할 수 없음 |
| 탈취당하면 | 실물이 곧 권한 — 끝 | Private Key가 곧 권한 — 끝 |
| 원격 검증 | 불가능 (직접 만나야 함) | 가능 (인터넷 너머로도) |
호부는 장군이 황제를 직접 만나야 검증이 됐다. SSH는 지구 반대편 서버와도 0.1초 만에 검증이 끝난다. 2천 년 만에 생긴 가장 큰 업그레이드는 아이러니하게도 “안 만나도 된다”는 것이다.
매체가 나무패에서 숫자로 바뀌었을 뿐, “나만 가진 것”으로 “나임을 증명한다”는 철학은 그대로다.
SSH 키를 처음 생성하며 “왜 두 개가 나오지?” 하고 고개를 갸웃거렸던 그 순간 — 그것은 사실 기원전 11세기 주나라의 장인이 청동패를 가르며 품었던 고민과 정확히 같은 질문이었다.
형태는 달라도, 철학은 하나 — 나만 가진 것으로 나임을 증명한다