¿Hay algún procesador que pueda descifrar los datos cifrados y las instrucciones de la máquina y luego ejecutar las instrucciones en los datos y luego cifrar los resultados?
Hay bastantes procesadores que admiten memoria cifrada. Tales procesadores se descifran de forma transparente cada vez que se leen de la memoria (código o datos) y se cifran antes de volver a escribir en la memoria.
Esto ha sido compatible durante muchos años en los procesadores utilizados en tarjetas inteligentes y tokens USB. Por ejemplo, de acuerdo con ¿Cuál es el estado de la técnica? de cifrado homomorfo? .
En los últimos años, se ha agregado compatibilidad con el cifrado RAM a los procesadores utilizados en dispositivos electrónicos de consumo, como consolas de juegos y decodificadores. Un buen ejemplo de esto es el XBOX 360, en el que el cifrado de RAM fue un desafío importante para los piratas informáticos como se describe en esta presentación clásica realizada por Felix Domke y Michael Steil (video) .
Para minimizar el impacto en el rendimiento del procesador, el algoritmo de descifrado de RAM probablemente no será un cifrado de bloque fuerte como AES, sino un cifrado de flujo síncrono .
Dicha tecnología de encriptación de memoria está destinada a defenderse contra un atacante que no controla la CPU pero que puede acceder directamente a la memoria física, por ejemplo, sondeando el bus que conecta la CPU con la memoria física.
Este es un área de investigación activa (por ejemplo, ver esto ). De hecho, es un problema bastante difícil, porque el modelo de seguridad asume que el atacante es el sistema host, que puede observar cada acceso a la memoria. Es difícil no filtrar información en estas condiciones ...
Por ejemplo , imagine una CPU que calcula una firma RSA. Durante el curso del algoritmo, la CPU evaluará algunas instrucciones, algunas de las cuales son saltos condicionales, y la CPU funciona con una tubería con algunas predicción de ramificación : para hacer las cosas un poco más rápido, la CPU intenta para adivinar si se tomará o pasará una determinada rama condicional, en función de lo que sucedió las últimas veces que se detectó este salto. Cuando la CPU adivina mal, la ejecución se detiene durante unos pocos ciclos: la CPU debe olvidar su canalización actual y rellenar su tubería con las instrucciones reales.
Ahora, imaginemos un atacante bastante limitado que solo puede observar si los saltos se predicen correctamente o no. Eso no es mucho poder; en el caso de su CPU encriptada, el atacante puede aprender mucho más que eso. Pero, al menos , dado que tanto el código de operación como los datos provienen de la memoria, al observar las operaciones de búsqueda y escritura de la memoria (en particular las direcciones de destino y el tiempo de acceso con precisión del ciclo) le dirá al atacante lo que sucede con la predicción de rama.
Resulta que dicha información es suficiente para recuperar la clave RSA . Este es un resultado bastante fuerte y aterrador, ya que el análisis de predicción de bifurcaciones se puede hacer en una CPU moderna con hyper-threading de un proceso sin privilegios que se ejecuta en el mismo procesador (lo que significa que en la nube, sus vecinos, es decir, otros clientes de la misma nube, son peligrosos ...). El modelo que imaginas, donde la arquitectura del host en sí es hostil, lo hace más fácil ( mucho más fácil) para el adversario.
Los hechos concretos nunca han impedido que se hagan negocios. Por lo tanto, hay microcontroladores que, al menos, pretenden hacer el tipo de encriptación automática que usted desea. Consulte, por ejemplo, el DS5002FP de Maxim Integrated. Tenga en cuenta que no reclamo que este producto esté dañado: se trata de una CPU muy pequeña de 8 bits que es poco probable que haga predicciones de bifurcaciones u otras fuentes similares de fugas, e integra toda la RAM en el propio chip. Esto hace que la reclamación de seguridad sea al menos posible , incluso plausible . También significa que la potencia de cálculo seguirá siendo baja. Dicho microcontrolador ofrecerá casi tanto poder como mi primera computadora (desde 1984).
¿Una CPU virtual, entonces? Teóricamente es posible (o, más precisamente, no se ha demostrado que sea imposible) descargar cálculos arbitrarios a una computadora no confiable mediante el uso de encriptación homomorfa . Incluso hay una implementación de código abierto pero es incluso más lenta que la CPU compatible con 8051 del párrafo anterior. Una vez más, esta es un área de investigación activa.
Sí, hay. De hecho, es muy probable que hayas publicado desde uno. Pero el cifrado en el procesador no es una bala de plata.
Una CPU x86 (procesador de PC) o una CPU ARM de alta gama (procesador de teléfono inteligente) contiene una pequeña cantidad de caché. Hay suficiente espacio para ajustar el código para cifrar y descifrar las instrucciones y la memoria de datos sobre la marcha. De esta manera, la RAM externa se convierte efectivamente en almacenamiento encriptado y espacio de intercambio.
Para la mayoría de los ataques, no hay diferencia entre el procesador en sí y el nivel de caché más interno (el caché L1). La memoria caché L1 está dentro de la misma oblea de silicio que el procesador, y un ataque físico en la memoria caché sería tan difícil como un ataque físico en el propio procesador. Por lo tanto, por razones de seguridad, el procesador y el caché L1 son los mismos. En muchos procesadores, incluso la memoria caché L2 está dentro del mismo paquete y es tan difícil de atacar, lo que le da más espacio para trabajar. Si le preocupan los atacantes que pueden ir dentro del paquete, realmente necesita colocar su procesador. una caja resistente a la manipulación indebida, es decir, una HSM , en cuyo caso también puede colocar suficiente RAM dentro de la caja.
El beneficio de cifrar datos fuera de la CPU es evitar ataques en la RAM externa. Hay dos tipos principales de ataques: husmear en un bus RAM en vivo o modificar datos en el bus, y descargar el contenido de la RAM.
Hay varios problemas con el cifrado de datos fuera de la memoria caché del procesador.
También hay procesadores que tienen soporte directo de hardware para el cifrado en la CPU, y donde todos los buses de comunicación que salen de la CPU están cifrados. (Sé que existen, pero no puedo nombrar un número de pieza). Estos procesadores tienden a usarse en aplicaciones especializadas.
¹ La forma obvia de hacerlo es incluso patentado .
No en una sola instrucción, no. Pero quizás pueda lograr algo muy cercano con una CPU que admita instrucciones AES-NI (CPU modernas de Intel y AMD) con un programa escrito en x86_64 ASM (lenguaje ensamblador). No puedo darte una respuesta definitiva, porque no soy un programador de ASM. Supongo que desea evitar escribir información no cifrada en la RAM del sistema y mantenerla completamente contenida dentro de la CPU. Esto es algo bastante bajo nivel En una nota relacionada, hay un parche para el kernel de Linux, que permite que la clave de cifrado del disco completo se almacene solo en los registros de la CPU y no en la RAM. Proporciona un factor de mitigación contra los ataques de arranque en frío que dependen de la clave de cifrado almacenada en la RAM.
Lea otras preguntas en las etiquetas encryption