En informática , la entropía es la aleatoriedad recopilada por un sistema operativo o aplicación para su uso en criptografía u otros usos que requieran datos aleatorios. Esta aleatoriedad a menudo se recopila de fuentes de hardware (variación en el ruido del ventilador o HDD), ya sea 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.
El kernel de Linux genera entropía a partir de los tiempos del teclado , los movimientos del mouse y los tiempos de la electrónica de unidad integrada (IDE) y pone los datos de caracteres aleatorios a disposición de 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, [3] que se incluye en algunos sistemas operativos como Fedora , permite utilizar datos de audio como fuente de entropía. [4] También están disponibles video_entropyd, [5] que calcula datos aleatorios de una fuente de video y entropybroker, [6] que incluye estos tres y puede usarse para distribuir los datos de entropía a sistemas que no son capaces de ejecutar ninguno de estos (por ejemplo, maquinas virtuales ). Además, se puede utilizar el algoritmo HAVEGE mediante haveged para agrupar la entropía. [7] En algunos sistemas, las interrupciones de la red también se pueden utilizar como fuente de entropía. [8]
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 núcleo. Alrededor de 2011, dos de los dispositivos aleatorios se eliminaron y se conectaron a una sola fuente, ya que podía producir cientos de megabytes por segundo de datos aleatorios de alta calidad en un sistema promedio. [ aclaración necesaria ] Esto hizo que el agotamiento de los datos aleatorios por parte de los programas del usuario fuera imposible en OpenBSD una vez que se había recopilado suficiente entropía inicialmente.
Un controlador portado desde el kernel de Linux está disponible para el kernel Hurd . [9]
/dev/random y /dev/urandom han estado disponibles como paquetes o parches de Sun para Solaris desde Solaris 2.6, [10] y han sido una característica estándar desde Solaris 9. [11] A partir de Solaris 10, los administradores pueden eliminar fuentes de entropía existentes o definir otros 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. [10]
Existe un paquete de software para OS/2 que permite que los procesos de software recuperen datos aleatorios. [12]
Las versiones de Microsoft Windows posteriores a Windows 95 utilizan CryptoAPI para recopilar entropía de forma similar al /dev/random del kernel de Linux. [13]
CryptoAPI de Windows utiliza la clave de registro binaria HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\RNG\Seed para almacenar un valor inicializado de todas sus fuentes de entropía. [14]
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 la cantidad de bytes libres en la memoria, que combinados con una semilla aleatoria genera la aleatoriedad deseada que necesita. [15]
Los programadores que usan CAPI pueden obtener entropía llamando a CryptGenRandom () de CAPI, después de inicializarlo correctamente. [dieciséis]
CryptoAPI quedó obsoleta en Windows Vista y versiones posteriores. La nueva API se llama API de criptografía: próxima generación (CNG). [17] CNG de Windows utiliza la clave de registro binaria HKEY_LOCAL_MACHINE\SYSTEM\RNG\Seed para almacenar un valor inicial.
Las versiones más recientes de Windows pueden utilizar una variedad de fuentes de entropía:
Los sistemas integrados tienen dificultades para reunir suficiente entropía, ya que suelen ser dispositivos muy simples con tiempos de arranque cortos, y las operaciones de generación de claves que requieren suficiente entropía suelen ser 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 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 hay, no habrá estado activa durante el tiempo suficiente para proporcionar mucha entropía. Al carecer de un fácil acceso 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 estudio sencillo [ ¿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 a la entropía de algunos de estos sistemas identificadores únicos, simples y a menudo determinables por el atacante. [20]
Un verdadero generador de números aleatorios (TRNG) puede ser un servicio (des)central. Un ejemplo de un sistema centralizado donde se puede adquirir un número aleatorio es el servicio de baliza aleatoria del Instituto Nacional de Estándares y Tecnología . La plataforma Cardano utiliza los participantes de su protocolo descentralizado de prueba de participación para generar números aleatorios. [21]
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 recolección de entropía. [22]
Las CPU y el hardware modernos suelen contar 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. [23] Sin embargo, a veces /dev/hw_random puede ser lento; [24] [25]
Hay algunas empresas que fabrican dispositivos de generación de entropía y algunas de ellas se envían con controladores para Linux. [26] [27]
En el sistema Linux, se puede instalar el paquete rng-tools [28] que admite los generadores de números aleatorios verdaderos (TRNG) que se encuentran en las CPU que admiten la instrucción RDRAND , módulos de plataforma segura y en algunos conjuntos de chips Intel , AMD o VIA , [29] 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.
Los administradores de sistemas , especialmente aquellos que supervisan 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 proceso del kernel o del espacio de usuario que genere entropía desde la consola y el subsistema de almacenamiento, a menudo no es ideal debido a la falta de un mouse y un teclado, por lo que los servidores tienen que generar su entropía desde un conjunto limitado de recursos, como tiempos 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). [30] [31] La entropía cambia con frecuencia.
Los administradores responsables de sistemas que tienen entropía baja o nula no deben intentar utilizar /dev/urandom como sustituto de /dev/random ya que esto puede causar que las conexiones SSL/TLS tengan un cifrado de grado inferior. [32]
Algunos sistemas de software cambian sus claves Diffie-Hellman con frecuencia y, en algunos casos, esto puede ayudar a que un servidor continúe funcionando normalmente incluso con un cuello de botella de entropía. [33]
En servidores con baja entropía, un proceso puede aparecer colgado cuando está esperando que aparezcan caracteres aleatorios en /dev/random (en sistemas basados en Linux). Por ejemplo, había un problema conocido en Debian que provocaba que exim4 se bloqueara en algunos casos debido a esto. [34]
Las fuentes de entropía se pueden utilizar para ataques de sincronización del teclado. [35]
La entropía puede afectar la criptografía (TLS/SSL) de un servidor : si un servidor no utiliza una fuente adecuada de aleatoriedad, las claves generadas por el servidor serán inseguras. En algunos casos, un cracker (atacante malicioso) 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. [36]
Las fuentes de entropía comúnmente utilizadas incluyen el mouse, el teclado y los tiempos IDE, pero existen otras fuentes potenciales. Por ejemplo, se podría recolectar entropía del micrófono de la computadora o construir un sensor para medir la turbulencia del aire dentro de una unidad de disco . [37]
Para los derivados de Unix/BSD existe una solución basada en USB que utiliza una CPU ARM Cortex para filtrar/proteger el flujo de bits generado por dos fuentes generadoras de entropía en el sistema. [38]
Cloudflare utiliza una fuente de imágenes de un estante de 80 lámparas de lava como fuente adicional de entropía. [39]
{{cite web}}
: CS1 maint: bot: original URL status unknown (link)