평문 통신의 위험
지금까지 우리가 만든 모든 프로그램은 데이터를 평문으로 주고받았습니다. 평문이란 암호화되지 않은, 누구나 읽을 수 있는 날것의 데이터입니다. 채팅의 대화도, 파일의 내용도, HTTP 요청도 모두 그대로 네트워크를 흘렀습니다. 이 장에서 그것이 얼마나 위험한지를 똑똑히 마주합니다. 위험을 절감해야 다음 장의 해법이 절실해집니다.
데이터는 길에서 훤히 보인다
내 컴퓨터에서 나간 데이터가 상대에게 닿기까지, 그 데이터는 수많은 네트워크 장비를 거칩니다. 공유기, 스위치, 라우터, 통신사의 장비들을 지납니다. 그 경로의 어느 지점에서든, 마음만 먹으면 흐르는 데이터를 엿볼 수 있습니다. 평문이라면 엿본 내용이 그대로 읽힙니다.
특히 카페나 공항의 공용 와이파이처럼 여럿이 함께 쓰는 네트워크는 위험합니다. 같은 네트워크에 있는 누군가가 오가는 데이터를 가로채 볼 수 있기 때문입니다. 우리가 평문으로 보낸 채팅 메시지, 로그인 정보, 개인 정보가 고스란히 노출될 수 있습니다. 이렇게 통신을 몰래 엿보는 행위를 스니핑, 곧 도청이라 부릅니다.
직접 엿보기
PART 05에서 배운 진단 도구가 여기서 무서운 얼굴을 보입니다. 통신을 들여다보는 데 쓰던 tcpdump가, 관점을 바꾸면 도청 도구가 됩니다.
우리가 만든 평문 채팅 서버를 띄워 두고, 다른 터미널에서 트래픽을 들여다봅니다.
# 파일: 터미널sudo tcpdump -i lo0 -A port 9050
-A 옵션이 핵심입니다. 패킷의 내용을 사람이 읽을 수 있는 글자로 보여 달라는 뜻입니다. 이 상태에서 채팅 클라이언트로 메시지를 주고받으면, 우리가 보낸 대화가 tcpdump 화면에 글자 그대로 찍힙니다. 닉네임도, 메시지 내용도 아무런 가림막 없이 드러납니다. 내가 친구에게 보낸 비밀 이야기가, 통신 경로를 엿보는 누구에게나 이렇게 읽힌다는 것입니다.
이 실험은 충격적입니다. 우리가 공들여 만든 채팅이, 보안 측면에서는 엽서를 보내는 것과 같았던 것입니다. 봉투도 없이, 내용을 적어 길에 흘려보낸 셈입니다.
도청만이 아니다
평문 통신의 위험은 도청에 그치지 않습니다. 더 무서운 것은 변조입니다. 중간에서 데이터를 엿볼 수 있다는 것은, 그것을 몰래 바꿔치기할 수도 있다는 뜻입니다. 내가 보낸 메시지가 상대에게 닿기 전에 다른 내용으로 바뀔 수 있습니다. 송금 계좌 번호가 바꿔치기되는 상황을 상상해 보세요.
또 하나는 신원 위장입니다. 평문 통신에서는 내가 지금 대화하는 상대가 정말 그 상대가 맞는지 확인할 길이 없습니다. 누군가가 서버인 척, 또는 상대인 척 끼어들어 내 데이터를 가로챌 수 있습니다. 이런 공격을 중간자 공격이라 부릅니다. 도청하고, 변조하고, 위장하는 세 가지 위험이 모두 평문 통신의 허점에서 나옵니다.
세 가지를 모두 막아야 한다
그래서 안전한 통신은 세 가지를 보장해야 합니다.
첫째는 기밀성입니다. 데이터를 암호화해 엿봐도 읽을 수 없게 하는 것입니다. 둘째는 무결성입니다. 데이터가 중간에 바뀌면 그것을 알아챌 수 있게 하는 것입니다. 셋째는 인증입니다. 내가 대화하는 상대가 정말 그 상대가 맞는지 확인하는 것입니다.
이 세 가지를 한꺼번에 해결하는 표준 기술이 바로 다음 장에서 배울 TLS입니다. 우리가 웹 주소에서 보는 자물쇠 표시, 그리고 http가 아닌 https의 그 s가 바로 TLS로 보호되고 있다는 표시입니다. 위험을 똑똑히 봤으니, 이제 그 위험을 막는 방패를 들 차례입니다. 다음 장에서 TLS로 우리 소켓을 감싸 봅니다.