Tipo de funciones diseñadas para que no puedan resolverse mediante algoritmos de búsqueda de raíces
Un generador de números pseudoaleatorios criptográficamente seguro ( CSPRNG ) o un generador de números pseudoaleatorios criptográficos ( CPRNG ) es un generador de números pseudoaleatorios (PRNG) con propiedades que lo hacen adecuado para su uso en criptografía . También se lo conoce vagamente como generador criptográfico de números aleatorios ( CRNG ).
Fondo
La mayoría de las aplicaciones criptográficas requieren números aleatorios , por ejemplo:
La "calidad" de la aleatoriedad requerida para estas aplicaciones varía. Por ejemplo, crear un nonce en algunos protocolos sólo necesita unicidad. Por otro lado, la generación de una clave maestra requiere de una mayor calidad, como por ejemplo más entropía . Y en el caso de los pads de un solo uso , la garantía teórica de la información de un secreto perfecto sólo se cumple si el material clave proviene de una verdadera fuente aleatoria con alta entropía y, por lo tanto, cualquier tipo de generador de números pseudoaleatorios es insuficiente.
Idealmente, la generación de números aleatorios en CSPRNG utiliza entropía obtenida de una fuente de alta calidad, generalmente la API de aleatoriedad del sistema operativo . Sin embargo, se han encontrado correlaciones inesperadas en varios de estos procesos aparentemente independientes. Desde un punto de vista teórico de la información, la cantidad de aleatoriedad, la entropía que se puede generar, es igual a la entropía proporcionada por el sistema. Pero a veces, en situaciones prácticas, se necesitan más números aleatorios que entropía disponible. Además, los procesos para extraer aleatoriedad de un sistema en ejecución son lentos en la práctica real. En tales casos, a veces se puede utilizar un CSPRNG. Un CSPRNG puede "estirar" la entropía disponible en más bits.
Requisitos
Un generador de números pseudoaleatorios criptográficamente seguro (CSPRNG) o un generador de números pseudoaleatorios criptográficos (CPRNG) [1] es un generador de números pseudoaleatorios (PRNG) con propiedades que lo hacen adecuado para su uso en criptografía . También se lo conoce vagamente como generador criptográfico de números aleatorios (CRNG), [2] [3] , que se puede comparar con números "verdaderos" versus números pseudoaleatorios .
Los requisitos de un PRNG ordinario también los cumple un PRNG criptográficamente seguro, pero no ocurre lo contrario. Los requisitos de CSPRNG se dividen en dos grupos:
- que pasen pruebas estadísticas de aleatoriedad ; y
- Cada CSPRNG debe satisfacer la prueba del siguiente bit . Es decir, dados los primeros k bits de una secuencia aleatoria, no existe ningún algoritmo de tiempo polinómico que pueda predecir el ( k +1)ésimo bit con una probabilidad de éxito no despreciablemente mejor que el 50%. [4] Andrew Yao demostró en 1982 que un generador que pasa la prueba del siguiente bit pasará todas las demás pruebas estadísticas de aleatoriedad en tiempo polinomial. [5]
- que resisten bien ante ataques graves, incluso cuando parte de su estado inicial o de ejecución queda disponible para un atacante. [6]
- Cada CSPRNG debería resistir "ataques de extensión de compromiso estatal". [6] : 4 En el caso de que parte o la totalidad de su estado haya sido revelado (o adivinado correctamente), debería ser imposible reconstruir el flujo de números aleatorios antes de la revelación. Además, si hay una entrada de entropía durante la ejecución, no debería ser factible utilizar el conocimiento del estado de la entrada para predecir las condiciones futuras del estado CSPRNG.
Ejemplo: si el PRNG considerado produce una salida calculando bits de π en secuencia, comenzando desde algún punto desconocido en la expansión binaria, bien puede satisfacer la prueba del siguiente bit y, por lo tanto, ser estadísticamente aleatorio, ya que π parece ser una secuencia aleatoria. . (Esto estaría garantizado si π es un número normal , por ejemplo). Sin embargo, este algoritmo no es criptográficamente seguro; un atacante que determine qué bit de pi (es decir, el estado del algoritmo) está actualmente en uso podrá calcular también todos los bits anteriores.
La mayoría de los PRNG no son adecuados para su uso como CSPRNG y fallarán en ambos aspectos. En primer lugar, si bien la mayoría de los resultados de los PRNG parecen aleatorios en diversas pruebas estadísticas, no resisten una determinada ingeniería inversa. Se pueden encontrar pruebas estadísticas especializadas especialmente adaptadas a un PRNG que muestra que los números aleatorios no son verdaderamente aleatorios. En segundo lugar, para la mayoría de los PRNG, cuando se ha revelado su estado, todos los números aleatorios pasados se pueden retrodecir, lo que permite a un atacante leer todos los mensajes pasados, así como los futuros.
Los CSPRNG están diseñados explícitamente para resistir este tipo de criptoanálisis .
Definiciones
En el entorno asintótico , una familia de funciones polinómicas deterministas computables en tiempo para algún polinomio p , es un generador de números pseudoaleatorios (PRNG, o PRG en algunas referencias), si extiende la longitud de su entrada ( para cualquier k ), y si su la salida es computacionalmente indistinguible de la aleatoriedad verdadera, es decir, para cualquier algoritmo de tiempo polinomial probabilístico A , que genera 1 o 0 como distintivo,![{\displaystyle G_{k}\dos puntos \{0,1\}^{k}\to \{0,1\}^{p(k)}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle p(k)>k}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \left|\Pr _{x\gets \{0,1\}^{k}}[A(G(x))=1]-\Pr _{r\gets \{0,1\ }^{p(k)}}[A(r)=1]\right|<\mu (k)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
para alguna función insignificante . [7] (La notación significa que x se elige uniformemente al azar del conjunto X ).![{\displaystyle \mu}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle x\obtiene X}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Existe una caracterización equivalente: para cualquier familia de funciones , G es un PRNG si y sólo si el siguiente bit de salida de G no puede predecirse mediante un algoritmo de tiempo polinomial. [8]![{\displaystyle G_{k}\dos puntos \{0,1\}^{k}\to \{0,1\}^{p(k)}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Un PRNG seguro hacia adelante con longitud de bloque es un PRNG , donde la cadena de entrada con longitud k es el estado actual en el período i , y la salida ( , ) consta del siguiente estado y el bloque de salida pseudoaleatorio del período i , que resiste el estado comprometer las extensiones en el siguiente sentido. Si el estado inicial se elige uniformemente al azar de , entonces para cualquier i , la secuencia debe ser computacionalmente indistinguible de , en la que se eligen uniformemente al azar de . [9]![{\displaystyle t(k)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle G_{k}\dos puntos \{0,1\}^{k}\to \{0,1\}^{k}\times \{0,1\}^{t(k)}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\ Displaystyle s_ {i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle s_{i+1}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\ Displaystyle y_ {i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle s_{i+1}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\ Displaystyle y_ {i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\ Displaystyle s_ {1}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \{0,1\}^{k}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (y_{1},y_{2},\dots,y_{i},s_{i+1})}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (r_{1},r_{2},\dots,r_{i},s_{i+1})}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle r_{i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \{0,1\}^{t(k)}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Cualquier PRNG se puede convertir en un PRNG seguro hacia adelante con una longitud de bloque dividiendo su salida en el siguiente estado y la salida real. Esto se hace configurando , en el cual y ; entonces G es un PRNG seguro hacia adelante con el siguiente estado y el bloque de salida pseudoaleatorio del período actual.![{\displaystyle G\colon \{0,1\}^{k}\to \{0,1\}^{p(k)}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle p(k)-k}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle G(s)=G_{0}(s)\Vert G_{1}(s)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle |G_{0}(s)|=|s|=k}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle |G_{1}(s)|=p(k)-k}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\ Displaystyle G_ {0}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\ Displaystyle G_ {1}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Extracción de entropía
Santha y Vazirani demostraron que se pueden combinar varios flujos de bits con aleatoriedad débil para producir un flujo de bits cuasialeatorio de mayor calidad. [10]
Incluso antes, John von Neumann demostró que un algoritmo simple puede eliminar una cantidad considerable de sesgo en cualquier flujo de bits, [11] que debe aplicarse a cada flujo de bits antes de utilizar cualquier variación del diseño de Santha-Vazirani.
Diseños
Los diseños CSPRNG se dividen en dos clases:
- aquellos basados en primitivas criptográficas como cifrados y hashes criptográficos ,
- aquellos basados en problemas matemáticos que se consideran difíciles.
Diseños basados en primitivas criptográficas
- Un cifrado de bloque seguro se puede convertir en un CSPRNG ejecutándolo en modo contador usando, por ejemplo, una construcción especial que NIST en SP 800-90A llama CTR_DRBG . CTR_DBRG normalmente usa AES.
- AES - CTR DRBG se utiliza a menudo como generador de números aleatorios en sistemas que utilizan cifrado AES. [12] [13]
- El esquema NIST CTR_DRBG borra la clave después de que se genera la aleatoriedad solicitada mediante la ejecución de ciclos adicionales. Esto es un desperdicio desde una perspectiva de rendimiento, pero no causa inmediatamente problemas con el secreto directo. Sin embargo, al darse cuenta de las implicaciones de rendimiento, el NIST recomienda una "interfaz AES-CTR-DRBG extendida" para sus presentaciones de Proyectos de Criptografía Post-Cuántica . Esta interfaz permite generar múltiples conjuntos de aleatoriedad sin que intervenga el borrado, y solo se borra cuando el usuario señala explícitamente el final de las solicitudes. Como resultado, la clave podría permanecer en la memoria durante un tiempo prolongado si se hace un mal uso de la "interfaz extendida". Los RNG más nuevos de "borrado rápido de claves" borran la clave con aleatoriedad tan pronto como se solicita la aleatoriedad. [14]
- Un cifrado de flujo se puede convertir en un CSPRNG. Esto se ha hecho con RC4, ISAAC y ChaCha20 , por nombrar algunos.
- Un hash criptográficamente seguro también podría ser la base de un buen CSPRNG, utilizando, por ejemplo, una construcción que NIST llama Hash_DRBG .
- Una primitiva HMAC se puede utilizar como base de un CSPRNG, por ejemplo, como parte de la construcción que NIST llama HMAC_DRBG .
Diseños de teoría de números
- El algoritmo Blum Blum Shub tiene una prueba de seguridad basada en la dificultad del problema de residuosidad cuadrática . Dado que la única forma conocida de resolver ese problema es factorizar el módulo, generalmente se considera que la dificultad de la factorización de enteros proporciona una prueba de seguridad condicional para el algoritmo Blum Blum Shub. Sin embargo, el algoritmo es muy ineficiente y, por lo tanto, poco práctico a menos que se necesite una seguridad extrema.
- El algoritmo de Blum-Micali tiene una prueba de seguridad basada en la dificultad del problema de logaritmos discretos , pero también es muy ineficiente.
- Daniel Brown de Certicom ha escrito una prueba de seguridad de 2006 para Dual EC DRBG , basada en la dureza supuesta del supuesto decisional de Diffie-Hellman , el problema del logaritmo x y el problema del punto truncado . La prueba de 2006 asume explícitamente un outlen (cantidad de bits proporcionados por iteración) menor que en el estándar Dual_EC_DRBG, y que P y Q en el estándar Dual_EC_DRBG (que se reveló en 2013 como probablemente con puerta trasera de la NSA) se reemplazan con no- valores ocultos.
Esquemas prácticos
Los esquemas CSPRNG "prácticos" no solo incluyen un algoritmo CSPRNG, sino también una forma de inicializarlo (" sembrar ") manteniendo la semilla en secreto. Se han definido varios esquemas de este tipo, entre ellos:
- Implementaciones de /dev/random en sistemas tipo Unix.
- Yarrow , que intenta evaluar la calidad entrópica de sus insumos de siembra, y utiliza SHA-1 y 3DES internamente. Yarrow se usa en macOS y otros sistemas operativos de Apple hasta aproximadamente diciembre de 2019. Apple se cambió a Fortuna desde entonces.
- Fortuna , sucesora de Yarrow, que no intenta evaluar la calidad entrópica de sus insumos; utiliza SHA-256 y "cualquier buen cifrado de bloque". Fortuna se utiliza en FreeBSD. Apple cambió a Fortuna para la mayoría o todos los sistemas operativos de Apple a partir de diciembre de 2019.
- El kernel de Linux CSPRNG, que utiliza ChaCha20 para generar datos, [15] y BLAKE2 para ingerir entropía. [dieciséis]
- arc4random , un CSPRNG en sistemas tipo Unix que se genera a partir de /dev/random . Originalmente se basa en RC4 , pero todas las implementaciones principales ahora usan ChaCha20 . [17] [18] [19]
- CryptGenRandom , parte de CryptoAPI de Microsoft , que se ofrece en Windows. Las diferentes versiones de Windows utilizan diferentes implementaciones.
- Estándar ANSI X9.17 ( Gestión de claves de instituciones financieras (mayorista) ), que también se ha adoptado como estándar FIPS . Toma como entrada un paquete de claves k TDEA ( opción de codificación 2 ) y (el valor inicial de) una semilla aleatoria de 64 bits . [20] Cada vez que se requiere un número aleatorio:
- Obtiene la fecha/hora actual D con la máxima resolución posible.
- Calcula un valor temporal t = TDEA k ( D )
- Calcula el valor aleatorio x = TDEA k ( s ⊕ t ) , donde ⊕ denota bit a bit exclusivo o .
- Actualiza la semilla s = TDEA k ( x ⊕ t )
Obviamente, la técnica se generaliza fácilmente a cualquier cifrado de bloque; Se ha sugerido AES . [21] Si se filtra la clave k , se puede predecir todo el flujo X9.17; esta debilidad se cita como una razón para crear Yarrow. [22]
Todos estos esquemas mencionados anteriormente, excepto X9.17, también combinan el estado de un CSPRNG con una fuente adicional de entropía. Por lo tanto, no son generadores de números pseudoaleatorios "puros", en el sentido de que la salida no está completamente determinada por su estado inicial. Esta adición tiene como objetivo prevenir ataques incluso si el estado inicial está comprometido. [a]
Estándares
Se han estandarizado varios CSPRNG. Por ejemplo,
- FIPS 186-4 [24]
- NISTSP 800-90A :
Esta norma retirada tiene cuatro PRNG. Dos de ellos no son controvertidos y están probados: CSPRNG llamados Hash_DRBG [25] y HMAC_DRBG. [26]
El tercer PRNG de este estándar, CTR DRBG , se basa en un cifrado de bloque que se ejecuta en modo contador . Tiene un diseño no controvertido, pero se ha demostrado que es más débil en términos de distinción de ataques que el nivel de seguridad del cifrado de bloque subyacente cuando el número de bits generados por este PRNG es mayor que dos elevado a la potencia del tamaño de bloque del cifrado de bloque subyacente. en pedazos. [27]
Cuando el número máximo de bits de salida de este PRNG es igual al tamaño de 2 bloques , la salida resultante ofrece el nivel de seguridad matemáticamente esperado que se esperaría que generara el tamaño de la clave, pero se muestra que la salida no es indistinguible de un número aleatorio verdadero. generador. [27] Cuando el número máximo de bits de salida de este PRNG es menor, se entrega el nivel de seguridad esperado y la salida parece ser indistinguible de un verdadero generador de números aleatorios. [27]
En la próxima revisión se observa que la fortaleza de seguridad reclamada para CTR_DRBG depende de limitar el número total de solicitudes de generación y los bits proporcionados por solicitud de generación.
El cuarto y último PRNG de esta norma se denomina Dual EC DRBG . Se ha demostrado que no es criptográficamente seguro y se cree que tiene una puerta trasera cleptográfica de la NSA. [28]
- NIST SP 800-90A Rev.1: Este es esencialmente NIST SP 800-90A con Dual_EC_DRBG eliminado y es el reemplazo del estándar retirado.
- ANSI X9.17-1985 Apéndice C
- ANSI X9.31-1998 Apéndice A.2.4
- ANSI X9.62-1998 Anexo A.4, obsoleto por ANSI X9.62-2005, Anexo D (HMAC_DRBG)
El NIST mantiene una buena referencia . [29]
También existen estándares para pruebas estadísticas de nuevos diseños de CSPRNG:
- Un conjunto de pruebas estadísticas para generadores de números aleatorios y pseudoaleatorios , publicación especial del NIST 800-22. [30]
Puerta trasera cleptográfica de la NSA en Dual_EC_DRBG PRNG
The Guardian y The New York Times informaron en 2013 que la Agencia de Seguridad Nacional (NSA) insertó una puerta trasera en un generador de números pseudoaleatorios (PRNG) de NIST SP 800-90A que permite a la NSA descifrar fácilmente material que fue cifrado con la ayuda. de Doble CE DRBG . Ambos artículos informan [31] [32] que, como sospechaban desde hace tiempo los expertos en seguridad independientes, [33] la NSA ha estado introduciendo debilidades en el estándar CSPRNG 800-90; Esto lo confirma por primera vez uno de los documentos ultrasecretos filtrados al Guardian por Edward Snowden . La NSA trabajó encubiertamente para lograr que su propia versión del borrador del estándar de seguridad del NIST fuera aprobado para uso mundial en 2006. El documento filtrado afirma que "con el tiempo, la NSA se convirtió en el único editor". A pesar del potencial conocido de una puerta trasera cleptográfica y otras deficiencias significativas conocidas con Dual_EC_DRBG, varias empresas como RSA Security continuaron usando Dual_EC_DRBG hasta que se confirmó la puerta trasera en 2013. [34] RSA Security recibió un pago de 10 millones de dólares de la NSA para hacer entonces. [35]
Fallos de seguridad
ataque DUHK
El 23 de octubre de 2017, Shaanan Cohney, Matthew Green y Nadia Heninger , criptógrafos de la Universidad de Pensilvania y la Universidad Johns Hopkins, publicaron detalles del ataque DUHK (No utilice claves codificadas) a WPA2, donde los proveedores de hardware utilizan una clave codificada. clave inicial para el algoritmo ANSI X9.31 RNG, que indica que "un atacante puede utilizar datos cifrados por fuerza bruta para descubrir el resto de los parámetros de cifrado y deducir la clave de cifrado maestra utilizada para cifrar sesiones web o conexiones de red privada virtual (VPN)". [36] [37]
Máquina de cifrado PÚRPURA japonesa
Durante la Segunda Guerra Mundial , Japón utilizó una máquina de cifrado para las comunicaciones diplomáticas; Estados Unidos pudo descifrarlo y leer sus mensajes , principalmente porque los "valores clave" utilizados no eran lo suficientemente aleatorios.
Referencias
- ^ Daniel J. Bernstein ha cuestionado el uso de la mezcla de entropía después de la inicialización de CSPRNG . [23]
- ^ Huang, Andrés (2003). Hackear la Xbox: una introducción a la ingeniería inversa. Serie de prensa sin almidón. Sin prensa de almidón . pag. 111.ISBN 9781593270292. Consultado el 24 de octubre de 2013 .
[...] el generador de flujo de claves [...] puede considerarse como un generador de números pseudoaleatorios criptográficos (CPRNG).
- ^ Dufour, Cédric. "Cómo garantizar la entropía y la generación adecuada de números aleatorios en máquinas virtuales". Exoescala .
- ^ "/dev/random se parece más a /dev/urandom con Linux 5.6 - Phoronix". www.phoronix.com .
- ^ Katz, Jonathan; Lindell, Yehuda (2008). Introducción a la criptografía moderna. Prensa CRC. pag. 70.ISBN 978-1584885511.
- ^ Andrew Chi-Chih Yao . Teoría y aplicaciones de funciones-trampa. En Actas del 23º Simposio del IEEE sobre fundamentos de la informática, 1982.
- ^ ab Kelsey, John; Schneier, Bruce; Wagner, David; Salón, Chris (1998). "Ataques criptoanalíticos a generadores de números pseudoaleatorios". Cifrado de software rápido (PDF) . Berlín, Heidelberg: Springer Berlín Heidelberg. doi :10.1007/3-540-69710-1_12. ISBN 978-3-540-64265-7. ISSN 0302-9743.
- ^ Goldreich, Oded (2001), Fundamentos de la criptografía I: herramientas básicas , Cambridge: Cambridge University Press, ISBN 978-0-511-54689-1, definición 3.3.1.
- ^ Goldreich, Oded (2001), Fundamentos de la criptografía I: herramientas básicas , Cambridge: Cambridge University Press, ISBN 978-0-511-54689-1, Teorema 3.3.7.
- ^ Dodis, Yevgeniy, Notas de introducción a la criptografía de la lección 5 (PDF) , consultado el 3 de enero de 2016, definitivamente 4.
- ^ Miklos Santha, Umesh V. Vazirani (24 de octubre de 1984). "Generación de secuencias cuasi aleatorias a partir de fuentes ligeramente aleatorias" (PDF) . Actas del 25º Simposio IEEE sobre fundamentos de la informática . Universidad de California . págs. 434–440. ISBN 0-8186-0591-X. Consultado el 29 de noviembre de 2006 .
- ^ John von Neumann (1 de marzo de 1963). "Diversas técnicas para su uso en relación con dígitos aleatorios". Las obras completas de John von Neumann . Prensa de Pérgamo . págs. 768–770. ISBN 0-08-009566-6.
- ^ Kleidermacher, David; Kleidermacher, Mike (2012). Seguridad de sistemas integrados: métodos prácticos para el desarrollo de sistemas y software seguros. Elsevier. pag. 256.ISBN 9780123868862.
- ^ Cox, George; Dique, Charles; Johnston, DJ (2011). "Generador de números aleatorios digitales (DRNG) de Intel" (PDF) .
- ^ Bernstein, Daniel J. "23.07.2017: Generadores de números aleatorios de borrado rápido de claves: un esfuerzo para limpiar varios desastres simultáneamente. #rng #forwardsecrecy #urandom #cascade #hmac #rekeying #proofs".
- ^ "Confirmación de Github de random.c". Github. 2 de julio de 2016.
- ^ "El generador de números aleatorios de Linux 5.17 ve aceleraciones y cambia de SHA1 a BLAKE2 - Phoronix". www.phoronix.com .
- ^ "Registro CVS de arc4random.c". CVS. 1 de octubre de 2013.
- ^ "Registro CVS de arc4random.c". CVS. 16 de noviembre de 2014.
- ^ "Notas de la versión de FreeBSD 12.0-RELEASE: API y bibliotecas en tiempo de ejecución". FreeBSD.org . 5 de marzo de 2019 . Consultado el 24 de agosto de 2019 .
- ^ Menezes, Alfredo ; van Oorschot, Paul ; Vanstone, Scott (1996). "Capítulo 5: Secuencias y bits pseudoaleatorios" (PDF) . Manual de criptografía aplicada. Prensa CRC.
- ^ Joven, Adán; Yung, Moti (1 de febrero de 2004). Criptografía maliciosa: exponiendo la criptovirología. John Wiley e hijos . sección 3.5.1. ISBN 978-0-7645-4975-5.
- ^ Kelsey, Juan; Schneier, Bruce; Ferguson, Niels (agosto de 1999). "Yarrow-160: Notas sobre el diseño y análisis del generador de números pseudoaleatorios criptográficos Yarrow" (PDF) . Sexto taller anual sobre áreas seleccionadas de criptografía . 1758 : 13–33. doi :10.1007/3-540-46513-8_2.
- ^ Daniel J. Bernstein (5 de febrero de 2014). "cr.yp.to: 05.02.2014: ¡Ataques de entropía!".
¿Existe algún argumento serio de que agregar nueva entropía todo el tiempo sea algo bueno? La página del manual de Linux /dev/urandom afirma que sin nueva entropía el usuario es "teóricamente vulnerable a un ataque criptográfico", pero (como he mencionado en varios lugares) este es un argumento ridículo.
- ^ "FIPS 186-4" (PDF) .
- ^ Kan, Wilson (4 de septiembre de 2007). "Análisis de los supuestos subyacentes en los DRBG del NIST" (PDF) . Consultado el 19 de noviembre de 2016 .
- ^ Sí, Katherine Qinru (abril de 2016). "The Notorious PRG: Verificación formal del generador de números pseudoaleatorios HMAC-DRBG" (PDF) . Consultado el 19 de noviembre de 2016 .
- ^ abc Campagna, Matthew J. (1 de noviembre de 2006). "Límites de seguridad para el generador de bits aleatorios determinista basado en el libro de códigos del NIST" (PDF) . Consultado el 19 de noviembre de 2016 .
- ^ Perlroth, Nicole (10 de septiembre de 2013). "El gobierno anuncia medidas para restablecer la confianza en los estándares de cifrado" . Los New York Times . Consultado el 19 de noviembre de 2016 .
- ^ División de Seguridad Informática, Laboratorio de Tecnología de la Información (24 de mayo de 2016). "Número aleatorio". CSRC | NIST .
- ^ Rukhin, Andrés; Soto, Juan; Nechvatal, James; Smid, millas; Barker, Elaine; Leigh, Stefan; Levenson, Marcos; Vangel, Marcos; Bancos, David; Heckert, N.; Dray, James; Vo, San; Bassham, Lawrence (30 de abril de 2010). "Un conjunto de pruebas estadísticas para generadores de números aleatorios y pseudoaleatorios para aplicaciones criptográficas". doi : 10.6028/NIST.SP.800-22r1a – a través de csrc.nist.gov.
- ^ James Borger; Glenn Greenwald (6 de septiembre de 2013). "Revelado: cómo las agencias de espionaje de Estados Unidos y el Reino Unido derrotan la privacidad y la seguridad de Internet". El guardián . Consultado el 7 de septiembre de 2013 .
- ^ Nicole Perlroth (5 de septiembre de 2013). "La NSA puede frustrar las garantías básicas de privacidad en la Web". Los New York Times . Consultado el 7 de septiembre de 2013 .
- ^ Bruce Schneier (15 de noviembre de 2007). "¿La NSA puso una puerta trasera secreta en el nuevo estándar de cifrado?". Cableado . Consultado el 7 de septiembre de 2013 .
- ^ Matthew Green (20 de septiembre de 2013). "RSA advierte a los desarrolladores que no utilicen productos RSA".
- ^ Joseph Menn (20 de diciembre de 2013). "Exclusivo: contrato secreto vinculado a la NSA y al pionero de la industria de la seguridad". Reuters .
- ^ Shaanan Cohney; Mateo D. Verde ; Nadia Heninger . "Ataques prácticos de recuperación de estado contra implementaciones de RNG heredadas" (PDF) . duhkattack.com .
- ^ "DUHK Crypto Attack recupera claves de cifrado y expone conexiones VPN". slashdot.org . 25 de octubre de 2017 . Consultado el 25 de octubre de 2017 .
enlaces externos
El Wikilibro Criptografía tiene una página sobre el tema: Generación de números aleatorios
- RFC 4086, Requisitos de aleatoriedad para la seguridad
- "Grupo de entropía" de Java para números aleatorios impredecibles criptográficamente seguros. Archivado el 2 de diciembre de 2008 en la Wayback Machine.
- Clase estándar de Java que proporciona un generador de números pseudoaleatorios (PRNG) criptográficamente sólido.
- Número aleatorio criptográficamente seguro en Windows sin usar CryptoAPI
- Seguridad conjeturada de la curva elíptica RNG de ANSI-NIST, Daniel RL Brown, IACR ePrint 2006/117.
- Un análisis de seguridad del generador de números aleatorios de curva elíptica NIST SP 800-90, Daniel RL Brown y Kristian Gjosteen, IACR ePrint 2007/048. Aparecerá en CRYPTO 2007.
- Criptoanálisis del generador pseudoaleatorio de curva elíptica dual, Berry Schoenmakers y Andrey Sidorenko, IACR ePrint 2006/190.
- Generadores pseudoaleatorios eficientes basados en el supuesto DDH, Reza Rezaeian Farashahi y Berry Schoenmakers y Andrey Sidorenko, IACR ePrint 2006/321.
- Análisis del generador de números aleatorios de Linux, Zvi Gutterman y Benny Pinkas y Tzachy Reinman.
- Descarga de software y documentación del NIST Statistical Test Suite.