tipos tabla sorteos simulacion para numeros google generar generadores generador generacion clase azar aleatorios security cryptography random

security - sorteos - tabla numeros aleatorios



¿Cuál es la semilla más segura para la generación de números aleatorios? (20)

4 - elegido por tirada de dados muy aleatoria. :-)

¿Cuáles son las fuentes más seguras de entropía para generar un generador de números aleatorios? Esta pregunta es independiente del lenguaje y la plataforma y se aplica a cualquier máquina en una red. Idealmente, estoy buscando fuentes disponibles para una máquina en un entorno de nube o servidor proporcionado por una empresa de hosting.

Hay dos puntos débiles importantes a tener en cuenta. El uso del tiempo para enviar un generador de números aleatorios es una violación de CWE-337 . El uso de un espacio de semilla pequeño sería una violación de CWE-339 .


Aquí hay algunos pensamientos. Si eres impaciente, salta a la conclusión, al final.

1. ¿Qué es una semilla segura?

La seguridad se define solo en relación con un modelo de ataque. Queremos aquí una secuencia de n bits, que tiene n bits de entropía con respecto al atacante: en palabras simples, que cualquiera de los posibles 2 n valores para esa secuencia son igualmente probables desde el punto de vista del atacante.

Este es un modelo que se relaciona con la información disponible para el atacante. La aplicación que genera y usa la semilla (normalmente en un PRNG) conoce la semilla exacta; si la semilla es "segura" no es una propiedad absoluta de la semilla o incluso del proceso de generación de semillas. Lo que importa es la cantidad de información que tiene el atacante sobre el proceso de generación. Este nivel de información varía ampliamente según la situación; por ejemplo, en un sistema multiusuario (digamos de tipo Unix, con separación de aplicaciones forzada por hardware), la sincronización precisa de los accesos a la memoria puede revelar información sobre cómo un proceso protegido nominalmente lee la memoria. Incluso un atacante remoto puede obtener dicha información; esto se ha demonstrated (en condiciones de laboratorio) en encriptación AES (las implementaciones típicas de AES usan tablas internas, con patrones de acceso que dependen de la clave; el atacante fuerza el error y las detecta a través del tiempo preciso de las respuestas del servidor).

La vida de la semilla debe tenerse en cuenta. La semilla es segura siempre que siga siendo desconocida para el atacante; esta propiedad debe ser verdadera después. En particular, no será posible recuperar la semilla a partir de extractos de la siguiente producción de PRNG. Idealmente, incluso la obtención del estado completo de PRNG en algún momento no debería ofrecer ninguna pista sobre los bits que el PRNG produjo previamente.

El punto que quiero señalar aquí es que una semilla es "segura" solo si se usa en un contexto en el que puede permanecer segura, lo que más o menos implica un PRNG criptográficamente seguro y un almacenamiento a prueba de manipulaciones. Si dicho almacenamiento está disponible, entonces la semilla más segura es la que se generó una vez , hace mucho tiempo, y se usó en un PRNG seguro alojado con hardware a prueba de manipulaciones.

Desafortunadamente, dicho hardware es costoso (se llama HSM y cuesta unos pocos cientos o miles de dólares), y ese costo generalmente resulta difícil de justificar (una mala semilla no evitará que un sistema funcione, este es el problema habitual de la inestabilidad de seguridad). Por lo tanto, es costumbre recurrir a soluciones "principalmente de software". Como el software no es bueno para proporcionar un almacenamiento confidencial a largo plazo, la vida útil de la semilla se acorta arbitrariamente: periódicamente se obtiene una nueva semilla. En Fortuna , se supone que dicha resiembra ocurre al menos una vez por megabyte de datos pseudoaleatorios generados.

En resumen, en una configuración sin HSM, una semilla segura es aquella que se puede obtener con relativa facilidad (ya que lo haremos con bastante frecuencia) utilizando datos que el atacante no puede recopilar.

2. Mezcla

Las fuentes de datos aleatorias no producen buenos bits uniformes (cada bit tiene valor 1 con probabilidad exactamente 0.5 , y los valores de bit son independientes entre sí). En cambio, las fuentes aleatorias producen valores en un conjunto específico de la fuente. Estos valores pueden codificarse como secuencias de bits, pero no vale la pena el dinero: para tener n bits de entropía debe tener valores que, cuando se codifican, utiliza mucho más que n bits.

