Si bien hay formas de cifrar y descifrar la información, la mayoría parece bastante pesada. Debido a esto, estoy pensando en dividir el descifrado en dos partes: una es computación pesada y la otra es computación liviana. La primera parte se realiza en el servidor remoto no confiable utilizando algún tipo de clave de sesión, mientras que la segunda parte se realiza en el lado del cliente sabiendo la clave real.
El usuario tiene una clave K y hay información cifrada T en el servidor. El usuario genera algo de K1 desde su K y lo envía al servidor. El servidor intenta descifrar T con K1 y obtiene algo de T1 en su lugar. Todavía no está completamente descifrado y ninguno de T, T1, K1 permite que el servidor calcule K. Sin embargo, K1 se genera de una manera en que el usuario puede descifrar fácilmente T1.
¿Es este enfoque posible en absoluto? ¿Cuáles podrían ser problemas potenciales?
Actualización: Vine con un ejemplo de cómo se podría hacer: el usuario genera varias claves: K1, K2, K3 ... KN, las baraja y agrega su propia clave K en la mezcla. Luego envía todas esas claves al servidor y le pide que descifre T con cada una de estas claves. El servidor no sabe qué clave es la correcta, mientras que el usuario sabe cuál de T1 ... TN es la información descifrada real, mientras que el resto es basura. Este enfoque en particular tiene muchas debilidades inherentes y no permite usar el servidor para el cifrado (es decir, es de "solo lectura"), pero es algo de lo que estoy buscando.
Actualización 2: (desde que me gasté mi reputación en recompensas, ya no puedo hacer comentarios sobre las respuestas). La idea es tener una función que se pueda aplicar a una tecla y su función inversa que se pueda aplicar a un "texto simple" que sea fácil de calcular y que el servidor no pueda predecir (es decir, que no sea constante). El "generar basura" y "descartar basura" son ejemplos de esto. El "generar hash desde la clave" y "no hacer nada" no son lo suficientemente buenos: el servidor simplemente puede omitir el cifrado, por lo que esto solo funcionaría si el hash es diferente para cada sesión.
No sé si esto es posible, pero tampoco puedo demostrar que sea imposible.