Si desea asegurarse de que el servidor no pueda descifrar el archivo, no debe revelar la contraseña al servidor. Por lo tanto
- la contraseña de cifrado no debe usarse para la autenticación del lado del servidor;
- los datos deben estar cifrados en el lado del cliente .
Puedes crear arquitecturas complejas, pero fundamentalmente, si no confías en el servidor, no le des tu contraseña.
Una aplicación web simple (PHP del lado del servidor más JavaScript del lado del cliente) que hace esto es ZeroBin . Recomiendo leer este informe sobre Ars Technica sobre un sitio basado en Zerobin . ZeroBin no realiza ninguna autenticación, que puede o no ser lo que quieres, esto es solo un ejemplo (de código abierto) para ilustrar el principio.
Para tener confianza en que ZeroBin no revela sus datos al servidor, debe revisar el código JavaScript que se ejecuta en el navegador y convencerse de que funciona como se anuncia.
Alternativamente, si desea realizar el cifrado del lado del servidor, debe asegurarse de que el servidor sea lo suficientemente seguro para sus necesidades. Eso significa que necesita confiar (o hacer que un tercero (en quien confíe) verifique mediante una auditoría) que:
- El servidor no almacena ni filtra contraseñas.
- El código del servidor se comporta como se anuncia; en particular, solo almacena datos encriptados y borra rápidamente cualquier copia temporal de texto sin formato.
- Los datos en tránsito están protegidos adecuadamente.
- El servidor está físicamente seguro, de modo que ningún intruso puede acceder a sus datos o su contraseña mientras está en uso.
- Las personas con acceso legítimo al servidor (por ejemplo, administradores del sistema) son confiables.
- Este estado de cosas seguirá siendo verdadero mientras use el servicio.