La herramienta criptográfica para usar aquí es una PRF que acepta una entrada de longitud arbitraria y produce una salida n- bit. Un PRF criptográficamente seguro de ese tipo se modela como un oráculo aleatorio : en términos cortos, no es factible computacionalmente predecir nada sobre el resultado del oráculo en una entrada determinada sin intentarlo.

En este momento, tenemos funciones hash . Las funciones hash deben cumplir algunas propiedades de seguridad, a saber, resistencia a preimágenes, segundas preimágenes y colisiones. Usualmente analizamos las funciones de hash al tratar de ver cómo se alejan del modelo de oráculo aleatorio. Aquí hay un punto importante: un PRF que sigue el modelo de oráculo aleatorio será una buena función hash, pero puede haber buenas funciones hash (en el sentido de resistencia a preimágenes y colisiones) que, sin embargo, son fáciles de distinguir de un oráculo aleatorio . En particular, las SHA-2 (SHA-256, SHA-512 ...) se consideran seguras, pero se apartan del modelo de oráculo aleatorio debido al "ataque de extensión de longitud" (dado h (m) , es es posible calcular h (m || m '') para un mensaje parcialmente restringido m'' sin conocer m ). El ataque de extensión de longitud no parece proporcionar ningún atajo en la creación de preimágenes o colisiones, pero muestra que esas funciones hash no son oráculos aleatorios. Para la competencia SHA-3 , NIST declaró que los candidatos no deberían permitir tal "extensión de longitud".

Por lo tanto, el paso de mezcla no es fácil. Su mejor opción es, ahora mismo, usar SHA-256 o SHA-512, y cambiar a SHA-3 cuando se elija (esto debería ocurrir a mediados de 2012).

3. Fuentes

Una computadora es una máquina determinista. Para obtener algo de aleatoriedad, debes mezclar el resultado de algunas medidas del mundo físico.

Una nota filosófica: en algún momento debes confiar en algunos tipos inteligentes, del tipo que puede usar batas de laboratorio o cobrar para hacer una investigación fundamental. Cuando usas una función hash como SHA-256, en realidad confías en un grupo de criptógrafos cuando te dicen: buscamos defectos, muy difíciles y durante varios años, y no encontramos ninguno. Cuando utilizas un trozo decadente de materia radioactiva con un contador Geiger, confías en algunos físicos que dicen: parecíamos muy difíciles de predecir cuándo se dispararía el próximo kernel atómico, pero no encontramos ninguno. Tenga en cuenta que, en ese caso específico, los "físicos" incluyen personas como Becquerel, Rutherford, Bohr o Einstein, y "realmente difícil" significa "más de un siglo de investigación acumulada", por lo que no está exactamente en territorio no pisoteado aquí. Sin embargo, todavía hay un poco de fe en la seguridad.

Algunas computadoras ya incluyen hardware que genera datos aleatorios (es decir, que usa y mide un proceso físico que, por lo que el físico puede decir, es lo suficientemente aleatorio). La VIA C3 (una línea de CPU compatible con x86) tiene dicho hardware. Por extraño que parezca, el Commodore 64, computadora doméstica de hace 30 años, también tenía un RNG de hardware (o al menos eso dice Wikipedia ).

Exceptuando el hardware especial, debe usar los eventos físicos que pueda recibir. Normalmente, utilizaría teclas, paquetes de Ethernet entrantes, movimientos del mouse, accesos al disco duro ... cada evento viene con algunos datos, y ocurre en un instante mensurable (los procesadores modernos tienen relojes muy precisos, gracias a los contadores de ciclos). Esos instantes y los contenidos de los datos del evento se pueden acumular como fuentes de entropía. Esto es mucho más fácil para el sistema operativo (que tiene acceso directo al hardware) que para las aplicaciones, por lo que la manera normal de recolectar una semilla es preguntarle al sistema operativo (en Linux, esto se llama /dev/random o /dev/urandom [ambos tienen ventajas y problemas, elija su veneno]; en Windows, llame a CryptGenRandom() ).

