Dado: algunos datos ( D ) cifrados con la clave ( K ), lo que resulta en la carga útil cifrada ( E ). ¿Es posible enviar E (junto con cualquier otra cosa requerida) a un servidor para almacenar? Y luego verificar que se usó K para cifrar los datos originales que resultaron en
El propósito de esto es que un usuario que no conoce los datos originales desea tener acceso a ellos y solo conoce K (se les proporcionó). Deben mostrar al servidor que saben que K se utilizó para cifrar los datos antes de que el servidor les devuelva E para el descifrado real. Obviamente, todo este proceso no debe revelar el texto sin formato K al servidor ni debe enviarse a través de la red. Para que cualquier persona que vea la red o se siente en el servidor no tenga acceso gratuito a K .
Una posible solución que se me ocurrió es enviar una versión con hash local de K con E para el almacenamiento en el servidor que luego se puede verificar con otra versión con hash local de K más tarde. Si los dos valores de hash de K (el enviado en la solicitud y el almacenado en el servidor) coinciden, entonces K era correcto en lo que respecta al servidor .
¿Puede ver algún problema con la solución anterior o puede sugerir un enfoque más seguro?
Editar: En este sistema hipotético, los usuarios son anónimos, por lo que la autenticación del usuario no puede ser parte de la solución. Un usuario simplemente deberá proporcionar al servidor algún tipo de token que demuestre que tiene conocimiento de lo que es K . Si es correcto, el servidor responderá con E , si es incorrecto, no devolverá nada.