En gran medida, la pregunta no tiene sentido, porque los datos son opacos para el servidor. Dado que el servidor no podrá, en ningún caso, leer los archivos descifrados, si dos archivos son idénticos o no, no debería tener ningún impacto. De hecho, el escenario completo debe ser más claro.
Tienes un servidor. El servidor almacena "datos cifrados" en nombre de algunos usuarios que se enviarán entre sí las claves de descifrado; todo el descifrado y el cifrado se producen en otros lugares, y su servidor no puede hacerlo. Tenemos que asumir que hay un mecanismo fuera de banda por el cual los usuarios intercambian claves de descifrado.
Lo que usted desea, como propietario del servidor, es reconocer cuando se cargan varias instancias del archivo mismo en su servidor, de modo que pueda pagar el espacio de almacenamiento solo una vez (solo leo En algún lugar, "The Hobbit" fue la película más copiada de 2013, por lo que podría suponer que su plataforma prevista contendría varios cientos de copias de ese archivo de película de varios gigabytes). El cifrado normal y seguro debería evitar a los forasteros para que puedan hacer cualquier afirmación sobre el contenido de los datos, incluida la posibilidad de reconocer si dos archivos cifrados tienen el mismo contenido. En ese sentido, la deduplicación que está buscando es un debilitamiento del modelo de seguridad. Podemos predecir que a algunos usuarios no les gustaría; por ejemplo, si la deduplicación funciona, entonces usted (como el servidor) puede detectar cuándo un usuario está cargando "The Hobbit".
(Cuando la deduplicación funciona, entonces es posible realizar una búsqueda exhaustiva en el contenido de los archivos; esto es fácil de hacer para los archivos que se duplican mucho, porque un archivo que es conocido por muchos usuarios no puede ser realmente ese secreto, y en el contexto de la "aplicación de la propiedad intelectual", los archivos altamente engañados son de gran interés.)
Si hablamos en términos genéricos, entonces no puede aplicar la eliminación de duplicaciones, ya que cualquiera de los dos usuarios que quieran evadirlo puede simplemente cifrar dos veces sus datos. El usuario 1 primero cifra el archivo con una clave secreta extra, que compartirá con el usuario 2; esa clave se elige aleatoriamente, por lo que el archivo cifrado no coincidirá con ninguna otra instancia de los mismos datos; ese archivo encriptado luego se encripta nuevamente con su servicio. Los usuarios pueden hacer tal doble cifrado porque los datos son solo, in fine , un archivo en su disco, y supusimos que los usuarios pueden comunicarse entre sí independientemente de su servidor. Mientras los usuarios puedan hablar entre ellos, pueden intercambiar claves secretas que usted no conoce.
En algunos contextos muy específicos , es posible probar que algunos datos encriptados cumplen alguna propiedad algebraica sin revelarlos. Consulte pruebas no interactivas de conocimiento cero . Esto se usa en algunos protocolos de votación electrónica, de modo que el prover puede demostrar que lo que él cifró es realmente un 0 o un 1, no cualquier otro entero, pero sin divulgar el valor de voto real. Esto no se aplicará a un sistema de almacenamiento de archivos genérico, porque los "archivos normales" no siguen una estructura matemática discernible.
Por lo tanto , si desea imponer la eliminación de duplicaciones contra usuarios poco cooperativos, entonces debe hacer que los usuarios no puedan hablar entre sí . Es más fácil decirlo, hacerlo ... y parece difícilmente factible, ya que para que el sitio sea realmente útil, el remitente y el destinatario deben poder acordar al menos una clave de referencia, utilizada para ubicar el archivo en el servidor.