Un caso extremo son los applets Java anteriores a la 1.2, antes de la adición de java.security.SecureRandom ; dado que Java es muy eficaz para aislar el código de la aplicación del hardware, obtener una semilla aleatoria fue un desafío difícil. La solución habitual consistía en tener dos o tres subprocesos simultáneos y un cambio de secuencia loco, de modo que el número de conmutaciones de subprocesos por segundo era algo aleatorio (en realidad, esto intenta extraer aleatoriedad a través del tiempo de las acciones del planificador del sistema operativo, que dependen en lo que también ocurre en la máquina, incluidos los eventos relacionados con el hardware). Esto fue bastante insatisfactorio.

Un problema con las medidas relacionadas con el tiempo es que el atacante también sabe cuál es la hora actual. Si el atacante tiene acceso aplicativo a la máquina, entonces también puede leer el contador de ciclos.

Algunas personas han propuesto usar tarjetas de audio como fuentes de "ruido blanco" al poner el amplificador al máximo (incluso los servidores tienen audio hoy en día). Otros abogan por encender las cámaras web (sabemos que los videos de la cámara web son "ruidosos" y eso es bueno para la aleatoriedad, incluso si la cámara web está frente a una pared); pero los servidores con webcams no son comunes. También puede hacer ping a un servidor de red externo (por ejemplo, www.google.com ) y ver cuánto tiempo demora en regresar (pero esto podría ser observado por un atacante que espíe la red).

La belleza del paso de mezcla, con una función hash, es que la entropía solo puede acumularse; no hay daño al agregar datos, incluso si esos datos no son tan aleatorios. Simplemente haga todo lo posible a través de la función hash. Las funciones de hash son bastante rápidas (una buena implementación de SHA-512 procesará más de 150 MB / s en una PC típica, utilizando un único núcleo) y la creación de semillas no ocurre tan a menudo.

4. Conclusión

Use un HSM . Cuestan unos pocos cientos o miles de dólares, pero ¿no son sus secretos mucho más que eso? Un HSM incluye hardware RNG, ejecuta el algoritmo PRNG y almacena la semilla con resistencia a la manipulación. Además, la mayoría de los HSM ya están certificados con respecto a varias regulaciones nacionales (por ejemplo, FIPS 140 en los EE. UU. Y los niveles de EAL en Europa).

Si es tan barato que no va a comprar un HSM, o si desea proteger datos que realmente no valen la pena, cree un PRNG criptográficamente seguro utilizando una semilla obtenida al realizar muchas medidas físicas. Cualquier cosa que provenga de algún hardware debe ser hash, junto con el instante (léase "contador de ciclos") en el que se obtuvieron esos datos. Debería hash datos por el megabyte aquí. O, mejor aún, no lo hagas: simplemente utiliza las funciones que ofrece tu sistema operativo, que ya incluye dicho código.


Como el consenso es criptográficamente fuerte, los números aleatorios deben derivarse del hardware. Algunos procesadores tienen esta funcionalidad (chips Intel y otros). También se pueden usar tarjetas de sonido para esto al medir las fluctuaciones de bit bajo en el convertidor de anuncios.

Pero debido a las necesidades de hardware, no hay respuesta independiente de idioma y plataforma. Prácticamente cualquier OS más grande tendrá soporte para números aleatorios seguros. También es complicado implementar un buen generador de números aleatorios con buena salida, ya que tendrá que rastrear la entropía restante en el grupo.

Entonces, el primer paso es determinar qué idioma (s) usará. Algunos tienen una gran compatibilidad con números aleatorios: si no es así, tendrías que abstraer la generación para llamar fuentes aleatorias dependientes de la plataforma.

Dependiendo de sus necesidades de seguridad, esté cansado de las fuentes "en línea" ya que un intermediario puede ser una seria amenaza para las fuentes en línea no autenticadas.


Como una versión interesante de las libretas de una sola vez, cuando estoy involucrado en espionaje tengo un sistema por el cual solo necesito comunicar algunas letras. Por ejemplo, la última vez que vendí planes secretos para construir tostadoras para el Ducado de Grand Fenwick, solo necesitaba susurrar:

enonH

