NIP-17: 비공개 다이렉트 메시지
NIP-17은 NIP-59 gift wrapping을 사용하여 발신자 프라이버시를 보장하는 비공개 다이렉트 메시지를 정의한다. 외부 이벤트에 발신자가 노출되는 NIP-04 DM과 달리, NIP-17은 릴레이와 일반 관찰자로부터 발신자를 숨긴다.
작동 방식
메시지는 여러 암호화 레이어로 감싸진다:
- 실제 메시지 내용은 kind 14의 rumor 이벤트에 존재한다.
- seal이 해당 내용을 수신자에게 암호화한다.
- gift wrap이 seal을 다시 암호화하고 일회용 키쌍으로 게시한다.
외부 gift wrap은 무작위 일회용 키쌍을 사용하므로 릴레이와 관찰자가 메시지 발신자를 판별할 수 없다.
메시지 구조
- Kind 14 - 래핑된 레이어 내부의 실제 DM 내용
- Kind 1059 - 릴레이에 게시되는 외부 gift wrap 이벤트
- 래핑 흐름 내부의 페이로드에 NIP-44 암호화 사용
- 리액션 같은 인터랙티브 DM 기능을 더 잘 지원하도록 명세가 개선됨
보안 및 신뢰 모델
- 릴레이가 발신자를 볼 수 없음 (gift wrap의 일회용 키쌍으로 은닉)
- 수신자는 노출됨 (gift wrap의
p태그) - 메시지 타임스탬프가 일정 범위 내에서 무작위화
- 릴레이에서 보이는 스레딩이나 대화 그룹 없음
수신자는 언래핑 후 발신자를 알 수 있다. NIP-17은 네트워크로부터 발신자 신원을 숨기는 것이지, 상대방으로부터 숨기는 것이 아니다. “비공개 DM"이라 설명할 때 이 구분이 중요하다.
왜 중요한가
NIP-04 DM은 내용을 암호화하지만 메타데이터는 노출된다:
- 발신자 공개키가 공개됨
- 수신자 공개키가
p태그에 포함됨 - 타임스탬프가 정확함
NIP-17은 더 복잡한 구현 비용을 들여 발신자를 숨긴다.
이 복잡성은 실질적 프라이버시 개선을 가져온다. 릴레이는 래핑된 메시지가 수신자에게 전달되는 것을 여전히 볼 수 있지만, kind 4 메시지처럼 외부 이벤트 메타데이터에서 발신자-수신자 그래프를 직접 구성할 수는 없다.
상호운용성 참고사항
NIP-17은 비공개 메시징을 위한 inbox 릴레이 목록도 정의한다. 클라이언트는 kind 10050 이벤트를 게시하여 발신자가 DM 전달에 어떤 릴레이를 사용해야 하는지 알려줄 수 있다. DM 릴레이 라우팅을 공개 콘텐츠 라우팅과 분리하면, 비공개 트래픽이 잘못된 곳에 게시되는 것을 방지할 수 있다.
주요 출처:
언급된 뉴스레터:
같이 보기: