I'm part of a team designing a system where a user have to be able to read a certain package, if he has preformed an action or series of actions that makes it legal for him to do so.

The tricky part is that the user contacts the server, receives the data he needs to work with, along with the package he might have to open, performs a series of actions with the data, and reports his actions to the server. As said the package should not be read unless the right actions is reported.

So what I'm interested in knowing is if there's a way to make decrypting the file impossible without leaving traces of decryption?

I've looked into allot of different cryptographic methods, but all of them require reporting your actions to another party, but i would prefer to be able to do this without leaving the clients device.

I am hoping the bright heads of stackexchange crypto would have some ideas that might work, or at least be able to tell me if what i want isn't possible.

A specific use case could be that if for an example we're playing a game, and your opponent have a hidden unit, you can be allowed to view that unit if you choose to sacrifice some of your units, or something like that.

  • 3
    $\begingroup$ I don't think this is strictly possible with crypto alone... it's more of a software/protocol problem. If you can assume that the server only delivers the data to be decrypted once the user has been authenticated, and that decrypting the data is trivial (ie, that particular user has the key to decrypt it), then it's probably safe to say that the data has been decrypted by that user, meaning that the server can make a note of it's retrieval/decryption. Vaguely related are time-sensitive crypto questions here and here. $\endgroup$ – hunter Nov 29 '13 at 0:37
  • 3
    $\begingroup$ Please be more specific. Do you want a receipt that the user has read a license agreement and approved it (use certificates and a digital signature of "[license] I approve [name]", or do you need confirmation that the software has automatically performed a few simple steps (cf e.g. crypto.stackexchange.com/questions/9497/…)? $\endgroup$ – Henrick Hellström Nov 29 '13 at 7:06
  • $\begingroup$ I tried to add a use case that might help you understand what I'm trying to do. $\endgroup$ – Kristoffer la Cour Nov 29 '13 at 14:21
  • $\begingroup$ Your example suggests that your problem is similar to the problem of e-cash: How do you spend any of your electronic coins, in such way that it is impossible for you to keep a copy of the same coin and spend it again later? I don't think this can be done completely on one client, without some sort of commitment that are stored in multiple locations. $\endgroup$ – Henrick Hellström Nov 30 '13 at 9:08
  • $\begingroup$ I've been suggested looking into e-coins before, but could, as you said, not find anything that allows me to stay on one client. I've also been suggested linked timestamping, but that as well requires that you report in to another party... $\endgroup$ – Kristoffer la Cour Nov 30 '13 at 9:28

Your Answer

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

Browse other questions tagged or ask your own question.