I'm looking for encryption scheme with the following properties:

  • There's a sequence of keys that can be used to decrypt the message
  • Strictly only one key from the sequence is required to decrypt the message
  • Keys need to be used in the order that is defined by keys sequence
  • Once used, the key can't be used again to decrypt the message (this implies some kind of transformation of encrypted message as part of the decription process)
  • It is not possible to derive keys from the sequence based on knowing any number of the keys from the sequence
  • The encrypted message is kept by third party (e.g. on a server), that decrypts it for the receiver of the message on request, but only the receiver of the message keeps the sequence of the keys. In case of security breach, if the encrypted messages leak from the storage they're kept on, they're worthless for the attacker, because the third party doesn't keep the sequence of the keys. I know that it would be still possible to steal the message from primary memory when the receiver decrypts it, but the focus is on making the permanent storage of the message safe.
  • $\begingroup$ Please indicate why a particular solution is not valid. $\endgroup$ – Maarten Bodewes Nov 17 '14 at 16:56
  • $\begingroup$ You're talking about one message, presumably the same message for all properties. If this is the case then the properties are kind of contradictory. Only one key is needed to decrypt the message, but in the title it says multi-key encryption and the 3rd property seems to reflect that. Please clarify. $\endgroup$ – Artjom B. Nov 17 '14 at 20:16

Since you already trust the server to securely delete the plaintext message after decrypting it for a client, you can trust it to delete the encrypted versions too.

So for instance the case of 3 keys K1 .. K3 and plaintext P, store K1(P), K1(K2(P)),K1(K2(K3(P))) since they all start with K1, that is the only key that can be used at first. after K1 is presented, apply it to everything in the series, so you end up with. P, K2(P), K2(K3(P)). serve up P deleting it and store the rest as your new series for when K2 arrives. repeat the proceduce until the whole sequence and hence all the keys are used up.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.