En informática , la entropía es la aleatoriedad recopilada por un sistema operativo o una aplicación para su uso en criptografía u otros usos que requieren datos aleatorios. Esta aleatoriedad a menudo se recopila de fuentes de hardware (variación en el ruido del ventilador o HDD), ya sean preexistentes, como movimientos del mouse o generadores de aleatoriedad especialmente proporcionados. La falta de entropía puede tener un impacto negativo en el rendimiento y la seguridad.
Kernel de Linux
El kernel de Linux genera entropía a partir de los tiempos del teclado , los movimientos del ratón y los tiempos IDE y hace que los datos de caracteres aleatorios estén disponibles para otros procesos del sistema operativo a través de los archivos especiales / dev / random y / dev / urandom. Esta capacidad se introdujo en la versión 1.3.30 de Linux. [1]
Hay algunos parches del kernel de Linux que permiten utilizar más fuentes de entropía. [2] El proyecto audio_entropyd , que se incluye en algunos sistemas operativos como Fedora , permite que los datos de audio se utilicen como fuente de entropía. [3] También están disponibles video_entropyd que calcula datos aleatorios de una fuente de video y entropybroker que incluye estos tres y puede usarse para distribuir los datos de entropía a sistemas que no pueden ejecutar ninguno de estos (por ejemplo, máquinas virtuales ). Además, se puede utilizar el HAVEGE algoritmo través haveged de entropía. [4] En algunos sistemas, las interrupciones de la red también se pueden utilizar como fuente de entropía. [5]
Kernel de OpenBSD
OpenBSD ha integrado la criptografía como uno de sus principales objetivos y siempre ha trabajado para aumentar su entropía para el cifrado, pero también para aleatorizar muchas partes del sistema operativo, incluidas varias operaciones internas de su kernel. Alrededor de 2011, dos de los dispositivos aleatorios se eliminaron y se vincularon en una sola fuente, ya que podía producir cientos de megabytes por segundo de datos aleatorios de alta calidad en un sistema promedio. Esto hizo imposible el agotamiento de los datos aleatorios por parte de los programas de usuario en OpenBSD una vez que se había reunido inicialmente suficiente entropía.
Kernel de hurd
Se ha puesto a disposición un controlador portado desde el kernel de Linux para el kernel de Hurd . [6]
Solaris
/ dev / random y / dev / urandom han estado disponibles como paquetes de Sun o parches para Solaris desde Solaris 2.6, [7] y han sido una característica estándar desde Solaris 9. [8] A partir de Solaris 10, los administradores pueden eliminar las fuentes de entropía existentes. o definir nuevos a través del marco criptográfico a nivel de kernel.
También está disponible un módulo de kernel de terceros que implementa / dev / random para versiones que se remontan a Solaris 2.4. [7]
OS / 2
Existe un paquete de software para OS / 2 que permite que los procesos de software recuperen datos aleatorios. [9]
Ventanas
Las versiones de Microsoft Windows más nuevas que Windows 95 usan CryptoAPI para recopilar entropía de manera similar a / dev / random del kernel de Linux. [10]
CryptoAPI de Windows usa la clave de registro binaria HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography \ RNG \ Seed para almacenar un valor inicial de todas sus fuentes de entropía. [11]
Debido a que CryptoAPI es de código cerrado , algunas aplicaciones de software gratuitas y de código abierto que se ejecutan en la plataforma Windows utilizan otras medidas para obtener aleatoriedad. Por ejemplo, GnuPG, a partir de la versión 1.06, utiliza una variedad de fuentes, como el número de bytes libres en la memoria que, combinados con una semilla aleatoria, genera la aleatoriedad deseada que necesita. [12]
Los programadores que usan CAPI pueden obtener entropía llamando a CryptGenRandom () de CAPI , después de inicializarlo correctamente. [13]
CryptoAPI quedó obsoleto en Windows Vista y versiones posteriores. La nueva API se llama API de criptografía: próxima generación (CNG). [14] El CNG de Windows usa la clave de registro binaria HKEY_LOCAL_MACHINE \ SYSTEM \ RNG \ Seed para almacenar un valor inicial.
La versión más reciente de Windows puede usar una variedad de fuentes de entropía:
- TPM si está disponible y habilitado en la placa base
- Entropía de la interfaz UEFI (si se inicia desde UEFI) [15]
- Instrucción de CPU RDRAND si está disponible
- Reloj del sistema de hardware ( RTC )
- Contenido de la tabla OEM0 ACPI
- Interrumpir tiempos
- Tiempos de teclado y movimientos del mouse [16]
Sistemas embebidos
Los sistemas integrados tienen dificultades para recopilar suficiente entropía, ya que a menudo son dispositivos muy simples con tiempos de arranque cortos, y las operaciones de generación de claves que requieren suficiente entropía son a menudo una de las primeras cosas que puede hacer un sistema. Es posible que no existan fuentes de entropía comunes en estos dispositivos o que no hayan estado activas durante el tiempo suficiente durante el arranque para garantizar que exista suficiente entropía. Los dispositivos integrados a menudo carecen de unidades de disco giratorias, dispositivos de interfaz humana e incluso ventiladores, y la interfaz de red, si la hubiera, no habrá estado activa durante el tiempo suficiente para proporcionar mucha entropía. Al carecer de un acceso fácil a la entropía, algunos dispositivos pueden usar claves codificadas para generar generadores aleatorios, o generar generadores aleatorios a partir de identificadores únicos fáciles de adivinar, como la dirección MAC del dispositivo. Un simple estudio [ ¿cuál? ] demostró el uso generalizado de claves débiles al encontrar muchos sistemas integrados, como enrutadores, que utilizan las mismas claves. Se pensó que el número de claves débiles encontradas habría sido mucho mayor si no se hubieran incorporado en la entropía de algunos de estos sistemas identificadores únicos de una sola vez, simples y, a menudo, determinables por el atacante. [17]
Sistemas (des) centralizados
Un verdadero generador de números aleatorios (TRNG) puede ser un servicio (des) centralizado. Un ejemplo de un sistema centralizado en el que se puede adquirir un número aleatorio es el servicio de balizas de aleatoriedad del Instituto Nacional de Estándares y Tecnología . La plataforma Cardano utiliza a los participantes de su protocolo descentralizado de prueba de participación para generar números aleatorios. [18]
Otros sistemas
Hay algunos paquetes de software que permiten utilizar un proceso de espacio de usuario para recopilar caracteres aleatorios, exactamente lo que hace / dev / random, como EGD, el demonio de recopilación de entropía. [19]
Entropía originada por hardware
Las CPU y el hardware modernos a menudo cuentan con generadores integrados que pueden proporcionar entropía de alta calidad y alta velocidad a los sistemas operativos. En sistemas basados en el kernel de Linux , se puede leer la entropía generada desde dicho dispositivo a través de / dev / hw_random. [20] Sin embargo, a veces / dev / hw_random puede ser lento; [21] [22]
Hay algunas empresas que fabrican dispositivos de generación de entropía y algunas de ellas se envían con controladores para Linux. [23]
En el sistema Linux, se puede instalar el paquete rng-tools que admite los verdaderos generadores de números aleatorios (TRNG) que se encuentran en las CPU que admiten la instrucción RDRAND , los módulos de plataforma confiable y en algunos conjuntos de chips Intel , AMD o VIA , [24] aumentando efectivamente la entropía recopilada en / dev / random y potencialmente mejorando el potencial criptográfico. Esto es especialmente útil en sistemas sin cabeza que no tienen otras fuentes de entropía.
Implicaciones prácticas
Los administradores del sistema , especialmente los que supervisan los servidores de Internet, deben asegurarse de que los procesos del servidor no se detengan debido al agotamiento de la entropía. La entropía en servidores que utilizan el kernel de Linux, o cualquier otro kernel o proceso de espacio de usuario que genera entropía desde la consola y el subsistema de almacenamiento, a menudo es menos que ideal debido a la falta de un mouse y teclado, por lo que los servidores tienen que generar su entropía a partir de un conjunto limitado de recursos, como los tiempos de IDE.
El tamaño del grupo de entropía en Linux se puede ver a través del archivo / proc / sys / kernel / random / entropy_avail y generalmente debe ser de al menos 2000 bits (de un máximo de 4096). [25] [26] La entropía cambia con frecuencia.
Los administradores responsables de los sistemas que tienen una entropía baja o nula no deben intentar utilizar / dev / urandom como sustituto de / dev / random, ya que esto puede provocar que las conexiones SSL / TLS tengan un cifrado de menor grado. [27]
Algunos sistemas de software cambian sus claves Diffie-Hellman con frecuencia, y esto puede ayudar en algunos casos a que un servidor continúe funcionando normalmente incluso con un cuello de botella de entropía. [28]
En servidores con baja entropía, un proceso puede aparecer bloqueado cuando espera que aparezcan caracteres aleatorios en / dev / random (en sistemas basados en Linux). Por ejemplo, había un problema conocido en Debian que hacía que exim4 se bloqueara en algunos casos debido a esto. [29]
Seguridad
Las fuentes de entropía se pueden utilizar para ataques de sincronización del teclado. [30]
La entropía puede afectar la criptografía (TLS / SSL) de un servidor : si un servidor no usa una fuente adecuada de aleatoriedad, las claves generadas por el servidor serán inseguras. En algunos casos, un cracker (atacante malintencionado) puede adivinar algunos bits de entropía a partir de la salida de un generador de números pseudoaleatorios (PRNG), y esto sucede cuando no se introduce suficiente entropía en el PRNG. [31]
Fuentes potenciales
Las fuentes de entropía comúnmente utilizadas incluyen el mouse, el teclado y los tiempos de IDE, pero existen otras fuentes potenciales. Por ejemplo, se podría recolectar entropía del micrófono de la computadora o construyendo un sensor para medir la turbulencia del aire dentro de una unidad de disco . [32]
Para los derivados de Unix / BSD, existe una solución basada en USB que utiliza una CPU ARM Cortex para filtrar / asegurar el flujo de bits generado por dos fuentes generadoras de entropía en el sistema. [33]
CloudFlare utiliza una alimentación de imágenes de un bastidor de 80 lámparas de lava como fuente adicional de entropía. [34]
Ver también
- Entropía (teoría de la información)
- Entropía
- Aleatoriedad
Referencias
- ^ random (4) - página de manual de Linux (die.net)
- ^ Tendencias robóticas »Falta de entropía
- ^ Base de datos de paquetes de Fedora - audio-entropyd [ enlace muerto permanente ]
- ^ "haveged - Un simple demonio de entropía" . Consultado el 3 de abril de 2011 .
- ^ Entropía y dispositivos aleatorios | LinuxLink de TimeSys: su recurso de Linux integrado
- ^ / dev / {, u} controlador aleatorio para GNU / Hurd (ibofobi.dk)
- ^ a b Solaris / dev / random mediante emulación
- ^ "Solaris / dev / random" . Archivado desde el original el 11 de mayo de 2008 . Consultado el 17 de octubre de 2007 .
- ^ Demonio de recopilación de entropía Rexx para OS / 2
- ^ Alternativa de trituración de línea de comandos de GPL para Windows
- ^ Fuente de entropía en plataformas Windows con CryptoAPI instalado
- ^ ¿Cómo genera Windows GnuPG números aleatorios en keygen?
- ^ http://www.cs.berkeley.edu/~daw/rnd/cryptoapi-rand http://archives.seul.org/or/cvs/Mar-2004/msg00078.html
- ^ [1]
- ^ https://docs.microsoft.com/en-us/windows-hardware/drivers/bringup/uefi-entropy-gathering-protocol
- ^ https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptgenrandom
- ^ Constantin, Lucian. "Millones de dispositivos integrados utilizan las mismas claves privadas SSH y TLS codificadas de forma rígida" . Mundo de la red . Consultado el 5 de noviembre de 2018 .
- ^ "Una solución para la aleatoriedad escalable" . iohk.io . 6 de junio de 2017 . Consultado el 14 de septiembre de 2020 .
- ^ CÓMO de programas seguros - Números aleatorios
- ^ 'Re: problema de entropía SSL / TLS,' - MARC
- ^ Re: / dev / hw_random
- ^ Re: / dev / hw_random
- ^ http://www.std.com/~reinhold/truenoise.html http://random.com.hr/products/random/hg324.html Archivado el 13 de mayo de 2008 en la Wayback Machine.
- ^ [2]
- ^ Re: [exim] no hay respuesta a STARTTLS
- ^ página de manual de Linux random (4) , die.net
- ^ Problema de entropía SSL / TLS, también conocido como tiempos de espera de estallidos (era: problema sasl ldap)
- ^ Josefsson, Simon; [TLS] Re: claves Ephermal Diffie-Hellman cortas (lista de correo de ietf.org)
- ^ [gnutls-dev] gnutls_rsa_params_init se cuelga. ¿Es demasiado frecuente regenerar los rsa-params una vez al día? , lists.gnupg.org
- ^ Zalewski, Michal; La fuente de entropía Unix se puede utilizar para ataques de sincronización de pulsaciones de teclas , 2003
- ^ Re: agotamiento de la entropía (antes: rastreo pasivo de SSL / TLS) Archivado el 17 de mayo de 2011en la Wayback Machine , 2005
- ^ Cree su propio protocolo de servidor / cliente criptográficamente seguro - 4.8.3. Recolectando entropía
- ^ http://www.entropykey.co.uk Archivado el 22 de julio de 2010 en Wayback Machine.
- ^ Aleatoriedad 101: LavaRand en producción
enlaces externos
- [enlace muerto permanente ] Descripción general de la entropía y de los generadores de entropía en Linux