종단간 암호화란? ‘서버도 읽지 못한다’는 말의 정확한 뜻
“우리 메신저는 암호화됩니다”라는 문장은 거의 모든 메신저가 쓴다. 그런데 같은 말이 가리키는 내용은 서로 다르다. 어떤 앱은 내 폰과 서버 사이의 통신 구간만 암호화한다. 어떤 앱은 상대방 폰에 도착하기 전까지 누구도 열 수 없게 잠근다. 두 번째가 종단간 암호화(end-to-end encryption, E2E)다. 둘을 가르는 질문은 하나다. 암호를 푸는 열쇠가 어디에 있는가.
전송 구간 암호화와 종단간 암호화는 다르다
웹사이트 주소 앞에 붙는 https가 하는 일이 전송 구간 암호화다. 내 기기에서 서버까지 가는 길에서 누가 훔쳐 봐도 읽을 수 없게 만든다. 은행 앱도 쇼핑 앱도 메신저도 대부분 이걸 한다. 문제는 도착지다. 서버에 도착한 순간 데이터는 풀린다. 서버는 내용을 읽고 저장하고 검색할 수 있다. 회사 정책이 좋으면 안 읽을 뿐이지 읽을 수 없는 것은 아니다.
종단간 암호화는 잠그는 위치가 다르다. 메시지는 보내는 사람의 기기에서 잠기고 받는 사람의 기기에서만 풀린다. 그 사이에 있는 서버는 잠긴 상자를 옮기는 역할만 한다. 상자를 열 열쇠는 양쪽 기기에만 있다. 그래서 “서버도 읽지 못한다”는 말은 회사의 약속이 아니라 구조의 결과다. 서버에 열쇠가 없으니 읽을 방법이 없다.
열쇠가 어디 있는지가 전부다
이 구조를 확인하는 가장 빠른 방법은 열쇠가 어디 있는지 묻는 것이다. 열쇠가 서버에 있으면 그 서버에 손댈 수 있는 사람은 누구든 대화를 읽을 수 있다. 회사 직원일 수도 있고 침입자일 수도 있고 영장을 든 기관일 수도 있다. 열쇠가 기기에만 있으면 서버가 통째로 넘어가도 나오는 것은 암호문뿐이다.
여기서 흔한 오해 하나를 짚어야 한다. “메시지를 암호화해서 서버에 저장합니다”라는 설명은 종단간 암호화가 아닐 수 있다. 서버가 자기 열쇠로 잠가서 보관하는 것도 “암호화 저장”이기 때문이다. 이 경우 열쇠와 자물쇠가 같은 곳에 있으니 서버를 믿어야 하는 구조는 그대로다. 열쇠가 사용자 기기를 떠나지 않는지가 기준이다.
서버가 보는 것과 보지 못하는 것
종단간 암호화라고 해서 서버가 아무것도 모르는 것은 아니다. 메시지를 전달하려면 어느 방으로 보낼지는 알아야 하고 언제 보냈는지도 남는다. 계정을 유지하려면 로그인 아이디와 닉네임이 필요하다. 알림을 보내려면 푸시 토큰이 필요하다. 이런 것들을 메타데이터라고 부른다.
정직한 메신저는 개인정보처리방침에 이 목록을 그대로 적는다. 내용은 못 보지만 방 식별자와 전송 시각은 안다. 닉네임은 저장하지만 전화번호는 받지 않는다. 접속 기록은 며칠 뒤 지운다. 이런 식이다. 반대로 “아무 정보도 저장하지 않습니다” 같은 문장은 기술적으로 성립하기 어렵다. 메시지를 전달하는 서버가 최소한의 정보도 없이 돌아갈 수는 없기 때문이다. 무엇을 저장하는지 구체적으로 적은 쪽이 오히려 믿을 만하다.
종단간 암호화가 막지 못하는 것
경계도 알아야 한다. 종단간 암호화는 전송 중과 서버에서의 노출을 막는 기술이다. 양쪽 끝에 있는 기기 자체는 보호 범위 밖이다.
- 내 폰이 잠금 없이 다른 사람 손에 들어가면 대화는 그대로 보인다. 앱 잠금(PIN)이 필요한 이유다.
- 상대방이 화면을 캡처하거나 파일을 저장하거나 남에게 전달하는 것은 암호화가 막을 수 없다. 대화는 상대방을 믿는 만큼만 안전하다.
- 기기에 악성 앱이 깔려 있으면 화면에 보이는 것을 그대로 읽어 갈 수 있다.
그래서 종단간 암호화는 “절대 안전”이 아니라 “서버라는 한 지점을 믿지 않아도 되는 구조”로 이해하는 것이 정확하다. 다만 그 한 지점이 대량 유출이 주로 일어나는 곳이라는 점을 생각하면 작지 않은 차이다.
직접 확인하는 방법
메신저를 고를 때 세 가지를 보면 된다.
- 개인정보처리방침에 서버가 저장하는 항목이 구체적으로 나열되어 있는가. 두루뭉술하게 적혀 있으면 의심해야 한다.
- 비밀번호를 잊었을 때 회사가 대화를 복구해 줄 수 있다고 하는가. 복구해 줄 수 있다면 회사가 열쇠를 갖고 있다는 뜻이다. 종단간 암호화 메신저는 복구코드를 사용자에게 맡긴다. 잃어버리면 회사도 도와줄 수 없다고 미리 말한다.
- 가입에 전화번호가 필수인가. 전화번호 없이도 돌아가는 구조라면 그만큼 서버가 아는 것이 적다. 이 부분은 익명 메신저의 조건에서 따로 다뤘다.
시그니토(Signito)는 이 세 가지 기준으로 만든 메신저다. 열쇠는 기기에만 있다. 복구코드는 가입할 때 한 번만 보여준다. 전화번호 대신 아이디와 비밀번호로 가입한다. 서버가 무엇을 저장하는지는 개인정보처리방침에 항목별로 적어 두었다.