El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números...

Preview:

Citation preview

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: wware@world.std.com (Will Ware)Date: 1995/06/20Newsgroups: comp.security.misc,sci.crypt,alt.security

Paul Dokas (pbd@winternet.com) wrote:: Roderick Smith (rsmith@psych.colorado.edu) 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

hdcg@ier.unam.mx

Recommended