"
인터넷에서 HTTPS로 웹사이트에 접속할 때는 단순히 데이터를 주고받는 것이 아니라, 먼저 안전한 통신을 위한 암호화 과정을 거친다. 이 과정에서 중요한 역할을 하는 것이 TLS 핸드셰이크와 SNI(Server Name Indication)이다.
SNI(Server Name Indication)
현대의 웹 서버는 하나의 IP 주소에서 여러 개의 웹사이트나 서비스를 동시에 호스팅하는 경우가 많다. 예를 들어 하나의 서버가 naver.com, example.com, service.com 같은 여러 도메인을 동시에 제공할 수 있다. 이때 문제가 발생한다. HTTPS 연결을 시작하기 위해서는 서버가 클라이언트에게 해당 웹사이트의 인증서를 제공해야 하는데, 서버는 클라이언트가 어떤 웹사이트에 접속하려는지 알 수 없기 때문이다.
HTTPS 연결은 데이터를 암호화하기 전에 TLS 핸드셰이크(TLS Handshake) 라는 절차를 먼저 수행한다. 하지만 이 단계에서 서버는 아직 클라이언트가 어떤 도메인에 접속하려는지 알지 못한다. 이러한 문제를 해결하기 위해 등장한 기술이 SNI(Server Name Indication)이다.
SNI는 TLS의 확장 기능 중 하나로, 클라이언트가 TLS 핸드셰이크 초기 단계에서 접속하려는 호스트 이름(도메인) 을 서버에 알려주는 방식이다. 서버는 이 정보를 바탕으로 해당 도메인에 맞는 인증서를 선택해 클라이언트에게 전달할 수 있다.
예를 들어 사용자가 naver.com에 접속한다고 가정해 보자. HTTPS 연결이 시작되기 전 TLS 핸드셰이크 과정에서 클라이언트는 SNI 필드에 naver.com이라는 정보를 포함해 서버에 전달한다. 그러면 서버는 해당 도메인에 맞는 인증서를 선택하여 안전한 HTTPS 연결을 구축하게 된다.
암호와 암호기법
인터넷 통신의 보안을 확보하기 위해서는 다양한 암호 기술이 사용된다. 일반적으로 보안 통신에서는 크게 두 가지 방식의 암호기법이 활용된다. 바로 데이터 서명과 암호화이다.
1. 데이터 서명
데이터 서명은 데이터가 실제로 신뢰할 수 있는 발신자로부터 왔는지 확인하기 위한 방법이다. 데이터를 암호학적으로 서명하여 메시지의 무결성과 인증을 보장한다. 이러한 방식은 사용자와 시스템이 서로 통신할 때 데이터의 신뢰성을 확인하기 위해 널리 사용된다.
예를 들어 채팅 메시지, 이메일, 네트워크 패킷, 전자 문서 서명 등 다양한 통신 과정에서 데이터 서명이 활용된다. 데이터 서명을 통해 수신자는 메시지가 중간에 변조되지 않았고 실제 발신자가 보낸 것임을 확인할 수 있다.
2. 암호화
암호화는 메시지를 아예 읽을 수 없도록 변환하는 기술이다. 사람이 읽을 수 있는 원래의 메시지(평문)를 읽을 수 없는 형태의 데이터(암호문)로 변환하는 과정을 의미한다. 이 과정의 반대는 복호화라고 하며, 암호문을 다시 평문으로 되돌리는 과정이다.
- 암호화: 평문 -> 암호문
- 복호화: 암호문 -> 평문
암호화와 복호화를 수행하는 수학적 방법을 암호 알고리즘 또는 암호 체계라고 부른다.
가장 단순한 예로는 시저 암호가 있다. 이는 각 문자를 일정한 숫자만큼 뒤에 있는 알파벳으로 치환하는 방식이다. 예를 들어 abc를 세 글자 뒤로 이동시키면 def가 된다. 이때 이동하는 숫자를 키(key)라고 한다.
현대의 암호화 기술은 크게 두 가지 방식으로 나뉜다.
1. 대칭키 암호 방식
데이터를 암호화할 때 사용하는 키와 복호화할 때 사용하는 키가 동일한 방식이다. 발신자와 수신자가 같은 비밀 키를 공유해야 하므로 키 관리가 중요하다.
2. 비대칭키 암호 방식
서로 다른 두 개의 키를 사용하는 방식이다. 하나는 공개키(public key), 다른 하나는 개인키(private key)이다. 공개키는 누구에게나 공개할 수 있지만, 개인키는 소유자만 보관해야 한다.
예를 들어 A가 B에게 비밀 메시지를 보내고 싶다면 B의 공개키로 메시지를 암호화한다. 이렇게 암호화된 메시지는 B만이 자신의 개인키를 사용해 복호화할 수 있다. 이 방식은 인터넷 보안 통신에서 매우 중요한 역할을 한다.
전송 암호화
인터넷에서 데이터는 작은 단위인 패킷(packet) 형태로 네트워크를 통해 이동한다. 이 과정에서 제3자가 패킷 내용을 엿보지 못하도록 보호하는 방법이 전송 암호화(Encryption in transit) 이다.
전송 암호화는 보통 TLS(Transport Layer Security) 같은 암호화 프로토콜을 사용해 구현된다. TLS는 네트워크 중간에 여러 노드가 존재하더라도 통신의 양 끝단(endpoint) 사이의 연결을 암호화한다. 따라서 네트워크를 통과하는 동안 제3자가 데이터를 읽는 것을 방지할 수 있다.
전송 암호화의 한계
전송 암호화는 강력한 보안 기술이지만 몇 가지 한계도 존재한다.
1. 신뢰할 수 없는 인증기관(CA)이 발급한 인증서를 잘못 수락할 가능성이다.
이러한 경우 공격자가 가짜 서버를 만들어 사용자를 속일 수 있다.
2. 발신자가 전체 통신 경로를 통제할 수 없는 경우이다.
예를 들어 사용자가 이메일 서비스를 통해 메시지를 보내면 사용자와 이메일 서버 사이의 연결은 TLS로 보호된다. 그러나 다른 이메일 서비스 업체로 메시지가 전달되는 과정에서는 동일한 수준의 암호화가 보장되지 않을 수 있다.
또한 TLS는 데이터 전송 과정만 보호할 뿐. 데이터 자체를 암호화하는 것은 아니다. 따라서 메시지가 서버에 저장된 이후에는 서버 관리자나 다른 공격자가 해당 데이터를 접근할 가능성이 존재한다.
마지막으로 중간자 공격(Man-in-the-Middle Attack)이라는 위험도 있다. 공격자가 통신 과정 중간에 개입해 서버나 클라이언트인 것처럼 위장하면 데이터 통신을 가로채고 내용을 확인할 수도 있다.
종단 간 암호화(End-to-End Encryption)
전송 암호화의 한계를 해결하기 위해 등장한 개념이 종단 간 암호화(E2EE)이다. 종단 간 암호화는 데이터를 보내는 사람의 장치와 받는 사람의 장치 사이에서만 복호화가 가능하도록 하는 방식이다. 중간에 존재하는 서버나 서비스 제공자도 데이터 내용을 읽을 수 없다.
전송 암호화가 취약한 대표적인 두 가지 상황이 있다.
1. 네트워크 트래픽을 누군가가 관찰하는 경우이다.
이때 데이터 내용은 보호되더라도 통신 주체나 위치 같은 메타데이터가 노출될 수 있다.
2. 서버에 저장된 데이터에 접근하려는 경우이다.
예를 들어 이메일을 보낼 때 전송 과정에서는 암호화되지만, 이메일 서버에 저장된 이후에는 다른 사람이 접근할 가능성이 있다.
종단 간 암호화는 이러한 문제를 해결하기 위해 발신자와 수신자의 장치에서만 데이터를 암호화하고 복호화하도록 설계된다.
대표적인 종단 간 암호화 기술에는 다음과 같은 것들이 있다.
1. 더블 래칫(Double Ratchet) 알고리즘
최신 메신저 애플리케이션에서 많이 사용하는 알고리즘으로 메시지를 보낼 때마다 새로운 암호 키를 생성해 보안을 강화한다.
2. OpenPGP / GPG
이메일, 파일, 폴더 등을 암호화하는 데 널리 사용되는 기술로 주로 비대칭 암호화를 기반으로 동작한다.
저장 데이터 암호화
보안에서 중요한 것은 전송 중인 데이터뿐만 아니라 저장된 데이터도 보호하는 것이다. 클라우드 서버나 외부 시스템에 저장된 데이터는 사용자가 직접 통제하기 어렵기 때문에 추가적인 보안이 필요하다.
이러한 데이터를 보호하기 위해 저장 상태 데이터 암호화(Encryption at rest) 가 사용된다. 암호화 소프트웨어를 사용하여 데이터를 암호화하고, 이를 복호화하기 위해서는 특정 비밀번호나 키가 필요하도록 설계한다. 이렇게 하면 서버에 저장된 데이터가 유출되더라도 내용을 쉽게 읽을 수 없다.
'CS' 카테고리의 다른 글
| [네트워크] 웹의 언어 HTTP와 HTTPS (1) | 2026.03.01 |
|---|---|
| [네트워크] 도메인 이름은 어떻게 IP 주소로 변환될까? (0) | 2026.02.08 |
| [네트워크] 인터넷의 정보는 어떻게 움직일까 (0) | 2026.02.01 |
| [네트워크] 인터넷에서 기기는 어떻게 통신할까? (0) | 2026.01.25 |
| [네트워크] 기기는 어떻게 네트워크에 연결될까? (0) | 2026.01.17 |