Ataques de tiempo en código administrado

4

He escuchado que se ejecuta el código en un idioma administrado, por ejemplo. Java en la JVM es imposible de proteger contra ataques de tiempo debido a la naturaleza JIT de la mayoría de los tiempos de ejecución administrados. En concepto, estoy de acuerdo con esto, pero me gustaría entender qué es el conocimiento actual de la industria en relación con esto.

    
pregunta Anthony Kraft 12.11.2014 - 06:14
fuente

1 respuesta

6

Es poco probable que una declaración amplia como "esto es imposible" sea 100% precisa.

Es cierto que Java (y lenguajes similares como C # / .NET) se ejecuta con un compilador JIT eso producirá los códigos de operación reales solo en tiempo de ejecución, por lo que la secuencia de códigos de operación es más difícil de predecir; También puede cambiar con la versión de implementación de VM. Además, el lenguaje tiene un GC eficiente que promueve el uso de memoria dinámica, y en particular cadenas inmutables, que ofrecen una muchos de los comportamientos de tiempo dependientes de los datos.

Todavía es posible escribir código que sea inmune a los ataques de tiempo, en particular para algoritmos criptográficos. Solo debe rechazar algunas de las propiedades agradables de Java y usarlo como si fuera algún tipo de C. diluida. Trabajar en matrices de byte o char , usar aritmética en lugar de pruebas ... (así no utilice boolean ). Por ejemplo, este código inmune al tiempo compara x y y , y los intercambia si x es mayor que y :

int cc = (y - x) >> 31;
int tmpx = (cc & x) | (~cc & y);
int tmpy = (~cc & x) | (cc & y);
x = tmpy;
y = tmpx;

Es posible que notemos que Java hace que este código sea en realidad algo más fácil de escribir que C, ya que, al contrario de C, ofrece un comportamiento fijo estándar cuando se cambia a la derecha un valor negativo.

    
respondido por el Thomas Pornin 12.11.2014 - 13:24
fuente

Lea otras preguntas en las etiquetas