a mi confederado Sabía que debía obtener http://is.gd/enonH- (esta es una URL de expansión "segura" que lo lleva a la página de expansión is.gd que a su vez apunta a una imagen de SFW completamente de SFW). Esto nos dio 409k bits de una sola vez o, si hago un guiño mientras susurro "enonH", ella sabe tomar el hash de la imagen y usar eso como una clave de decodificación para mi próxima transmisión.

Debido a la compresión en imágenes JPEG, tienden a ser relativamente buenas fuentes de entropía según lo informado por ent :

$ ent frog.jpg
Entropía = 7.955028 bits por byte.

La compresión óptima reduciría el tamaño de este archivo de 51092 bytes en 0 por ciento.

La distribución de Chi cuadrado para 51092 muestras es 4409.15, y aleatoriamente excedería este valor 0.01 por ciento de las veces.

El valor medio aritmético de los bytes de datos es 129.0884 (127.5 = aleatorio).
El valor de Monte Carlo para Pi es 3.053435115 (error 2.81 por ciento).
El coeficiente de correlación serial es 0.052738 (totalmente no correlacionado = 0.0). No correlacionado = 0.0).

Combine eso con la imagen casi imposible de adivinar a la que la dirigí y mis planes secretos de tostadora están a salvo de The Man.


Con Linux, la respuesta es / dev / random (en Windows, creo que el equivalente se llama CryptGenRand).

Sin embargo, en un entorno de nube, / dev / random puede verse severamente agotado y puede no tener suficiente entropía para responder a su solicitud.

Para resolver ese problema, nuestra compañía está desarrollando un verdadero dispositivo generador de números aleatorios que puede proporcionar buenos números aleatorios (de origen cuántico) a miles de servidores y VM simultáneamente. Si el dispositivo está instalado en la LAN de su centro de datos en la nube, lo único que necesitaría es que nuestro dispositivo funcione en su máquina. Este demonio monitorea el nivel de entropía / dev / random y cuando se necesita entropía realiza una solicitud al dispositivo (a través de la red) y coloca los datos aleatorios recibidos en el grupo de entropía del kernel.

Si quiere saber más sobre nuestra solución, visite nuestro sitio web (www.sqrtech.com) o contáctenos a [email protected].

Julien


De acuerdo, suponiendo que el cliente necesita una semilla sólida, y está utilizando la computación en la nube, aquí hay una solución para algunos generadores de números aleatorios de hardware que puede ver aquí:

Wikipedia

Por lo tanto, esto supone que cada cliente tiene un par de claves pública / privada, donde el servidor conoce la clave pública para cada cliente. Para generar una clave, puede usar algo similar a lo que se hizo con PGP, al principio, donde toma la diferencia en el tiempo entre pulsaciones de tecla cuando alguien escribe, ya que eso no será adivinable.

Entonces, el cliente envía una solicitud de un número aleatorio. El servidor usa un generador de hardware, lo encripta con la clave pública y lo firma con la clave privada del servidor. El cliente puede verificar de dónde viene y luego descifrarlo.

Esto asegurará que pueda generar un número aleatorio y devolverlo de manera segura.

ACTUALIZAR:

Su mejor opción es buscar en el Arte de la Programación de Computadora o cualquiera de los libros de Métodos Numéricos, o ver lo que Bruce Schneier ha escrito, como estos enlaces: http://www.schneier.com/blog/archives/2006/06/random_number_g.html http://www.cryptosys.net/rng_algorithms.html http://www.schneier.com/blog/archives/2006/06/random_number_g.html http://www.schneier.com/blog/archives/2006/06/random_number_g.html Sugerencias para generación aleatoria de números en software, ftp://ftp.rsasecurity.com/pub/pdfs/bull-1.pdf

También puedes ver cómo Crypto ++ genera la generación, o al menos ver cómo lo hizo Wei Dai, http://www.cryptopp.com/


ESTO ES UN GUESS! Crypto geeks, por favor, corrija si lo tengo mal

El algoritmo oficial para UUID / GUID en este punto devuelve un resultado que se ejecuta a través de una función hash criptográfica: toma información conocida, como tiempo, mac addr y un contador para formar un UUID / GUID y luego ejecuta esto a través de una criptografía hash para garantizar que no se pueda extraer la dirección MAC.

