El Arduino como Generador de El Arduino como Generador de Números Aleatorios
Números Aleatorios
� Los números aleatorios son útiles para una variedad de propósitos, tales como la generación de claves de cifrado de datos, la simulación y modelado de fenómenos la simulación y modelado de fenómenos complejos y para la selección de muestras aleatorias a partir de conjuntos de datos más grandes.
� También se han utilizado estéticamente, por ejemplo, en la literatura y la música, y son, por supuesto, siempre populares para los videojuegos y los juegos de azar.
Números Aleatorios
� Con el advenimiento de las computadoras, los programadores reconocieron la necesidad de un medio para introducir la aleatoriedad en un programa de aleatoriedad en un programa de computadora. Sin embargo, por sorprendente que pueda parecer, es difícil conseguir una computadora para hacer algo por casualidad. Una computadora sigue sus instrucciones a ciegas y por lo tanto es completamente predecible.
Números Aleatorios
The generation of random numbers is too important to be left to chance.—Robert R. Coveyou
Random numbers should not be generated with a method chosen at random.chosen at random.—Donald Knuth
Any one who considers arithmetical methods of producing random digits is, of course, in a state of sin.—John von Neumann
Números Aleatorios
� Pseudo-Random Number Generators (PRNGs)
− Los PRNGs son eficientes, lo que significa que se pueden producir muchos números en un corto período de tiempo, y deterministas, lo que significa que una de tiempo, y deterministas, lo que significa que una determinada secuencia de números se puede reproducir en una fecha posterior si el punto de partida en la secuencia es conocido.
� True Random Number Generators (TRNGs)
− En comparación con los PRNGs, los TRNGs extraen aleatoriedad de los fenómenos físicos y la introducen
TRNG comerciales
� AMD Geode LX
� VIA Padlock
� Intel DRNG
� Trusted Computing Group TPM
� Texas Instruments OMAP
� Freescale RNGA
� Raspberry Pi
Recepción por la Comunidad de Sofrware Abierto
� Theodore Ts'o: “Es una mala idea confiar en una caja negra que no puede ser auditada.”
� Linus Torvalds: “no serán utilizados como � Linus Torvalds: “no serán utilizados como única fuente de entropía.”
� FreeBSD SWG: “no podemos confiar en ellos nunca más.”
Arduino como TRNG
� El dispositivo presentado en este trabajo pone al alcance del usuario común una fuente razonablemente confiable de números aleatorios verdaderos (TRNG) de números aleatorios verdaderos (TRNG) de bajo costo, la cual puede ser utilizada en las aplicaciones que el usuario considere pertinentes. Dado que es un dispositivo de Hardware Abierto, puede ser escudriñado y auditado por la comunidad.
Subject: Re: How hard is it to make a RNG device?From: [email protected] (Will Ware)Date: 1995/06/20Newsgroups: comp.security.misc,sci.crypt,alt.security
Paul Dokas ([email protected]) wrote:: Roderick Smith ([email protected]) wrote:: > To get a TRULY random number sequence, you'd need to rely upon some truly: > random phenomenon, like the decay of a radioactive isotope.: How hard would it be to make such a device? Aren't there analog electrical: devices that produce random noise that could be run through an A->D device: and then sent over an RS232 port?
This really should be in a FAQ somewhere. There are various ways to dothis. People talk about using radioactive sources, and that probablythis. People talk about using radioactive sources, and that probablygives better randomness, but a more practical approach is to use noisefrom a reverse-biased PN junction. Some people like Zener diodes forthis; I prefer vanilla NPN transistors, such as 2n3904s. I use two ofthem set up like this:
+18 volts|15K|+----- to next stage
+-------+| |E CB-----BC E| |no Ground
connect
Ruido de avalancha
Rob Seward's TRNG
Arduino TRNG 1.3
Arduino TRNG 1.3
Arduino TRNG 1.3
Arduino TRNG 1.3
Arduino TRNG 1.3
Algoritmo
setup() loop()
Serial.begin()
median=calibrate()
ReadAnalog()<
median?0:1
de-bias()median=calibrate() de-bias()
makebyte()
Serial.print()
Algoritmo de Von Neumann para quitar el sesgo
Input Output
00 X
01 001 0
10 1
11 x
dd if=/dev/ttyACM0 | od -Ax -t x1
¿TRNG?
Dilbert, 25 Octubre 2001
rngtools
� rngtest trabaja en bloques de 20,000 bits a la vez usando el conjunto de prueba FIPS 140-2 (fe de erratas del 2001-10-10) para verificar la aleatoriedad del bloque de datos.datos.
� rngtest cuenta el número de bloques de 20,000 bits aceptados o rechazados por las pruebas FIPS 140-2.
� rngtest muestra un desglose de los fracasos de las pruebas FIPS 140-2.
Pruebas del TRNG
#!/bin/bash
DEV=/dev/ttyACM0
i=0
while test $i -le 100do stty -F $DEV 19200 raw -echodo stty -F $DEV 19200 raw -echo
rngtest -c 1000 < $DEV 2>&1 | tee -i rngtest-$(printf %04d $i).out
i=$[1+i]done
Resultados rngtest
50
60
70
80
90
100
Resultado prueba monobit
UnoDueGeode
Fre
cue
nci
a
0 1 20
10
20
30
40
50 GeodeRPiEsperado
Número de fallas por cada 1000 pruebas
Fre
cue
nci
a
Resultados rngtest
50
60
70
80
90
Resultado prueba runs
UnoDueGeode
Frec
uen
cia
0 1 2 30
10
20
30
40
GeodeRPiEsperado
Número de fallas por cada 1000 pruebas
Frec
uen
cia
Resultados rngtest
50
60
70
80
90
Resultado prueba long runs
UnoDueGeode
Fre
cue
nci
a
0 1 2 30
10
20
30
40
GeodeRPiEsperado
Número de fallas por cada 1000 pruebas
Fre
cue
nci
a
Resultados rngtest
50
60
70
80
90
100
Resultado prueba poker
UnoDueGeode
Fre
cue
ncia
0 1 20
10
20
30
40
50 GeodeRPiEsperado
Número de fallas por cada 1000 pruebas
Fre
cue
ncia
Resultados rngtest
30
40
50
60
Resultado FIPS 140-2
UnoDueGeode
Fre
cue
ncia
0 1 2 3 40
10
20
30 GeodeRPiEsperado
Número de fallas por cada 1000 pruebas
Fre
cue
ncia
rngtools
� rngd checa y alimenta datos aleatorios del TRNG en el almacén de entropí a del kernel de Linux
# rngd -r /dev/ttyACM0# rngd -r /dev/ttyACM0
� Para inhabilitar TPM y DRNG
# rngd -t1 -d1 -r /dev/ttyACM0
Desempeño
rngtest Input Channel Speed
Arduino Uno Adruino Due Geode Raspberry Pi
~585 bps ~4.699 Kbps 1,573 Kbps 672.3 Kbps~585 bps ~4.699 Kbps 1,573 Kbps 672.3 Kbps
Otros µC
Héctor Daniel Cortés González
Instituto de Energías Renovables
GRACIAS
Tel. 55-5622-9785
DGAPA PAPIME 2014 PE101814