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.