This question is language and platform independent.
Assumptions: I am a service provider and my service is storing data encrypted with a key that my customer knows - but I do not.
My customer (party A) wants me to retain this data to a specific time then release the data to another party (party B) who does not know the decryption key.
I should never be able to decrypt the data myself - even writing code to do so.
The initial customer is unavailable and unable to pass the decryption key on to party B. It is my job as the service provider to provide a way for party B to decrypt the data.
Because party A cannot share the decryption key with party B ahead of time.
The catch is it must be impossible for me to know this decryption key and I must not be able to decrypt this data myself. A computer program can do this - that is allowed - but there must be no way for me to manipulate the data stored and decrypt it.
It would be a simple matter to store the decryption key and pass it on at the proper time, but I would then have access to decrypt the data and I do not want to even have that option. So how do we keep the decryption key secret until time for the exchange and exchange it without revealing it to me?
Edit: ideally B should have to do nothing. B may not even be aware of the situation until it becomes necessary to decrypt the data. This is the reason for the SP - but the SP cannot be able to decrypt. SP is necessary to prevent B from accessing data prematurely and to facilitate decryption by B. When it is time for B to decrypt A cannot be involved.
Purpose: protect data exchange from a to b where through dishonesty or coercion it is impossible for the SP to compromise the data and where a is no longer able to grant access to the decryption keys. Impossible?
The root question is: is there a scheme by which SP can encrypt data and convey decryption info to B without being able to use the decryption key.
The solution can be complex. SP doesn't have to know the link between the keys and the data or the links between data and recipient but when event occurs that releases the data then B must be able to decrypt. It must be impossible to decrypt before event.
How can this be accomplished?
Thanks!