Marmot Protocol
Marmotは、Nostr上のend-to-end encrypted group messaging向けプロトコルです。Nostrのidentityとrelay networkに、group key management、forward secrecy、post-compromise securityのためのMLSを組み合わせます。
仕組み
Marmotは、identity、relay transport、event distributionにはNostrを使い、その上にgroup membership変更とmessage encryptionのためにMLSを重ねます。1対1メッセージングに焦点を当てるNIP-17とは異なり、Marmotは、メンバーが参加、離脱、鍵rotationを時間とともに行うgroup向けに作られています。
なぜ重要か
MLSにより、MarmotはNostrのdirect-message方式だけでは得られない性質を持ちます。group state evolution、member removal semantics、後続のkey updateによるcompromise後の回復です。
この役割分担が重要です。Nostrは、開かれたnetworkにおけるidentityとtransportを解きます。MLSは認証済みgroup key agreementを解きます。Marmotはその両者をつなぐglue layerです。
実装状況
プロトコルはまだexperimentalですが、すでに複数実装と実運用アプリを持っています。MDKが主要なRust reference stackで、marmot-tsがそのモデルをTypeScriptへ持ち込み、White Noise、Amethyst、Pika、VectorなどのアプリがMarmot互換コンポーネントを使っています。
最近の作業はhardeningとinteropに集中しています。audit起点のfixが2026年初頭に入り、MIP-03はrelay間で並行するgroup state変更が競合したときにclientが収束できるよう、deterministicなcommit resolutionを導入しました。
2026年4月には、Amethystが埋め込みMDKをMIP-01とMIP-05のwire formatへ合わせました。PR #2462はTLS風length prefixのVarInt encodingとMDK test vectorとのround-trip validationを追加し、PR #2435はMIP-00 KeyPackage Relay List supportを追加し、PR #2436はWhite Noiseとのcross-client testingで見つかったadmin-gateとmedia-handlingの残りの差分を閉じました。PR #2466は暗号化welcome bytesがmdk-core出力と一致するようMLS commit framingを修正し、PR #2471はco-admin間でstate divergenceを引き起こしていたouter-layer復号bugを修正しました。続くPR #2493は包括的なMLS commit cryptography validationを追加し、PR #2488はAmethyst実装を駆動するMarmot/MLS group操作用CLIのamyを出荷しました。
MDKは、invitee capabilityのLCDとしてgroupのRequiredCapabilitiesを計算するPR #261を導入し、AmethystとWhite Noise間のmixed-version inviteを可能にしました。PR #262はcreator signerを永続化する前にinvitee key packageをparseし、PR #264はimplementation間でSelfUpdate wire formatを収束させ、PR #265はgroup_required_proposals accessorを公開します。
whitenoise-rsは、global singletonからaccountごとのAccountSession viewへの多段階refactorの最中です。PR #743がAccountSessionとAccountManagerの土台を置き、続く各phaseでrelay handle、draftとsetting、message operation、group read/write、membership、push notification、key-package read、group creation、そしてPR #770時点ではsession-scoped event dispatchまで移行されました。marmot-ts PR #68は、TypeScript clientをaddressable kind 30443 key packageへ移行しています。
Primary sources:
- Marmot Protocol Repository
- MLS Protocol
- Marmot Development Kit (MDK)
- marmot-ts
- whitenoise-rs
- White Noise client
- Amethyst PR #2462 - MIP-01/MIP-05 wire format alignment
- Amethyst PR #2435 - MIP-00 KeyPackage Relay List
- Amethyst PR #2488 - Amy CLI
Mentioned in:
- Newsletter #1: News
- Newsletter #1: Releases
- Newsletter #4
- Newsletter #7
- Newsletter #12
- Newsletter #19: Amethyst MIP compliance
- Newsletter #19: MDK interop work
- Newsletter #19: whitenoise-rs session refactor
See also: