이번 문서의 목표: 이 문서를 다 읽으면 대칭키·공개키 암호와 해시 함수가 각각 어떤 문제를 해결하는지 구분하고, 방화벽의 종류를 비교하며, TLS가 왜 전송 계층과 응용 계층 사이에 위치한다고 설명되는지 말할 수 있게 됩니다.
왜 네트워크 보안을 마지막에 다루는가
지금까지 배운 프로토콜(IP, TCP, HTTP 등)은 원래 “어떻게 하면 데이터를 잘 전달할까”에 초점을 맞춰 설계되었고, “누가 몰래 엿보거나 위조하면 어떻게 막을까”는 나중에 덧붙여진 문제입니다. 그래서 보안 기능은 대부분 기존 계층 구조 위에 추가로 얹히는 형태로 존재합니다. 21편에서 본 HTTPS(HTTP + TLS)가 대표적인 예입니다.
이 편은 독학사 3단계 컴퓨터네트워크 시험이 요구하는 네트워크 보안의 기초 개념만 다룹니다. 암호 알고리즘의 수학적 원리나 공격 기법의 세부 사항은 정보보호 과목의 영역이며, 이 편에서는 다루지 않습니다(01_학습방향의 제외 범위 참고).
1. 암호와 인증의 기본 도구 세 가지
네트워크 보안에서 반복해서 등장하는 도구는 크게 세 가지입니다. 이 셋은 서로 다른 문제를 해결하기 때문에, 무엇이 무엇을 위한 것인지 구분하는 문제가 자주 출제됩니다.
쉽게 말하면: 대칭키는 “같은 열쇠로 잠그고 여는 금고”, 공개키는 “누구나 넣을 수 있지만 주인만 열 수 있는 우편함”, 해시는 “내용이 조금이라도 바뀌면 완전히 달라지는 지문”입니다.
대칭키 암호
대칭키(symmetric key) 암호는 암호화할 때와 복호화할 때 같은 키를 사용하는 방식입니다. 송신자와 수신자가 미리 같은 비밀 키를 공유하고 있어야 합니다.
- 장점: 연산이 비교적 가볍고 빨라서 대량의 데이터를 암호화하기에 적합합니다.
- 단점: 그 키를 통신 상대와 어떻게 안전하게 나눠 가질지가 문제입니다(키 배송 문제, key distribution problem). 아무리 암호화가 강력해도, 키 자체가 도중에 노출되면 전부 무너집니다.
공개키 암호
공개키(public key) 암호(비대칭키 암호라고도 합니다)는 암호화용 키와 복호화용 키가 서로 다른 한 쌍(키 쌍, key pair)을 사용하는 방식입니다. 하나는 누구에게나 공개하는 공개키(public key), 다른 하나는 자신만 보관하는 개인키(private key)입니다.
공개키로 암호화한 데이터는 짝이 되는 개인키로만 복호화할 수 있습니다. 그래서 상대방의 공개키로 메시지를 암호화해서 보내면, 그 개인키를 가진 상대방만 열어볼 수 있습니다 — 사전에 비밀 키를 나눠 가질 필요가 없습니다.
- 장점: 키를 미리 공유할 필요가 없어 키 배송 문제를 해결합니다. 또한 개인키로 서명하고 공개키로 검증하는 방식으로 전자서명(digital signature, “이 메시지는 진짜 이 사람이 보냈다”를 증명)에도 쓰입니다.
- 단점: 대칭키보다 연산이 훨씬 무겁고 느립니다.
자주 틀리는 점: “공개키가 대칭키보다 더 안전하니 항상 공개키만 쓰면 된다”는 생각은 틀렸습니다. 실제로는 무거운 공개키 암호로 대칭키(세션 키)를 안전하게 교환한 뒤, 그 이후의 실제 데이터는 가벼운 대칭키로 암호화하는 혼합 방식이 표준입니다(TLS가 바로 이 방식을 씁니다). “느리지만 키 교환에 유리한 공개키”와 “빠르지만 키 공유가 문제인 대칭키”를 상호 보완적으로 함께 쓴다고 이해해야 합니다.
해시 함수
해시 함수(hash function)는 암호화가 아니라, 임의 길이의 데이터를 고정된 길이의 짧은 값(해시값, hash value)으로 변환하는 함수입니다. 목적이 다릅니다 — 데이터를 숨기는 것이 아니라, 데이터가 변조되지 않았는지 확인하는 데 씁니다.
핵심 성질은 원본 데이터가 단 한 비트만 바뀌어도 해시값이 완전히 달라진다는 것입니다. 그래서 송신자가 데이터와 함께 그 해시값을 보내면, 수신자는 받은 데이터로 해시값을 다시 계산해 비교함으로써 무결성(integrity, 데이터가 훼손되지 않고 온전함)을 확인할 수 있습니다.
또한 해시 함수는 역방향으로 원본을 복원할 수 없다는 성질(일방향성)도 가지고 있어, 비밀번호를 원본 그대로 저장하지 않고 해시값만 저장하는 데도 쓰입니다.
세 도구 비교
| 구분 | 대칭키 암호 | 공개키 암호 | 해시 함수 |
|---|---|---|---|
| 목적 | 기밀성(내용을 숨김) | 기밀성 + 전자서명 | 무결성 확인 |
| 키 개수 | 1개(공유) | 2개(공개키·개인키) | 키 없음(또는 별도 개념) |
| 되돌리기 | 같은 키로 복호화 가능 | 짝이 되는 키로 복호화 가능 | 원본 복원 불가(일방향) |
| 속도 | 빠름 | 느림 | 빠름 |
| 대표 용도 | 대량 데이터 암호화 | 키 교환, 전자서명 | 데이터 무결성 검증, 비밀번호 저장 |
자주 틀리는 점: 해시 함수를 “암호화의 일종”으로 착각하는 경우가 많습니다. 암호화는 반드시 복호화(되돌리기)가 전제되지만, 해시는 애초에 되돌릴 수 없도록 설계됩니다. “암호화 vs 해시”를 묻는 문제에서는 되돌릴 수 있는지 여부가 핵심 판단 기준입니다.
2. 방화벽 — 통과시킬지 막을지 결정하는 문지기
방화벽(firewall)은 네트워크 경계에서 들어오고 나가는 트래픽을 감시하며, 미리 정한 규칙에 따라 통과시키거나 차단하는 장치(또는 소프트웨어)입니다.
쉽게 말하면: 방화벽은 건물 입구의 경비원입니다. 출입증(규칙)을 확인해서 통과시킬지 막을지 결정합니다.
방화벽의 종류
| 종류 | 검사 기준 | 특징 |
|---|---|---|
| 패킷 필터링(packet filtering) 방화벽 | IP 주소, 포트 번호 등 패킷 헤더 정보 | 속도가 빠르지만 단순한 규칙만 적용 가능 |
| 상태 기반(stateful inspection) 방화벽 | 연결의 상태(예: TCP의 연결 여부, 18편) | 이전 패킷과의 연관성을 추적해 더 정교하게 판단 |
| 응용 계층(application-level) 방화벽 | HTTP 요청 내용 등 응용 계층 데이터까지 | 세밀한 검사가 가능하지만 처리 부담이 큼 |
- 패킷 필터링 방화벽은 네트워크 계층·전송 계층 정보(출발지·목적지 IP, 포트 번호)만 보고 규칙에 맞는지 판단합니다. 예를 들어 “80번 포트로 들어오는 트래픽은 허용, 그 외 포트는 차단” 같은 규칙입니다. 각 패킷을 독립적으로 판단하므로 하나의 연결 안에서 이전 패킷과의 관계는 보지 못합니다.
- 상태 기반 방화벽은 여기서 한 단계 더 나아가, 현재 오가는 패킷이 이미 성립된 정상적인 연결의 일부인지를 추적합니다. 예를 들어 내부에서 먼저 나간 요청에 대한 응답 패킷은 통과시키고, 요청한 적 없는 응답이 갑자기 들어오면 의심스러운 트래픽으로 처리할 수 있습니다.
- 응용 계층 방화벽은 패킷의 헤더뿐 아니라 실제 내용(예: HTTP 요청의 URL, 본문)까지 들여다보고 판단합니다. 가장 세밀하지만, 내용을 해석해야 하므로 처리 속도는 가장 느립니다.
자주 틀리는 점: 방화벽 종류를 “OSI 계층이 높을수록 무조건 좋다”로 단순화하면 안 됩니다. 응용 계층 방화벽이 가장 정교하지만, 그만큼 처리 부담이 커서 모든 트래픽에 적용하기는 부담스럽습니다. 시험에서는 “무엇을 기준으로 판단하는가”(헤더만 보는지, 연결 상태를 보는지, 내용까지 보는지)로 구분하는 것이 핵심입니다.
3. TLS — 프로토콜 스택 어디에 위치하는가
21편에서 HTTPS를 “HTTP + TLS”로 소개했습니다. TLS(Transport Layer Security, 전송 계층 보안)는 이름에 “전송 계층”이 들어가지만, 실제로는 전통적인 TCP/IP 4계층 어디에도 딱 들어맞지 않는 위치에 있습니다.
TLS는 응용 계층과 전송 계층 사이에 자리 잡아, 그 위(응용 계층)에서 내려오는 데이터를 암호화해서 그 아래(전송 계층, 주로 TCP)로 넘겨주는 역할을 합니다. 그래서 HTTP뿐 아니라 SMTP 같은 다른 응용 계층 프로토콜도 TLS를 씌워 보안을 강화할 수 있습니다.
TLS가 통신을 시작할 때 수행하는 핸드셰이크(handshake, 초기 교신 절차)에서는 앞서 배운 세 도구가 순서대로 동원됩니다.
- 서버가 자신의 공개키가 담긴 인증서를 클라이언트에게 보냅니다.
- 클라이언트는 그 공개키를 이용해 앞으로 쓸 대칭키(세션 키)를 안전하게 암호화해 서버에게 전달합니다.
- 이후 실제 데이터는 이 대칭키로 암호화해서 빠르게 주고받고, 각 데이터에는 해시 기반의 값을 함께 붙여 변조 여부를 확인합니다.
이 순서가 바로 앞서 나온 “혼합 방식” 자주 틀리는 점의 실제 사례입니다 — 키 교환에는 느리지만 안전한 공개키를, 실제 데이터 전송에는 빠른 대칭키를, 무결성 확인에는 해시를 쓰는 조합입니다.
쉽게 말하면: TLS는 우체국 소포에 포장(암호화)과 봉인 스티커(무결성 확인)를 함께 붙여주는 서비스입니다. 소포 안 내용물(HTTP 등 응용 데이터)은 그대로지만, 포장과 봉인 덕분에 중간에서 누가 열어보거나 바꿔치기하면 바로 티가 납니다.
핵심 정리
- 대칭키 암호는 같은 키로 암호화·복호화하며 빠르지만 키 공유가 어렵고, 공개키 암호는 서로 다른 키 쌍을 사용해 키 공유 문제를 해결하지만 느리다.
- 해시 함수는 암호화가 아니라 데이터 변조 여부(무결성)를 확인하는 도구이며, 원본으로 되돌릴 수 없다는 점이 암호화와의 결정적 차이다.
- 방화벽은 패킷 필터링(헤더만 검사) → 상태 기반(연결 상태 추적) → 응용 계층(내용까지 검사) 순으로 정교해지지만 처리 부담도 커진다.
- TLS는 응용 계층과 전송 계층(TCP) 사이에 위치하며, 핸드셰이크에서 공개키로 대칭키를 안전하게 교환한 뒤 실제 데이터는 대칭키와 해시로 보호하는 혼합 방식을 사용한다.