콘텐츠로 이동

암호화와 전달

왜 MLS인가

1:1 종단간 암호화는 Signal 방식(더블 래칫)으로 오래전 해결됐습니다. 문제는 그룹입니다. N명 그룹에 1:1 방식을 그대로 쓰면 멤버 쌍마다 암호 세션을 유지해야 해서 비용이 폭증합니다.

MLS(Messaging Layer Security, RFC 9420)는 그룹 전체가 트리 구조로 하나의 그룹 키를 공유하고, 멤버가 바뀌면 필요한 부분만 갱신하는 IETF 표준입니다.

그룹의 암호 상태는 epoch 단위로 전진합니다. 멤버 추가, 제거, 키 갱신이 일어나면 commit 메시지가 새 epoch를 엽니다. 이 구조가 주는 성질 두 개는 이름만 알아두면 됩니다.

성질 뜻
forward secrecy 지금 키가 털려도 과거 메시지는 못 읽습니다
post-compromise security 털린 뒤에도 다음 epoch부터 다시 안전해집니다

XMTP가 MLS를 쓰는 방식

기억할 것 세 가집니다.

  • 모든 대화가 그룹입니다. 1:1 DM도 내부적으로 2인 그룹이라 코드 경로가 하나입니다. Umul에서 DM과 그룹 처리가 같은 어댑터를 타는 이유입니다.
  • 별도 인증 서버가 없습니다. MLS가 요구하는 신원 확인 역할을 Inbox 체계가 직접 맡습니다.
  • 새 멤버 초대(Welcome)의 키 캡슐화에 양자 내성 하이브리드 KEM(XWING)을 씁니다. 암호문을 모아뒀다가 나중에 양자컴퓨터로 푸는 공격에 대한 대비입니다.

구현체 libxmtp는 NCC Group의 보안 평가(2024-12 완료)를 받았고 보고서가 공개되어 있습니다.

봉투와 구독 주소

암호화된 데이터가 네트워크를 오갈 때의 포장 단위가 envelope, 라우팅 주소가 topic입니다.

envelope 쉽게 말하면 어디로 가나
Group Message 대화 메시지 대화방 topic (g-대화ID)
Welcome Message 새 멤버에게 주는 입장권 수신 기기 topic (w-기기ID)
Key Package 초대받으려고 미리 게시하는 명함 네트워크 저장소
Identity Update 신원 변경 기록 (지갑·기기 추가/폐기) 네트워크에 영구 저장

클라이언트는 자기 대화방 topic과 자기 기기 topic을 구독하고 있다가 새 envelope을 받습니다. 발신자와 수신자가 서로 다른 노드에 붙어 있어도 노드 간 사본 복제가 이어 줍니다.

sequenceDiagram
  autonumber
  participant B as Bob (발신, 노드 1 접속)
  participant N1 as 노드 1
  participant N2 as 노드 2
  participant A1 as Alice 폰 (노드 2 접속)
  participant A2 as Alice 노트북

  Note over A1: 사전에 Key Package(명함) 게시
  B->>N1: Alice 의 Key Package 조회
  B->>B: 2인 MLS 그룹 생성 (DM 도 그룹)
  B->>N1: Welcome 발행 (w-Alice폰 topic)
  N1-->>N2: 사본 복제
  N2-->>A1: Welcome 수신, 그룹 비밀 획득
  B->>N1: Group Message 발행 (g-대화ID topic)
  N1-->>N2: 사본 복제 (한 노드가 죽어도 메시지 유지)
  N2-->>A1: 구독 topic 으로 수신, 복호화
  N2-->>A2: Alice 의 다른 기기도 동일 수신

Key Package를 미리 게시해 둬야 남이 나를 초대할 수 있다는 점이 중요합니다. 상대가 오프라인이어도 그의 명함을 보고 그의 기기 topic으로 입장권을 보낼 수 있습니다.

온체인이냐 노드 저장이냐

XMTP는 모든 것을 체인에 올리지 않습니다. 신원과 그룹 구성은 체인, 메시지 내용은 노드로 갈립니다.

경로 envelope 어디에 남나
새 사용자 등록 Identity Update IdentityUpdateBroadcaster 컨트랙트
그룹 구성 변경 Group Message (MLS commit/proposal) GroupMessageBroadcaster 컨트랙트
그룹 생성 준비 Key Package, Welcome 노드 저장소
메시지 교환 Group Message (일반) 노드 저장소

Umul의 증빙 설계와 같은 방향입니다. Umul도 대화 원문은 체인에 올리지 않고 해시와 서명만 올린다(증빙 컨트랙트 가이드).

네트워크의 현재 상태

프로토콜은 그대로 두고, 그것을 실어 나르는 네트워크를 회사 운영에서 노드 네트워크(xmtpd)로 바꾸는 중입니다. 2026-07 기준.

  • 탈중앙 테스트넷은 2025-02 첫 가동, 2025-12 최신 구성으로 리셋, 2026-02-25 기존 메시지 마이그레이션 완료
  • 메인넷 목표는 2026-03이었으나 조사 시점에 라이브 발표가 없다
  • 수수료는 사용자가 아니라 앱이 냅니다. 앱 측 payer 지갑에 USDC를 채워 두면 메시지 10만 건당 약 $5
  • 메인넷 초기는 큐레이션된 7개 노드 운영자의 허가형으로 시작하고, 토큰은 미출시입니다. 시중에 XMTP 티커로 도는 토큰은 공식 발표와 무관하다

노드 구현체 xmtpd는 아직 실험 단계입니다. README 스스로 "현재 XMTP 네트워크를 구성하는 노드 소프트웨어가 아니다"라고 밝힙니다. 위의 온체인·노드 분리는 그 목표 구현 기준이며 바뀔 수 있습니다.

정직한 한계

  • 메타데이터는 숨겨지지 않습니다. 내용은 암호화되지만 노드는 메시지의 타이밍, 크기, 쿼리 패턴(IP 단위)을 볼 수 있고, Welcome의 수신자도 가려지지 않습니다. 공식 보안 문서가 스스로 명시하는 한계입니다.
  • 아직 중앙적입니다. 초기 노드 7개는 큐레이션이고 거버넌스는 XMTP Labs 리더십에서 출발합니다. 탈중앙은 로드맵이지 현재 상태가 아닙니다.
  • 경제 모델이 미검증입니다. 수수료는 메인넷 후에야 흐르고, $5/10만 건이 시장에서 성립하는지는 아직 모릅니다.