I’m trying to figure out how I could create a private group that was P2P yet still allowed someone to moderate members (no public access to messages). I’m assuming standard hybrid encryption (RSA/EC + AES) for actual messages.

I am thinking about having the owner create a master group keypair, then create a new subkey that is shared with all the group members. When the membership changes (user joins, leaves, banned) then the old subkey is revoked by master and a new subkey is sent out to all (currently valid) members.

Then when members want to share messages they simply send them to the group subkey with a signature from their own key so we know which member sent the message. People outside the group can’t read anything.

It would also be important to have transcript consistency: the assurance that all members of a conversation are seeing the same messages and in the same order. This would be harder if the individual members are all messaging each member separately (using the individual member keys). That was my reasoning for the shared group key which would have a shared storage location.

In order to minimize sending the new keys to the whole group on every membership change, logical key hierarchy (LKH) (a B-tree where every member is a leaf) can be implemented.

  • $\begingroup$ You night want to have a look at Messaging Layer Security (MLS). $\endgroup$
    – SEJPM
    Commented Jan 18, 2020 at 9:39
  • $\begingroup$ Signal uses this design: signal.org/blog/private-groups $\endgroup$
    – Xeoncross
    Commented Jan 19, 2020 at 20:13


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.