el arduino como generador de números aleatorios€¦ · el arduino como generador de números...

31
El Arduino como Generador de El Arduino como Generador de Números Aleatorios

Upload: others

Post on 01-Jul-2020

32 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

El Arduino como Generador de El Arduino como Generador de Números Aleatorios

Page 2: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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.

Page 3: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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.

Page 4: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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

Page 5: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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

Page 6: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

TRNG comerciales

� AMD Geode LX

� VIA Padlock

� Intel DRNG

� Trusted Computing Group TPM

� Texas Instruments OMAP

� Freescale RNGA

� Raspberry Pi

Page 7: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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.”

Page 8: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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.

Page 9: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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

Page 10: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

Ruido de avalancha

Page 11: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

Rob Seward's TRNG

Page 12: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

Arduino TRNG 1.3

Page 13: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

Arduino TRNG 1.3

Page 14: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

Arduino TRNG 1.3

Page 15: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

Arduino TRNG 1.3

Page 16: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

Arduino TRNG 1.3

Page 17: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

Algoritmo

setup() loop()

Serial.begin()

median=calibrate()

ReadAnalog()<

median?0:1

de-bias()median=calibrate() de-bias()

makebyte()

Serial.print()

Page 18: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

Algoritmo de Von Neumann para quitar el sesgo

Input Output

00 X

01 001 0

10 1

11 x

Page 19: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

dd if=/dev/ttyACM0 | od -Ax -t x1

Page 20: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

¿TRNG?

Dilbert, 25 Octubre 2001

Page 21: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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.

Page 22: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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

Page 23: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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

Page 24: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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

Page 25: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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

Page 26: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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

Page 27: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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

Page 28: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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

Page 29: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

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

Page 30: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

Otros µC

Page 31: El Arduino como Generador de Números Aleatorios€¦ · El Arduino como Generador de Números Aleatorios. Números Aleatorios Los números aleatorios son útiles para una variedad

Héctor Daniel Cortés González

Instituto de Energías Renovables

GRACIAS

Tel. 55-5622-9785

DGAPA PAPIME 2014 PE101814

[email protected]