NIP-104는 Double Ratchet 프로토콜(Signal 아키텍처 기반)을 사용한 종단간 암호화 다이렉트 메시지를 정의하며, Nostr 대화에 forward secrecy와 post-compromise security를 제공합니다.

왜 중요한가

기존 Nostr DM 솔루션에는 한계가 있습니다:

  • NIP-04: 콘텐츠를 암호화하지만 메타데이터가 유출됨
  • NIP-17 + NIP-59: gift-wrapping을 통해 메타데이터 유출을 해결하지만 forward/backward secrecy가 없음

NIP-104는 전체 그림을 완성합니다: 사용자의 개인 키가 손상되더라도 공격자는 과거 메시지를 읽을 수 없고(forward secrecy) 미래 메시지를 무기한으로 계속 읽을 수도 없습니다(post-compromise security).

작동 방식

초기 설정 (X3DH)

두 당사자가 신원 키와 prekeys를 사용하여 확장된 삼중 Diffie-Hellman 교환을 수행하여 초기 공유 루트 키를 도출합니다.

Double Ratchet

  1. DH Ratchet: 당사자가 메시지를 교환할 때마다 새로운 Diffie-Hellman 키가 생성되어 새로운 루트 키와 체인 키를 생성
  2. Symmetric Ratchet: 별도의 송신 및 수신 체인이 각 메시지에 대한 개별 메시지 키를 도출

이러한 지속적인 키 회전은 하나의 키가 손상되더라도 최소한의 메시지 내용만 노출되도록 보장합니다.

Event Kinds

  • Kind 442: X3DH 초기화를 위한 사용자 prekeys 게시
  • Kind 443: 암호화된 첫 번째 메시지가 포함된 초기 대화 설정
  • Kind 444: 확립된 대화에서의 후속 암호화 메시지

모든 암호화된 메시지는 메타데이터 보호를 위해 kind 1059 GiftWrap 이벤트로 래핑됩니다.

주요 태그

  • p - 수신자의 공개 키
  • prekey - DH 계산을 위한 수신자의 prekey
  • dh_sending - 현재 DH 송신 공개 키
  • current_index - 체인 내 메시지 번호
  • previous_length - 이전 메시지 체인의 길이

제한 사항

메시지는 장치-클라이언트 쌍별로 작동합니다. 여러 장치 간 동기화에는 각 장치에 대한 별도의 초기화가 필요하며, 이는 향상된 보안을 위한 트레이드오프입니다.


주요 출처:

언급:

참고: