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 NoiseAmethyst、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 #265group_required_proposals accessorを公開します。

whitenoise-rsは、global singletonからaccountごとのAccountSession viewへの多段階refactorの最中です。PR #743AccountSessionAccountManagerの土台を置き、続く各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:

Mentioned in:

See also: