En muchos lenguajes de programación, la inicialización de las variables locales es forzada, o el motor se negará rotundamente a leer datos sin inicializar. Incluso en los idiomas en los que puede leer variables sin inicializar y así obtener una copia de lo que quedó en la RAM en ese emplazamiento, no puede contar con que sea "aleatorio"; Tendrá una tendencia a contener siempre el mismo valor, dependiendo de lo que hizo la aplicación anteriormente. De hecho, en C, las variables locales son de la pila y / o almacenadas en caché en los registros de la CPU, y estos son recursos que se reutilizan constantemente en toda la aplicación.
Si el artículo que lees recomienda no inicializar la variable local, y luego para leerlos, y esperan que esto genere "aleatoriedad" , entonces este artículo será quemado a la estaca, por muchas razones:
-
La lectura de datos no inicializados es una clara violación de las especificaciones; en el estándar de lenguaje de programación C, esto se denomina "comportamiento indefinido" y puede producir resultados problemáticos, incluido un bloqueo de la aplicación o, lo que es peor, corrupción de memoria silenciosa.
-
Este tipo de aleatoriedad no será bueno, por cualquier concepto de "aleatoriedad" del que valga la pena hablar.
-
El comportamiento reproducible es bueno . Al tratar de obtener valores no reproducibles a partir de variables locales, el artículo simplemente promueve la imposibilidad de depurar el código, que solo se puede describir como una cosa estúpida y sangrienta por hacer . En particular por la seguridad. Esto casi garantizará la presencia de agujeros de seguridad duraderos y difíciles de detectar.
Si desea aleatoriedad, use lo que proporciona el sistema operativo, por ejemplo. %código%. Es incomparablemente mejor, desde todos los puntos de vista, que los rituales caseros irracionales destinados a propiciar a los dioses de la aleatoriedad.
Editar: Como señala @TerryChia, su pregunta podría ser sobre forzar una inicialización aleatoria de variables (locales o no) desde un PRNG, en lugar de dejar el valor predeterminado valor allí (si hay hay un valor predeterminado, por supuesto; en muchos lenguajes de programación, las variables locales no tienen ningún valor predeterminado). Lo que llamas "XOR" en ese contexto no está claro.
En ese caso, tampoco lee las variables antes de almacenar un valor significativo en ellas, en cuyo caso lo que las variables inicialmente contenían es completamente irrelevante: no afecta el comportamiento de su código. O bien, do lee las variables y luego obtiene estos valores aleatorios más o menos, lo que hace que el código de la aplicación no sea reproducible y provoque los problemas explicados anteriormente; a saber, que el código será difícil de depurar, lo que aumenta la probabilidad y la densidad de las vulnerabilidades reales.