CENTRO DE INVESTIGACIÓN Y DE ESTUDIOS AVANZADOS DEL INSTITUTO POLITÉCNICO NACIONAL 1 Generador de Números Aleatorios Basado en un Oscilador Caótico en 3D Adrian Josué Ramírez Díaz, Cuauhtemoc Mancillas López, Esteban Tlelo Cuautle Departamento de Computación, CINVESTAV Abstract Se describe el diseño de un oscilador caótico de tiempo continuo en tres dimensiones (3D), su discretización para su implementación en hardware digital, y pruebas para generador números pseudoaleatorios. Se detalla la aplicación de métodos numéricos para resolver el sistema de ecuaciones diferenciales ordinarias y la aproximación de una función exponencial por series de potencia para su realización en hardware digital. Se describe un análisis para la búsqueda de los parámetros que generan la mejor distribución de valores binarios y finalmente se presentan los resultados obtenidos por el generador de números aleatorios al ser implementado en una tarjeta Raspberry Pi 3 analizando la distribución generada mediante una gráfica de datos binarios. Index Terms Números aleatorios, Oscilador caótico, Raspberry Pi 3, Métodos numéricos I. INTRODUCCIÓN El desarrollo de simulaciones para diversos sistemas, o la implementación de algunos algoritmos criptográficos requiere un componente de aleatoriedad, el cual se logra mediante el uso de generadores de números aleatorios, los cuales proporcionan números con una distribución aleatoria predeterminada. Sin embargo, es posible transformar esta distribución para que sea factible su adaptación al problema en cuestión, como incrementar la aleatoriedad [1]. En sistemas electrónicos, se tiene que determinar el tipo de hardware que implementará un modelo matemático, como el oscilador caótico de tres dimensiones (3D) introducido en [2]. A partir del diseño de este oscilador caótico, se mostrará la forma en que se construirán un generador de números aleatorios. En este trabajo, se detalla la implementación de una función exponencial que se aproxima por series de potencias, para su realización en hardware digital usando un Raspberry Pi 3. También se detalla como se selecciona un nivel de umbral para la construcción de un generador de números aleatorios haciendo uso de las series de tiempo que proveé el oscilador caótico. De esta manera, se analizan métodos que presentan mayor entropía al sistema, esto con el objetivo de tener un generador de series de tiempo con mayor aleatoriedad. De igual forma, se analiza la distribución de los datos que genera el oscilador caótico variando el valor del parámetro de bifurcación, que en el caso del sistema 3D descrito en[2], sólo se tiene el parámero a, siendo el objetivo tener distribuciones aleatorias con números más dispersos. II. ANTECEDENTES Un generador de números pseudoaleatorios es un algoritmo que produce una sucesión de números los cuales presentan una buena aproximación a un conjunto aleatorio de números, sin embargo la sucesión no es exactamente aleatoria, ya que se determina por un conjunto de valores iniciales, el cual incide directamente en la forma en que evolucionan las variables de estado del sistema dinámico. La mayoría de los algoritmos producen una sucesión con una distribución uniforme. II-A. Métodos para generar números pseudoaleatorios Existen diferentes formas de obtener números aleatorios, por lo que a continuación se presentan las tres principales. Provisión Externa: Tablas RAND. En las cuales se tiene la ventaja de que la serie de números obtenidos es reproducible. Sin embargo, este método requiere de una gran cantidad de memoria para el almacenamiento de los números así como la lentitud para su obtención. A partir de un proceso físico al azar. En estos métodos se utilizan instrumentos físicos, sin embargo los instrumentos no generan números aleatorios verdaderos a menos de que sean altamente elaborados. Generación interna de dígitos por medio de una relación de recurrencia. También llamada generación de números pseudoaleatorios, lo que sugiere que los números generados están inte-relacionados a través de relaciones numéricas y realmente no son independientes uno del otro. II-A.1. Propiedades de los generadores Pseudoaleatorios: A continuación de presenta una lista con las propiedades de los generadores pseudoaleatorios. 1. El número generado debe ser tan independientemente posible de otro número. 2. El generador debe ser rápido y no requerir una memoria excesiva. 3. Los números deben tener un ciclo largo antes de repetirse. 4. Se deberá regenerar el flujo de los números aleatorios. III. DESCRIPCIÓN DEL GENERADOR ALEATORIO Un generador de números aleatorios requiere de una fuente que produzca aleatoriedad. Sin embargo, los generadores de números realmente o verdaderamente aleatorios requieren de un alto coste de implementación y diseño en electrónica, por lo que se opta por la generación de números pseudoaleatorios, basados en relaciones numéricas, motivo por el cual el generador que se presenta esta basado en el modelo 3D en [2], cuya discretización aplicando el método numérico de Euler se describe por las siguientes ecuaciones:
CENTRO DE INVESTIGACIÓN Y DE ESTUDIOS AVANZADOS DEL INSTITUTO POLITÉCNICO NACIONAL 2 x n+1 = x n + h( z) y n+1 = y n + h(xz 2 ) z n+1 = z n + h[x n ae y + z n (y 2 n z 2 n)] Como se puede observar en las ecuaciones anteriores, el sistema será iterado, modificando el valor de a con el fin de tener la mayor entropía en el sistema. Así también, la aproximación de la función exponencial se realizará por medio de series de potencia. Por ejemplo: la figura 1 presenta la comparación entre los valores de la función exponencial y los valores obtenidos a través de la aproximación númerica considerando sólo los primeros 5 términos, como se muestra en el Apéndice I, lo que permite corroborar que el uso de dicha función no alterará el comportamiento general del oscilador. Fig. 2. Respuesta del oscilador con a = 0.1 y paso = 0.05 Fig. 3. Respuesta del oscilador con a = 0.1 y paso = 0.1 Fig. 1. Aproximación de la función exponencial III-A. Determinación de los parámetros de ejecución Aproximada la función exponencial, el siguiente paso es la implementación de el oscilador caótico en 3D, cuya simulación se describe en el apéndice 2. La ejecución consiste en realizar diferentes pruebas con distintos valores del parámetro a y el tamaño de paso durante la iteración, a fin de obtener la mayor inestabilidad del sistema. Se comenzó por fijar el parámetro de a = 0.1 y establecer el tamaño de paso en 0.05 obteniendo la Figura 2. En la cual se puede apreciar la periodicidad de la función, motivo por el cual la configuración inicial propuesta no funciona para propósitos de un generador de números aleatorios. De esta manera, se necesita buscar los valores de los parámetros adecuados del tamaño de paso y a. Para la siguiente prueba se modificará el tamaño de paso, dejando el parámetro a sin modificar, esto para verificar el efecto que tiene cambiar dicho parámetro sobre el resultado final. La Figura 3 permite determinar que el aumento de paso no modifica el comportamiento de la función, luego entonces, Fig. 4. Respuesta del oscilador con a = 0.01 y paso = 0.05 se procederá a modificar el valor de a para encontrar la configuración necesaria. La Figura 4 muestra el comportamiento de la función con a = 0.01. La Figura 4 muestra que al modificar a es posible cambiar el comportamiento de la función, sin embargo, el parámetro seleccionado produjo una mayor estabilidad. Por el contrario, el oscilador presenta una menor estabilidad con el parámetro
CENTRO DE INVESTIGACIÓN Y DE ESTUDIOS AVANZADOS DEL INSTITUTO POLITÉCNICO NACIONAL 3 a = 0.12, tal y como se presenta en la figura 5. III-B. Selección del componente de la función Seleccionados los parámetros bajo los cuales se realizará la simulación del oscilador, es importante elegir la variable de estado x, y o z, del oscilador, a partir del cual se generarán los bits aleatorios. Como se observa en la Figura 6, es posible ocupar cualquiera de los componentes para generar los bits aleatorios, sin embargo, al presentar la mayor dispersión se utilizó el componente de la variable de estado y. Fig. 5. Respuesta del oscilador con a = 0.12 y paso = 0.055 IV. GENERACIÓN DE BITS ALEATORIOS Implementado el oscilador y seleccionado el componente y, el siguiente paso es la selección de bits. Para ello se selecciona un valor y se cuenta el número de bits que se encuentran arriba del valor seleccionado, mismos que representarán el 1, así también se cuenta el número de bits que se encuentran por debajo del valor, los cuales representan 0. Al terminar el conteo, se verifica que la proporción sea del 50 % para cada uno de los elementos. Fig. 6. Comportamiento de las tres variables de estado (a) x, (b) y, (c) z.
CENTRO DE INVESTIGACIÓN Y DE ESTUDIOS AVANZADOS DEL INSTITUTO POLITÉCNICO NACIONAL 4 Un punto importante para señalar en la selección de los bits aleatorios, con cierto intervalo el elemento a contabilizar, ya que, si se toman todos los valores que ofrece la función, estos formarán conjuntos de ceros y unos, conjuntos que no servirán para ser agrupados en enteros. Para la selección correcta del nivel bajo el cual se contabilizan los bits se realizaron diferentes pruebas, a modo de elegir la prueba con el valor más cerca de la proporción deseada. Nivel Elementos 0 Elementos 1 1 947703 52297 0.9 915678 84322 0.8 864300 135700 0.7 799736 200264 0.6 720893 279107 0.5 633580 366420 0.4 533966 466034 0.3 415140 584860 0.2 275576 724424 0.1 140629 859371 Fig. 7. Proporción bajo diferentes niveles La tabla presente en la Figura 7 contiene los resultados de las pruebas realizadas para determinar el nivel bajo el cual se realiza la captura de bits. Por lo que, en base a esos resultados se presenta la Figura 8 donde se observa que el parámetro adecuado para el nivel de conteo es 3.6. Fig. 9. Distribución producida por el generador VI. CONCLUSIÓN A partir del presente trabajo se puede determinar que el uso de métodos no aletarios para generar conjuntos de números pseudoaleatorios es factible, siempre y cuando se realice el análisis pertinente de la función en cuestión. Esto mediante la selección de los parámetros adecuados así como el método de simulación correcto. Por otra parte, si bien la elección del método y configuración de la función es crucial para la inestabilidad del sistema, el método de selección de los bits que conformarán los números aleatorios también resulta una parte importante del método, ya que de ello depende una buena distribución de datos. APPENDIX I APROXIMACIÓN DE LA FUNCIÓN EXPONENCIAL POR SERIES DE TAYLOR f l o a t e x p o n e n c i a l ( f l o a t x ) { return 1 + ( x / 1 ) + ( ( x x ) / 2 ) + ( ( x x x ) / 6 ) + ( ( x x x x ) / 2 4 ) + ( ( x x x x x ) / 1 2 0 ) ; Fig. 8. Selección del nivel de conteo V. PRUEBAS Generados un conjunto de bits, se agrupan en paquetes de 32 bits para formar enteros sin signo, lo que ocasiona que se tenga una distribución aleatoria, de números enteros, por lo que, la prueba consistió en generar una serie de números y verificar mediante una gráfica que la distribución sea la correcta. La gráfica presente en la Figura 9 muestra la distribución aleatoria obtenida al generar 10000 números, agrupados en parejas, con lo cual se puede comprobar que la distribución funciona para los parámetros seleccionados, generando valores entre 0 y 10. f l o a t x, y, z ; f l o a t a ; i n t i t e r ; f l o a t h ; i n t i ; APPENDIX II IMPLEMENTACIÓN DEL OSCILADOR i n t main ( i n t argc, char c o n s t a rgv [ ] ) { f l o a t xs, ys, zs ; i f ( a r g c > 2) { a = a t o f ( argv [ 1 ] ) ; h = a t o f ( argv [ 2 ] ) ; i t e r = a t o i ( a rgv [ 3 ] ) ; x = y = z = 0. 1 ;
CENTRO DE INVESTIGACIÓN Y DE ESTUDIOS AVANZADOS DEL INSTITUTO POLITÉCNICO NACIONAL 5 f o r ( i = 0 ; i < i t e r ; i ++ ) { xs = x + ( h ( z ) ) ; ys = y + ( h ( x z z ) ) ; zs = z + ( h ( x ( a e x p o n e n c i a l ( y ) ) + z ( y y z z ) ) ) ; p r i n t f ( %d %f %f %f \n, i, xs, ys, zs ) ; x = xs ; y = ys ; z = zs ; e l s e { p r i n t f ( E r r o r : a r g s [ f l o a t a ] [ f l o a t s t e p s i z e ] [ i n t n i t e r a t i o n s ] \n ) ; return 0 ; APPENDIX III GENERACIÓN DE BITS ALEATORIOS i n t main ( i n t argc, char c o n s t a rgv [ ] ) { f l o a t xs, ys, zs ; f l o a t d i v i d e ; i f ( a r g c == 3) { a = 0. 1 2 ; h = 0. 0 5 5 ; i t e r = a t o i ( a rgv [ 1 ] ) ; d i v i d e = a t o f ( argv [ 2 ] ) ; cn0 = cn1 = 0 ; x = y = z = 0. 1 ; f o r ( i = 0 ; i < i t e r ; i ++ ) { xs = x + ( h ( z ) ) ; ys = y + ( h ( x z z ) ) ; zs = z + ( h ( x ( a e x p o n e n c i a l ( y ) ) + z ( y y z z ) ) ) ; i f ( ys > d i v i d e ) { p r i n t f ( %d 1 \n, i ) ; cn1 ++; e l s e { p r i n t f ( %d 0 \n, i ) ; cn0 ++; x = xs ; y = ys ; z = zs ; p r i n t f ( 0= %d 1= %d\n, cn0, cn1 ) ; e l s e { p r i n t f ( E r r o r : a r g s [ i n t n i t e r a t i o n s ] [ f l o a t d i v i d e ] \n ) ; return 0 ; REFERENCES [1] Miklos Santha, Umesh V. Vazirani (1984). Generating quasi-random sequences from slightly-random sources. Proceedings of the 25th IEEE Symposium on Foundations of Computer Science. ISBN 0-8186-0591-X. [2] Tlelo-Cuautle, E., de la Fraga, L. G., Pham, V. T., Volos, C., Jafari, S., de Jesus Quintas-Valles, A. (2017). Dynamics, FPGA realization and application of a chaotic system with an infinite number of equilibrium points. Nonlinear Dynamics, 1-11. DOI: 10.1007/s11071-017-3505-2 [3] John von Neumann (1963). Various techniques for use in connection with random digits. The Collected Works of John von Neumann. Pergamon Press. pp. 768-770. ISBN 0-08-009566-6. [4] Carlos Marquez, Números pseudoaleatorios en https://carlosmarquez.files.wordpress.com/2012/02/unidad-4-generacionde-numeros-pseudoaleatorios1.pdf