NIP-104: Double Ratchet DM
NIP-104는 double ratchet 설계를 사용하는 종단간 암호화 다이렉트 메시지에 대한 초안으로, Nostr 대화에 전방 비밀성(forward secrecy)과 침해 후 복구(post-compromise recovery)를 제공하는 것을 목표로 한다.
왜 중요한가
기존 Nostr DM 솔루션에는 한계가 있다:
- NIP-04: 콘텐츠는 암호화하지만 메타데이터가 노출된다
- NIP-17 + NIP-59: gift wrapping을 통해 메타데이터 노출을 해결하지만 전방/후방 비밀성이 없다
NIP-104가 목표로 하는 속성: 기기 상태나 장기 키가 침해되더라도, 공격자가 전체 대화 기록이나 향후 메시지에 대한 영구적 접근 권한을 자동으로 얻지 못해야 한다.
작동 방식
NIP-104는 identity 키와 prekey를 결합하여 초기 공유 비밀을 도출하는 X3DH 방식의 설정으로 시작한다. 그 후 양쪽이 double ratchet를 진행한다: Diffie-Hellman ratchet가 새로운 공개 키를 교환할 때 루트 키와 체인 키를 회전시키고, symmetric ratchet가 각 송수신 체인 내에서 메시지별 키를 도출한다.
각 메시지 키가 단기적이기 때문에, 이후 상태가 노출되더라도 과거 암호문을 복구하기가 더 어렵다. 이것이 단일 정적 키 방식과의 주된 기술적 차이점이다.
이벤트 종류
- Kind 10443: X3DH 초기화를 위한 사용자 prekey 게시
- Kind 443: 암호화된 첫 메시지를 포함한 초기 대화 설정
- Kind 444: 설정된 대화 내 후속 암호화 메시지
모든 암호화 메시지는 메타데이터 보호를 위해 kind 1059 GiftWrap 이벤트로 래핑된다.
보안과 트레이드오프
보안 향상에는 더 많은 상태 관리가 따른다. 각 기기 페어링마다 ratchet 상태, prekey 관리, 순서가 맞지 않는 전달에 대한 복구 로직이 필요하다. 이전 백업을 복원하거나 동기화되지 않은 여러 기기를 사용하면 대화가 재설정될 때까지 복호화가 깨질 수 있다.
이 트레이드오프가 double-ratchet 메시징이 일반 암호화 노트보다 개조(retrofit)하기 어려운 이유다. 클라이언트에는 단순한 암호화 프리미티브가 아니라 내구성 있는 로컬 상태와 세심한 기기 시맨틱스가 필요하다.
상호운용성 참고사항
이 제안은 전용 설정 및 메시지 kind와 전송 프라이버시를 위한 NIP-59: Gift Wrap을 사용한다. 또한 이러한 gift-wrapped 이벤트를 사용자의 kind 10050 DM 릴레이 선호 이벤트에 나열된 릴레이에만 게시할 것을 권장한다. 이는 NIP-104가 NIP-17: 비공개 다이렉트 메시지의 단순 대체가 아님을 의미한다. 클라이언트는 prekey 흐름, DM 릴레이 검색, ratchet 상태 머신에 대한 명시적 지원이 필요하다.
주요 출처:
언급된 뉴스레터:
같이 보기: