En informática , la entropía es la aleatoriedad que un sistema operativo o aplicación recopila para su uso en criptografía u otras aplicaciones que requieren datos aleatorios. Esta aleatoriedad suele obtenerse de fuentes de hardware (variaciones en el ruido del ventilador o del disco duro), ya sean preexistentes, como los movimientos del ratón, o mediante generadores de aleatoriedad específicos. La falta de entropía puede tener un impacto negativo en el rendimiento y la seguridad.
núcleo de Linux
El núcleo de Linux genera entropía a partir de los tiempos de pulsación del teclado , los movimientos del ratón y los tiempos de la electrónica de unidades integradas (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 ]
Existen algunos parches del kernel de Linux que permiten utilizar más fuentes de entropía. [ 2 ] El proyecto audio_entropyd, [ 3 ] incluido 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 a partir de una fuente de vídeo y entropybroker, [ 6 ] que incluye estos tres y puede utilizarse para distribuir los datos de entropía a sistemas que no pueden ejecutar ninguno de ellos (por ejemplo, máquinas virtuales ). Además, se puede utilizar el algoritmo HAVEGE a través de haveged para agrupar la entropía. [ 7 ] En algunos sistemas, las interrupciones de red también pueden utilizarse como fuente de entropía. [ 8 ]
núcleo de OpenBSD
OpenBSD ha integrado la criptografía como uno de sus objetivos principales y siempre ha trabajado para aumentar su entropía, tanto para el cifrado como para la aleatorización de muchas partes del sistema operativo, incluyendo diversas operaciones internas de su núcleo. Alrededor de 2011, se eliminaron dos de los dispositivos aleatorios y se conectaron a una única fuente, ya que esta podía generar cientos de megabytes por segundo de datos aleatorios de alta calidad en un sistema promedio. Esto redujo significativamente la probabilidad de que los programas de usuario en OpenBSD agotaran los datos aleatorios una vez que se había acumulado suficiente entropía.
Grano de Hurd
Se ha puesto a disposición para el kernel de Hurd un controlador portado del kernel de Linux . [ 9 ]
Solaris
/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 las fuentes de entropía existentes o definir otras nuevas a través del marco criptográfico a nivel del kernel.
También está disponible un módulo del kernel de terceros que implementa /dev/random para versiones que datan de Solaris 2.4. [ 10 ]
Sistema operativo/2
Existe un paquete de software para OS/2 que permite a los procesos de software recuperar datos aleatorios. [ 12 ]
Windows
Las versiones de Microsoft Windows posteriores a Windows 95 utilizan CryptoAPI para recopilar entropía de una manera similar a /dev/random del kernel de Linux. [ 13 ]
La CryptoAPI de Windows utiliza 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. [ 14 ]
Debido a que CryptoAPI es de código cerrado , algunas aplicaciones de software libre 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 diversas fuentes, como la cantidad de bytes libres en la memoria, que, combinadas con una semilla aleatoria, generan la aleatoriedad deseada. [ 15 ]
Los programadores que utilizan CAPI pueden obtener la entropía llamando a CryptGenRandom () de CAPI, después de inicializarla correctamente. [ 16 ]
CryptoAPI quedó obsoleto a partir de Windows Vista y versiones posteriores. La nueva API se llama Cryptography API: Next Generation (CNG). [ 17 ] La 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 diversas fuentes de entropía:
- TPM si está disponible y habilitado en la placa base
- Entropía de la interfaz UEFI (si se arranca desde UEFI) [ 18 ]
- Instrucción de CPU RDRAND si está disponible
- Reloj del sistema de hardware ( RTC )
- Contenido de la tabla ACPI de OEM0
- Tiempos de interrupción
- Sincronización del teclado y movimientos del ratón [ 19 ]
Sistemas embebidos
Los sistemas embebidos pueden tener dificultades para acumular suficiente entropía, ya que suelen ser dispositivos sencillos 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 un sistema puede hacer. Es posible que no existan fuentes comunes de entropía en estos dispositivos, o que no hayan estado activas el tiempo suficiente durante el arranque para generar suficiente entropía. Los dispositivos embebidos a menudo carecen de discos duros, interfaces de usuario e incluso ventiladores, y la interfaz de red, si la hay, no habrá estado activa 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 inicializar generadores aleatorios, o inicializar generadores aleatorios a partir de identificadores únicos fáciles de adivinar, como la dirección MAC del dispositivo . Un estudio sencillo [ 20 ] demostró el uso generalizado de claves débiles al encontrar muchos sistemas embebidos, como enrutadores, que utilizaban las mismas claves. Se pensó que la cantidad 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 de un solo uso, simples y a menudo determinables por un atacante. [ 21 ]
Sistemas (des)centralizados
Un generador de números aleatorios verdaderos (TRNG) puede ser un servicio (des)centralizado. Un ejemplo de un sistema centralizado donde se puede obtener un número aleatorio es el servicio de baliza de aleatoriedad del Instituto Nacional de Estándares y Tecnología . La plataforma Cardano utiliza a los participantes de su protocolo de prueba de participación descentralizado para generar números aleatorios. [ 22 ]
Otros sistemas
Hay algunos paquetes de software que permiten usar 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. [ 23 ]
entropía originada por el hardware
Las CPU y el hardware modernos suelen incluir 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 por dicho dispositivo a través de /dev/hw_random. [ 24 ] Sin embargo, a veces /dev/hw_random puede ser lento; [ 25 ] [ 26 ]
Hay algunas empresas que fabrican dispositivos de generación de entropía, y algunos de ellos se distribuyen con controladores para Linux. [ 27 ] [ 28 ]
En sistemas Linux, se puede instalar el paquete rng-tools [ 29 ] que admite los generadores de números aleatorios verdaderos (TRNG) presentes en las CPU que admiten la instrucción RDRAND , los módulos de plataforma segura y algunos chipsets de Intel , AMD o VIA [ 30 ] , lo que aumenta la entropía acumulada en /dev/random y mejora potencialmente el potencial criptográfico. Esto resulta especialmente útil en sistemas sin interfaz gráfica que no disponen de otras fuentes de entropía.
Implicaciones prácticas
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 los servidores que utilizan el kernel de Linux, o cualquier otro kernel o proceso de espacio de usuario que genere entropía desde la consola y el subsistema de almacenamiento, suele ser deficiente debido a la falta de un ratón y un teclado; por lo tanto, los servidores tienen que generar su entropía a partir de un conjunto limitado de recursos, como los tiempos del IDE.
El tamaño del pool de entropía en Linux se puede ver a través del archivo /proc/sys/kernel/random/entropy_avail y generalmente debería ser de al menos 2000 bits (de un máximo de 4096). [ 31 ] [ 32 ] La entropía cambia con frecuencia.
Los administradores responsables de sistemas con entropía baja o nula no deben intentar usar /dev/urandom como sustituto de /dev/random, ya que esto puede provocar que las conexiones SSL/TLS tengan un cifrado de menor nivel. [ 33 ]
Algunos sistemas de software cambian sus claves Diffie-Hellman con frecuencia, y esto puede, en algunos casos, ayudar a que un servidor continúe funcionando normalmente incluso con un cuello de botella de entropía. [ 34 ]
En servidores con baja entropía, un proceso puede parecer bloqueado cuando espera a que aparezcan caracteres aleatorios en /dev/random (en sistemas basados en Linux). Por ejemplo, existía un problema conocido en Debian que provocaba que exim4 se bloqueara en algunos casos debido a esto. [ 35 ]
Seguridad
Las fuentes de entropía pueden utilizarse para ataques de temporización de teclado. [ 36 ]
La entropía puede afectar la criptografía ( TLS/SSL ) de un servidor : si un servidor no utiliza una fuente de aleatoriedad adecuada, las claves que genere serán inseguras. En algunos casos, un atacante malicioso puede adivinar algunos bits de entropía a partir de la salida de un generador de números pseudoaleatorios (PRNG), y esto ocurre cuando no se introduce suficiente entropía en el PRNG. [ 37 ]
Fuentes potenciales
Las fuentes de entropía más utilizadas incluyen el ratón, el teclado y los tiempos del IDE, pero existen otras fuentes potenciales. Por ejemplo, se podría obtener entropía del micrófono del ordenador o mediante la construcción de un sensor para medir la turbulencia del aire dentro de una unidad de disco . [ 38 ]
Para 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. [ 39 ]
Cloudflare utiliza una transmisión de imágenes de un estante de 80 lámparas de lava como fuente adicional de entropía. [ 40 ]
Véase también
Referencias
- ↑ random(4) - Página man de Linux Archivada el 11/10/2007 en Wayback Machine (die.net)
- ↑ "Tendencias robóticas » Entropía faltante" . Archivado del original el 6 de diciembre de 2022. Consultado el 23 de mayo de 2023 .
- ↑ "demonio de entropía de audio" . 23 de marzo de 2021. Archivado del original el 23 de marzo de 2021.
- ↑ "Fedora Package Database – audio-entropyd" .
- ↑ "video_entropyd" . 23 de marzo de 2021. Archivado del original el 23 de marzo de 2021.
- ↑ "Entropy Broker" . 29 de mayo de 2020. Archivado del original el 29 de mayo de 2020.
- ↑ "haveged – Un simple demonio de entropía" . Archivado del original el 27 de octubre de 2012. Recuperado el 3 de abril de 2011 .
- ↑ "Entropía y dispositivos aleatorios | LinuxLink de TimeSys – Su recurso para Linux embebido" . Archivado del original el 2 de abril de 2016. Consultado el 15 de octubre de 2007 .
- ↑ /dev/{,u}controlador aleatorio para GNU/Hurd Archivado el 18-09-2007 en Wayback Machine (ibofobi.dk)
- 1 2 "Solaris /dev/random a través de emulación" . Archivado del original el 4 de noviembre de 2007. Recuperado el 15 de octubre de 2007 .
- ↑ "Solaris /dev/random" . Archivado del original el 11 de mayo de 2008. Consultado el 17 de octubre de 2007 .
- ↑ "Rexx Entropy Gathering Daemon para OS/2" . r6.ca. Archivado del original el 31/10/2007 . Consultado el 15/10/2007 .
- ↑ Malayter, Ryan (9 de noviembre de 2001). "Alternativa a shred de línea de comandos GPL para Windows" . Archivado del original el 27 de octubre de 2021. Recuperado el 23 de mayo de 2023 .
- ↑ "Fuente para entropía en plataformas Windows con CryptoAPI instalado" . www.mail-archive.com . Archivado del original el 2 de octubre de 2018. Consultado el 23 de mayo de 2023 .
- ↑ Malayter, Ryan (15 de febrero de 2002). "¿Cómo genera Windows GnuPG números aleatorios en el generador de claves?" . Archivado del original el 1 de diciembre de 2021. Recuperado el 23 de mayo de 2023 .
- ↑ " [ or-cvs ] Obtener entropía en windows" . archives.seul.org . Archivado del original el 07-05-2013 . Recuperado el 23-05-2023 .
- ↑ "Acerca de CNG - Aplicaciones Win32" . Archivado del original el 17 de mayo de 2018. Consultado el 17 de mayo de 2018 .
- ↑ "Protocolo de recopilación de entropía UEFI - Controladores de Windows" . Archivado del original el 17 de mayo de 2018. Consultado el 17 de mayo de 2018 .
- ↑ "Función CryptGenRandom (Wincrypt.h) - Aplicaciones Win32" . Archivado del original el 12 de agosto de 2020. Consultado el 31 de agosto de 2020 .
- ↑ Marcella Hastings, Joshua Fried, Nadia Heninger (febrero de 2012). "Las claves débiles siguen estando muy extendidas en los dispositivos de red" (PDF) .
{{cite web}}: CS1 maint: nombres múltiples: lista de autores ( enlace ) CS1 maint: estado de la URL ( enlace ) - ↑ Constantin, Lucian. "Millones de dispositivos integrados utilizan las mismas claves privadas SSH y TLS codificadas" . Network World . Archivado del original el 5 de noviembre de 2018. Consultado el 5 de noviembre de 2018 .
- ↑ "Una solución para la aleatoriedad escalable" . iohk.io. 6 de junio de 2017. Archivado del original el 17 de abril de 2021. Consultado el 14 de septiembre de 2020 .
- ↑ "Números aleatorios" . dwheeler.com . Archivado del original el 30/12/2022 . Consultado el 23/05/2023 .
- ↑ "'Re: Problema de entropía SSL/TLS', - MARC" . marc.info . Archivado del original el 15-11-2018 . Recuperado el 23-05-2023 .
- ↑ "Re: /dev/hw_random" . Archivado del original el 31/10/2007 . Consultado el 15/10/2007 .
- ↑ "Re: /dev/hw_random" . Archivado del original el 12/11/2007 . Consultado el 15/10/2007 .
- ↑ "Fuentes de ruido aleatorio" . Archivado del original el 21/11/2007 . Consultado el 15/10/2007 .
- ↑ http://random.com.hr/products/random/hg324.html Archivado el 13 de mayo de 2008 en Wayback Machine
- ↑ "rng-tools" . Archivado del original el 21/10/2007 . Consultado el 16/10/2007 .
- ↑ "Soporte de Linux para generadores de números aleatorios en chipsets i8xx — Documentación del kernel de Linux" . www.kernel.org . 2000. Archivado del original el 31 de julio de 2013.
- ↑ "Re: [ exim ] no reply to STARTTLS" . lists.exim.org . Archivado del original el 22-07-2012 . Recuperado el 23-05-2023 .
- ↑ random(4) Página man de Linux Archivada el 11/10/2007 en Wayback Machine , die.net
- ↑ "'Problema de entropía SSL/TLS, también conocido como tiempos de espera de pops (antes: problema sasl ldap)' - MARC" . marc.info . Archivado del original el 15/11/2018 . Consultado el 23/05/2023 .
- ↑ Josefsson, Simon; [ TLS ] Re: Claves Diffie-Hellman efímeras cortas Archivado el 11/11/2007 en Wayback Machine (lista de correo de ietf.org)
- ↑ " [ gnutls-dev ] gnutls_rsa_params_init se bloquea. ¿Es demasiado frecuente regenerar rsa-params una vez al día?" . lists.gnupg.org . 14 de diciembre de 2004. Archivado del original el 17 de enero de 2007.
- ↑ Zalewski, Michal; La fuente de entropía de Unix puede usarse para ataques de temporización de pulsaciones de teclas. Archivado el 19 de julio de 2011 en Wayback Machine , 2003.
- ↑ Re: agotamiento de entropía (antes: SSL/TLS passive sniffing) Archivado el 17/05/2011 en Wayback Machine , 2005
- ↑ "Construya su propio protocolo cliente/servidor criptográficamente seguro - 4.8.3. Recopilación de entropía" . Consultado el 8 de enero de 2020 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "Simtec Electronics Entropy Key: Generador USB de números aleatorios verdaderos" . www.entropykey.co.uk . Archivado del original el 22 de julio de 2010.
- ↑ "Introducción a la aleatoriedad: LavaRand en producción" . El blog de Cloudflare . 6 de noviembre de 2017. Archivado del original el 1 de mayo de 2023. Consultado el 23 de mayo de 2023 .
Enlaces externos
- Descripción general de la entropía y de los generadores de entropía en Linux
- Generadores de números pseudoaleatorios