I believe you can XOR this down to the number of bits you require for a seed with a reasonably good guarantee that the resultant value is equally distributed over the number space defined by your desired bit count. Note I am not claiming this is secure, only that this action should produce a value that distributes evenly across the bit space over time.


Escriba un cliente de radio por Internet, use una muestra aleatoria de la transmisión. Tener un grupo de varias estaciones para elegir y / o recurrir a.


James es correcto. Además, hay hardware que puedes comprar que te dará datos aleatorios. No estoy seguro de dónde lo vi, pero creo que he leído que algunas tarjetas de sonido vienen con dicho hardware.

También puede usar un sitio como http://www.random.org/


La respuesta es /dev/random en una máquina Linux. Esto está muy cerca de un generador de números aleatorios "reales", donde como /dev/urandom puede generarse mediante un PRNG si el conjunto de entropía se ejecuta en seco. La siguiente cita está tomada del random.c del kernel de Linux. Este archivo completo es una lectura hermosa, con muchos comentarios. El código de su auto fue adoptado de PGP. Su belleza no está limitada por las restricciones de C, que está marcado por estructuras globales envueltas por accesadores. Es un diseño simplemente impresionante.

Esta rutina recopila ruido ambiental de los controladores de dispositivo, etc., y devuelve buenos números aleatorios, adecuados para el uso criptográfico. Además de los usos criptográficos obvios, estos números también son buenos para sembrar números de secuencia TCP, y otros lugares donde es deseable tener números que no solo sean aleatorios, sino también difíciles de predecir por un atacante.

Teoría de operación

Las computadoras son dispositivos muy predecibles. Por lo tanto, es extremadamente difícil
para producir números verdaderamente aleatorios en una computadora --- a diferencia de
números pseudoaleatorios, que pueden generarse fácilmente usando un
algoritmo. Desafortunadamente, es muy fácil para los atacantes adivinar la secuencia de generadores de números pseudoaleatorios, y para algunos
aplicaciones esto no es aceptable. Entonces, en lugar de eso, debemos tratar de reunir el "ruido ambiental" del entorno de la computadora, que debe ser difícil de observar para los atacantes externos, y usarlo para generar números aleatorios. En un entorno Unix, esto se hace mejor desde el kernel.

Las fuentes de aleatoriedad del entorno incluyen inter-teclado
tiempos, intervalos entre interrupciones de algunas interrupciones y otros eventos que son (a) no deterministas y (b) difíciles de medir para un observador externo. La aleatoriedad de estas fuentes se agrega a un "conjunto de entropía", que se mezcla utilizando una función similar a CRC. Esto no es criptográficamente fuerte, pero es adecuado suponiendo que la aleatoriedad no se elige maliciosamente, y es lo suficientemente rápida como para que la sobrecarga de hacerlo en cada interrupción sea muy razonable. A medida que los bytes aleatorios se mezclan en el conjunto de entropía, las rutinas mantienen un cálculo de cuántos bits de aleatoriedad se han almacenado en el estado interno del generador de números aleatorios.

Cuando se desean bytes aleatorios, se obtienen tomando el SHA
hash de los contenidos del "pool de entropía". El hash SHA evita exponer el estado interno del grupo de entropía. Se cree que es computacionalmente inviable derivar cualquier información útil sobre la entrada de SHA a partir de su salida. Incluso si es posible analizar SHA de alguna manera inteligente, siempre y cuando la cantidad de datos devueltos por el generador sea menor que la entropía inherente en
el conjunto, los datos de salida son totalmente impredecibles. Por esta razón, la rutina disminuye su estimación interna de cuántos bits de "aleatoriedad verdadera" están contenidos en el conjunto de entropía, ya que genera números aleatorios. Si este cálculo es cero, la rutina aún puede generar números aleatorios; sin embargo, un atacante puede (al menos en teoría) ser capaz de inferir la producción futura del generador a partir de salidas anteriores. Esto requiere un criptoanálisis exitoso de SHA, que no se cree que sea factible, pero hay una posibilidad remota. No obstante, estos números deberían ser útiles para la gran mayoría de los propósitos.

