Después de leer esta respuesta hace un tiempo, me interesé por el cifrado totalmente homomórfico. Después de leer la introducción de la tesis de Gentry, comencé a preguntarme si su esquema de cifrado podría usarse para la ejecución de código ajeno como se define en el tercer párrafo.
En un esquema de cifrado totalmente homomórfico, generalmente ciframos algunos datos, los enviamos a un entorno hostil donde se calcula una determinada función en los datos, cuyo resultado se devuelve (encripta), sin que el adversario descubra cuáles son los datos recibidos o El resultado de la función es.
Con la ejecución de código ajeno quiero decir que ciframos un fragmento de código diseñado para resolver algún problema P y enviarlo a un entorno hostil. El adversario quiere usar C para resolver P , pero no queremos que sepa cómo funciona C. Si tiene una entrada I para P , puede encriptar I y luego usar (algún esquema de encriptación activado) C con I , que luego devuelve la salida O ( no encriptada) (la solución de P para la entrada I) El esquema de cifrado asegura que el adversario nunca descubra cómo funciona el código, es decir, para él funciona como un oráculo.
El uso práctico principal (se me ocurre) para tal esquema de cifrado sería hacer que la piratería sea más difícil o incluso imposible.
La razón por la que creo que esto puede ser posible utilizando un esquema de cifrado totalmente homomórfico es porque podemos ejecutar circuitos arbitrarios en datos cifrados, en particular una máquina universal de Turing. Luego podríamos encriptar el código como si fueran datos y luego usar el circuito para una máquina Turing universal en estos datos encriptados para ejecutar el código.
Planteo esto como una pregunta aquí porque no sé si esta idea es utilizable: nunca llegué mucho más allá de la introducción de la tesis de Gentry, y mi conocimiento sobre la criptografía es limitado. Además, no sé si ya hay un término de uso frecuente para la ejecución de código ajeno: intenté buscar la idea en Google pero sin saber el término apropiado no encontré nada.
Se me ocurren múltiples problemas que pueden causar problemas con este enfoque. En primer lugar, si utilizamos un cifrado totalmente homomórfico sin modificación, el resultado del cálculo ( ) se cifrará. Por tanto, sería inútil para el adversario que desea utilizar su código para resolver P . Si bien esto podría ser útil para, digamos, la computación en la nube, esto no es lo que quiero lograr.
En segundo lugar, debido a que estamos usando circuitos y no máquinas de Turing arbitrarias, no podemos usar cantidades arbitrarias de memoria: estamos limitados a una cantidad predeterminada de memoria. Esto significa que si queremos ejecutar un programa de esta manera, su huella de memoria siempre será la misma, es decir, su uso máximo de memoria.
Por último, las constantes involucradas seguramente matarían cualquier uso práctico de dicho sistema, pero creo que la idea es interesante.