While there are ways to encrypt and decrypt information, most of these seem quite computation-heavy. Because of this I am thinking about splitting decryption into two parts - one is computation heavy and the other one is computation light. First part is performed on the remote untrusted server using some kind of session key, while the second part is done on the client side knowing the actual key.
User has a key K and there's encrypted information T on the server. User generates some K1 from his K and sends it to server. Server attempts to decrypt T with K1 and gets some T1 instead. It is not yet completely decrypted and neither of T, T1, K1 allow server to compute K. However K1 is generated in a way where user can easily decrypt T1.
Is this approach possible at all? What could be potential problems?
Update: I've come up with an example of how it could be done: User generates multiple keys - K1, K2, K3 ... KN, shuffles them and adds his own key K in the mix. Then he sends all those keys to the server and asks it to decrypt T with each of these keys. Server doesn't know which key is the correct one, while user knows which of T1 .. TN is the actual decrypted information while the rest is garbage. This particular approach has a lot of inherent weaknesses, as well as it doesn't allow to use the server for encryption (i.e. it's "read-only"), but it's kind of what I'm looking for.
Update 2: (Since I've spent my reputation on bounty I can't comment on answers anymore). The idea is to have a function that can be applied to a key and it's reverse function that could be applied to a "plaintext" that are easy to calculate and that can not be predicted by server (i.e. not constant for sure). The "generate garbage" and "discard garbage" are examples of this. The "generate hash from key" and "do nothing" are not good enough - server can simply omit the encryption, so this would only work if the hash is different for each session.
I do not know if this is possible at all, but I can't also prove it impossible.