...


La semilla más segura es la que tiene el mayor nivel de entropía (o la mayoría de los bits que no pueden predecirse). El tiempo es una mala semilla generalmente porque tiene una pequeña entropía (es decir, si sabes cuándo se realizó la transacción, puedes adivinar la marca de tiempo dentro de algunos bits). Las fuentes de entropía de hardware (por ejemplo, procesos de decaimiento) son muy buenas porque producen un poco de entropía para cada fragmento de semilla.

Por lo general, una fuente de hardware no es práctica para la mayoría de las necesidades, por lo que esto le lleva a depender de la mezcla de varias fuentes de entropía de baja calidad para producir una más alta. Normalmente esto se hace estimando el número de bits de entropía para cada muestra y luego reuniendo suficientes muestras para que el espacio de búsqueda de la fuente de entropía sea lo suficientemente grande como para que no sea práctico que un atacante realice una búsqueda (128 bits es una buena regla general )

Algunas fuentes que puede usar son: tiempo actual en microsegundos (típicamente muy baja entropía de 1/2 bit dependiendo de la resolución y qué tan fácil es para un atacante adivinar), tiempo entre llegadas de eventos de IU, etc.

Las fuentes del sistema operativo como / dev / random y el generador de números aleatorios de Windows CAPI a menudo proporcionan una fuente premezclada de estas fuentes de baja entropía, por ejemplo, el generador de Windows CryptGenRandom incluye:

  • El ID del proceso actual (GetCurrentProcessID).
  • El ID del hilo actual (GetCurrentThreadID).
  • El conteo de ticks desde el tiempo de arranque (GetTickCount).
  • La hora actual (GetLocalTime).
  • Varios contadores de rendimiento de alta precisión (QueryPerformanceCounter) .-
  • Un hash MD4 del bloque de entorno del usuario, que incluye el nombre de usuario, el nombre de la computadora y la ruta de búsqueda. [...] -
  • Contadores de CPU internos de alta precisión, como RDTSC, RDMSR, RDPMC

Algunos PRNG tienen estrategias incorporadas para permitir la mezcla de entropía de fuentes de baja calidad para producir resultados de alta calidad. Un generador muy bueno es el generador de Fortuna . Específicamente utiliza estrategias que limitan el riesgo si alguna de las fuentes de entropía está comprometida.


La semilla más segura es verdaderamente aleatoria, que puede aproximarse en los sistemas de computación prácticos de hoy en día mediante el uso, enumerados en grados decrecientes de confianza:

  • Hardware especial
  • Instalaciones proporcionadas por su sistema operativo que intentan capturar eventos caóticos, como lecturas de disco y movimientos del mouse (/ dev / random). Otra opción en esta línea de "capturar eventos impredecibles" es usar un proceso o máquina independiente que capture lo que le sucede como un conjunto de entropía, en lugar del generador de números aleatorios "seguro" proporcionado por el sistema operativo, por ejemplo, vea EntropyPool
  • Usar una mala semilla (es decir, tiempo) y combinarla con otros datos que solo usted conoce (por ejemplo, hashing el tiempo con un secreto y algunos otros criterios como PID o estado interno de la aplicación / sistema operativo, por lo que no necesariamente aumentar y disminuir según el tiempo)

Primero, debe definir el uso / propósito real del generador de números aleatorios y por qué cree que debe pasar un nivel de seguridad tan alto. La razón por la que pregunto es por qué mencionaste haberla elegido desde el sitio web; si la estás usando para fines de seguridad, entonces asegurar el origen y el canal para enviarla es mucho más importante que la selección académica.

El segundo elemento es el tamaño de los números aleatorios reales que necesita (gran semilla es buena, pero solo si la cantidad generada también es grande); de lo contrario, solo leerá la pequeña parte del número generado y eso aumentará su riesgo.

Mire en cifras reconfigurables, en lugar de cosas como SHA o AES. Aquí hay 2 trabajos de investigación si desea leer y verificar cómo y por qué funcionan:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.97.6594&rep=rep1&type=pdf http://www.springerlink.com/index/q29t6v1p45515186.pdf

