I'm still getting my head around public/private key cryptography, and I can't quite work out how to ask the right question to get an answer for this problem, but here goes!

  • Alice, Bob, Carol, and Dave are all in a secret society which writes exquisite corpse stories.
  • First Alice writes a line into a file; then she sends this file to Bob, Carol and Dave. Each of them might write a line too, and share it with the group again.
  • Nobody outside the secret society should be able to read their story, but each of them should be able to read the whole story.
  • After a while, Alice invites Edgar into the secret society. He can now read all the previous lines in the story, and add his own.

How would I make this scenario happen? Does each person have their own key? Is there a single key pair representing the society as a whole? Is there any reading I could do or terms I could search which would help me understand this scenario?

  • 2
    $\begingroup$ Hint: do you generally directly encrypt files using asymmetric (public-key) cryptography? $\endgroup$
    – Maarten Bodewes
    Mar 24, 2021 at 12:27
  • $\begingroup$ As long as there is a "society server" which has a record of who the members are, that server could also hold the key for the group and may even do the encrypt/decrypt functions if the key should not be actually available at any of the clients. Without a central server, one can still manage to get copies of a key around to members. Revoking keys becomes a challenge. $\endgroup$ Aug 22, 2021 at 4:03

1 Answer 1


There are many ways to solve that problem. I would like to tell you my first ideas:

  1. Create a protocol, so that everyone shares the same key. With this key everyone can decrypt the file, write stuff, and the encrypt it again. It is a symmetric approach, but you public key infrastructure may be good to share the key (e.g. Diffie Hellman key exchange. This can also be used for groups). This idea is similar to group chats of messengers. Therefore you could inform yourself, how known messenger apps solve it.

  2. If we assume that they communicate circular ( A -> B -> C -> D -> A -> etc. ) you could only use public key crypto: Just give everyone a public key to decrypt and a private key to encrypt. A writes the file, decrypts it with the public key of B and sends it B. B can encrypt it, write stuff, etc.

What can be a problem is the point that Edgar also wants to know the previous messages. In idea 2. it's simple: Just add him to the circle. For idea 1 it's a bit more complex. When you add Edgar you want to create a new symmetric key. Therefore someone in the remaining network can decrypt the file first, then produce the new key and afterwards share the encrypted file (with new key) again.

Anyway: There are a lot of methods to solve your problem and for most applications performance is very important. Therefore in practice you want to choose the solution which is fastest, cheapest and still provides security.

I hope I way able to help you!


Your Answer

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