stringtranslate.com

Entropía (informática)

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.

núcleo de linux

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]

Núcleo 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 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.

núcleo hurd

Un controlador portado desde el kernel de Linux está disponible para el kernel Hurd . [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 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]

OS/2

Existe un paquete de software para OS/2 que permite que los procesos de software recuperen datos aleatorios. [12]

ventanas

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:

Sistemas embebidos

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]

Sistemas (des)centralizados

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]

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 recolección de entropía. [22]

Entropía originada en hardware

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.

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 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]

Seguridad

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]

Fuentes potenciales

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]

Ver también

Referencias

  1. ^ aleatorio (4) - Página de manual de Linux Archivado el 11 de octubre de 2007 en Wayback Machine (die.net)
  2. ^ "Tendencias robóticas» Falta de entropía ". Archivado desde el original el 6 de diciembre de 2022 . Consultado el 23 de mayo de 2023 .
  3. ^ "demonio de entropía de audio". 23 de marzo de 2021. Archivado desde el original el 23 de marzo de 2021.
  4. ^ "Base de datos del paquete Fedora: audio-entropyd".[ enlace muerto permanente ]
  5. ^ "video_entropyd". 23 de marzo de 2021. Archivado desde el original el 23 de marzo de 2021.
  6. ^ "Corredor de entropía". 29 de mayo de 2020. Archivado desde el original el 29 de mayo de 2020.
  7. ^ "haveged: un demonio de entropía simple". Archivado desde el original el 27 de octubre de 2012 . Consultado el 3 de abril de 2011 .
  8. ^ "Entropía y dispositivos aleatorios | LinuxLink de TimeSys: su recurso integrado de Linux". Archivado desde el original el 2 de abril de 2016 . Consultado el 15 de octubre de 2007 .
  9. ^ /dev/{,u}controlador aleatorio para GNU/Hurd Archivado el 18 de septiembre de 2007 en Wayback Machine (ibofobi.dk)
  10. ^ ab "Solaris /dev/random mediante emulación". Archivado desde el original el 4 de noviembre de 2007 . Consultado el 15 de octubre de 2007 .
  11. ^ "Solaris /dev/aleatorio". Archivado desde el original el 11 de mayo de 2008 . Consultado el 17 de octubre de 2007 .
  12. ^ "Demonio de recopilación de entropía Rexx para OS/2". r6.ca. ​Archivado desde el original el 31 de octubre de 2007 . Consultado el 15 de octubre de 2007 .
  13. ^ Malayter, Ryan (9 de noviembre de 2001). "Alternativa de destrucción de línea de comandos GPL para Windows". Archivado desde el original el 27 de octubre de 2021 . Consultado el 23 de mayo de 2023 .
  14. ^ "Fuente de entropía en plataformas Windows con CryptoAPI instalado". www.mail-archive.com . Archivado desde el original el 2 de octubre de 2018 . Consultado el 23 de mayo de 2023 .
  15. ^ Malayter, Ryan (15 de febrero de 2002). "¿Cómo genera Windows GnuPG números aleatorios en keygen?". Archivado desde el original el 1 de diciembre de 2021 . Consultado el 23 de mayo de 2023 .
  16. ^ "[or-cvs] Obtén entropía en Windows". archivos.seul.org . Archivado desde el original el 7 de mayo de 2013 . Consultado el 23 de mayo de 2023 .
  17. ^ "Acerca de CNG: aplicaciones Win32". Archivado desde el original el 17 de mayo de 2018 . Consultado el 17 de mayo de 2018 .
  18. ^ "Protocolo de recopilación de entropía UEFI: controladores de Windows". Archivado desde el original el 17 de mayo de 2018 . Consultado el 17 de mayo de 2018 .
  19. ^ "Función CryptGenRandom (Wincrypt.h): aplicaciones Win32". Archivado desde el original el 12 de agosto de 2020 . Consultado el 31 de agosto de 2020 .
  20. ^ Constantino, Lucian. "Millones de dispositivos integrados utilizan las mismas claves privadas SSH y TLS codificadas". Mundo de la Red . Archivado desde el original el 5 de noviembre de 2018 . Consultado el 5 de noviembre de 2018 .
  21. ^ "Una solución para la aleatoriedad escalable". iohk.io. ​6 de junio de 2017. Archivado desde el original el 17 de abril de 2021 . Consultado el 14 de septiembre de 2020 .
  22. ^ "Números aleatorios". dwheeler.com . Archivado desde el original el 30 de diciembre de 2022 . Consultado el 23 de mayo de 2023 .
  23. ^ "'Re: problema de entropía SSL/TLS', MARC". marc.info . Archivado desde el original el 15 de noviembre de 2018 . Consultado el 23 de mayo de 2023 .
  24. ^ "Re: /dev/hw_random". Archivado desde el original el 31 de octubre de 2007 . Consultado el 15 de octubre de 2007 .
  25. ^ "Re: /dev/hw_random". Archivado desde el original el 12 de noviembre de 2007 . Consultado el 15 de octubre de 2007 .
  26. ^ "Fuentes de ruido aleatorias". Archivado desde el original el 21 de noviembre de 2007 . Consultado el 15 de octubre de 2007 .
  27. ^ http://random.com.hr/products/random/hg324.html Archivado el 13 de mayo de 2008 en Wayback Machine.
  28. ^ "rng-herramientas". Archivado desde el original el 21 de octubre de 2007 . Consultado el 16 de octubre de 2007 .
  29. ^ "Soporte de Linux para generador de números aleatorios en conjuntos de chips i8xx: documentación del kernel de Linux". www.kernel.org . 2000. Archivado desde el original el 31 de julio de 2013.
  30. ^ "Re: [exim] no hay respuesta a STARTTLS". listas.exim.org . Archivado desde el original el 22 de julio de 2012 . Consultado el 23 de mayo de 2023 .
  31. ^ Página de manual de Linux aleatoria (4) Archivada el 11 de octubre de 2007 en Wayback Machine , die.net
  32. ^ "'Problema de entropía SSL/TLS, también conocido como tiempos de espera de pops (era: problema sasl ldap)' - MARC". marc.info . Archivado desde el original el 15 de noviembre de 2018 . Consultado el 23 de mayo de 2023 .
  33. ^ Josefsson, Simón; [TLS] Re: Claves efímeras cortas de Diffie-Hellman Archivado el 11 de noviembre de 2007 en Wayback Machine (lista de correo de ietf.org)
  34. ^ "[gnutls-dev] gnutls_rsa_params_init se bloquea. ¿Es demasiado frecuente la regeneración de rsa-params una vez al día?". listas.gnupg.org . 14 de diciembre de 2004. Archivado desde el original el 17 de enero de 2007.
  35. ^ Zalewski, Michal; La fuente de entropía de Unix se puede utilizar para ataques de sincronización de pulsaciones de teclas Archivado el 19 de julio de 2011 en Wayback Machine , 2003.
  36. ^ Re: agotamiento de entropía (era: detección pasiva de SSL/TLS) Archivado el 17 de mayo de 2011 en Wayback Machine , 2005
  37. ^ "Cree su propio protocolo de servidor/cliente criptográficamente seguro - 4.8.3. Recopilación de entropía". Archivado desde el original el 23 de julio de 2012 . Consultado el 8 de enero de 2020 .{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  38. ^ "Clave de entropía de Simtec Electronics: generador de números aleatorios verdaderos USB". www.entropykey.co.uk . Archivado desde el original el 22 de julio de 2010.
  39. ^ "Aleatoriedad 101: LavaRand en producción". El blog de Cloudflare . 6 de noviembre de 2017. Archivado desde el original el 1 de mayo de 2023 . Consultado el 23 de mayo de 2023 .

enlaces externos