O agarre cualquier código fuente de cifrado GOST reconfigurable que encuentre en la red y luego puede alimentarlo con cualquier semilla básica (como el "ticker" concatenado más un ID de nodo de servidor web (si está en un conjunto de servidores web) más una parte de respuesta en cualquier sitio de noticias en Internet que cambie las noticias principales todo el tiempo o puede alimentarlo con una semilla inicial altamente controlada (que puede hacer usted mismo) y usar una secuencia ligera pseudoaleatoria para seleccionar otras configuraciones de cifrado. Incluso la NSA no puede romper eso uno :-) Dado que siempre es un cifrado diferente. Para propósitos criptográficos reales, uno prácticamente tiene que usar semilla inicial muy controlada solo para poder replicar la secuencia para la validación. Ahí es donde volvemos al primer elemento: asegurar la fuente y la distribución.


Puede ganar números aleatorios generados por la desintegración radiactiva. Suena un poco extraño al principio, pero obtienes números aleatorios reales de esto.

Desintegración radioactiva

Otro artículo


Si lees en cripto-teoría, se hace evidente que la semilla más segura sería una generada por un evento caótico. A lo largo de la historia reciente, las operaciones encubiertas han utilizado lo que se conoce como "Almohadilla de una sola vez" que se ha demostrado que es imposible de descifrar. Normalmente, estos se generan a través de una variedad de mensajes de escucha atmosféricos dispersos en el medio de la nada. El ruido atmosférico es suficientemente caótico para ser considerado aleatorio. El problema principal con este método es que la logística para un pad de una sola vez es considerable.

Mi sugerencia es encontrar un evento suficientemente caótico para extraer datos de alguna manera.


Solución simple si no hay hardware aleatorio adicional disponible.

Use milisegundos, mouseX y mouseY para generar una semilla.


Sus métodos más seguros vendrán de la naturaleza. Es decir, algo que sucede fuera de su sistema informático y más allá de nuestra capacidad de predecir sus patrones.

Por ejemplo, muchos investigadores de los PRNG criptográficamente seguros usarán la desintegración radiactiva como modelo, otros podrían buscar fractales, y así sucesivamente. Existen medios existentes para crear verdaderos RNG

Una de mis formas favoritas de implementar un PRNG es la interacción del usuario con una computadora. Por ejemplo, esta publicación no era algo que pudiera predeterminarse mediante la ingeniería avanzada de mi serie de publicaciones anteriores. Donde dejé mi mouse en mi pantalla es muy aleatorio, el rastro que hizo también es aleatorio. Ver desde las interacciones del usuario es. El abuso de los medios para proporcionar información específica de manera que se generen números específicos podría mitigarse utilizando un "enjambre" de entradas de usuario y calculando su "vector", siempre y cuando no tenga a todos los usuarios en su sistema como Eva, usted debería estar bien. Esto no es adecuado para muchas aplicaciones, ya que su conjunto de números es directamente proporcional a la entrada del usuario. Implementar esto puede tener sus propios problemas.

Las personas interesadas en RNG ya han hecho cosas como:

  1. Utilice una cámara web, independientemente de los errores al azar de la pantalla, cuando pasa ese camión, eso es todo datos aleatorios.
  2. Como ya se mencionó, la radiación
  3. http://www.random.org/
  4. Interacción del usuario (como se mencionó)
  5. Qué está pasando dentro del sistema EDG.

Las semillas seguras provienen de la naturaleza.

editar: en función de lo que estés mirando, podría sugerir usar una agregación del EDG de tu servidor de nube.


Utilice http://www.random.org/ que dicen ofrecer números aleatorios verdaderos a cualquier persona en Internet y también tienen una API HTTP que puede usar. Ofrecen servicios gratuitos y pagos.

descargo de responsabilidad: no estoy de ninguna manera afiliada con random.org


(((PI X current thread ID) X current process ID) / tick count) x pi


http://www.random.org/ ofrece un verdadero servicio web generador de números aleatorios, "sembrado" por el ruido atmosférico.

Obtienes 200,000 bits aleatorios gratis cada día, hasta el límite de 1 millón de bits aleatorios luego de que debes recargar tu cuenta, se vuelve tan barato como 4 millones de bits por dólar.