La seguridad de los sistemas criptográficos depende de algunos datos secretos que son conocidos por las personas autorizadas, pero desconocidos e impredecibles para otros. Para lograr esta imprevisibilidad, normalmente se emplea cierta aleatorización . Los protocolos criptográficos modernos suelen requerir la generación frecuente de cantidades aleatorias. Los ataques criptográficos que subvierten o explotan las debilidades de este proceso se conocen como ataques de generador de números aleatorios .
Casi siempre se requiere un proceso de generación de números aleatorios (RNG) de alta calidad para la seguridad, y la falta de calidad generalmente genera vulnerabilidades de ataque y, por lo tanto, conduce a la falta de seguridad, incluso al compromiso total, en los sistemas criptográficos. [1] El proceso RNG es particularmente atractivo para los atacantes porque normalmente se trata de un único componente de hardware o software aislado fácil de localizar. Si el atacante puede sustituir bits pseudoaleatorios generados de una manera que pueda predecir, la seguridad se ve totalmente comprometida, aunque generalmente no sea detectable por ninguna prueba previa de los bits. Además, tales ataques requieren solo un acceso único al sistema que se está comprometiendo. No es necesario enviar datos de vuelta, a diferencia de, por ejemplo, un virus informático que roba claves y luego las envía por correo electrónico a algún punto de entrega.
Los seres humanos, en general, no son capaces de generar cantidades aleatorias. Los magos, los jugadores profesionales y los estafadores dependen de la previsibilidad del comportamiento humano. En la Segunda Guerra Mundial, los empleados alemanes encargados de codificar recibieron instrucciones de seleccionar tres letras al azar para que fueran la configuración inicial del rotor de cada mensaje de la máquina Enigma . En cambio, algunos eligieron valores predecibles, como las iniciales propias o las de una novia, lo que ayudó en gran medida a los aliados a descifrar estos sistemas de cifrado. Otro ejemplo son las formas, a menudo predecibles, en que los usuarios de ordenadores eligen contraseñas (véase descifrado de contraseñas ).
Sin embargo, en el caso específico de jugar juegos de estrategia mixta , Ran Halprin y Moni Naor estudiaron el uso de la entropía del juego humano para la generación de aleatoriedad . [2]
Al igual que con otros componentes de un criptosistema, un generador de números aleatorios de software debe estar diseñado para resistir ciertos ataques. Algunos ataques posibles a un RNG incluyen (según [3] ):
Son posibles varios ataques a los generadores de números aleatorios de hardware , incluyendo intentar capturar emisiones de radiofrecuencia de la computadora (obteniendo tiempos de interrupción del disco duro a partir del ruido del motor, por ejemplo) o intentar introducir señales controladas en una fuente supuestamente aleatoria (como apagar las luces de una lámpara de lava o introducir una señal potente y conocida en una tarjeta de sonido).
Se pueden crear números aleatorios alterados utilizando un generador de números pseudoaleatorios criptográficamente seguro con un valor inicial conocido por el atacante pero oculto en el software. Una porción relativamente corta, digamos de 24 a 40 bits, de la semilla puede ser verdaderamente aleatoria para evitar repeticiones reveladoras, pero no lo suficientemente larga para evitar que el atacante recupere, por ejemplo, una clave generada "aleatoriamente".
Los números aleatorios suelen pasar por varias capas de hardware y software antes de ser utilizados. Los bits pueden generarse en un dispositivo periférico, enviarse a través de un cable serial, recopilarse en una utilidad del sistema operativo y recuperarse mediante una llamada al sistema. Los bits alterados pueden sustituirse en cualquier punto de este proceso con pocas probabilidades de detección.
Se puede construir un circuito de hardware para producir bits subvertidos en un circuito integrado de unos pocos milímetros cuadrados. El generador de números aleatorios de hardware más sofisticado se puede subvertir colocando un chip de este tipo en cualquier lugar antes de donde se digitaliza la fuente de aleatoriedad, por ejemplo en un chip controlador de salida o incluso en el cable que conecta el RNG al ordenador. El chip de subversión puede incluir un reloj para limitar el inicio de la operación a un tiempo después de que la unidad se encienda por primera vez y se ejecuten las pruebas de aceptación, o puede contener un receptor de radio para el control de encendido y apagado. Puede ser instalado por el fabricante a instancias de su servicio nacional de inteligencia de señales, o añadido más tarde por cualquier persona con acceso físico. Los chips de CPU con generadores de números aleatorios de hardware integrados se pueden reemplazar por chips compatibles con un RNG subvertido en el firmware de los chips.
El diseño de un generador de números aleatorios seguro requiere al menos un nivel de cuidado tan alto como el diseño de otros elementos de un sistema criptográfico.
Las primeras versiones del protocolo de cifrado Secure Sockets Layer (SSL) de Netscape utilizaban cantidades pseudoaleatorias derivadas de un PRNG con tres valores variables: la hora del día, el identificador del proceso y el identificador del proceso padre. Estas cantidades suelen ser relativamente predecibles, por lo que tienen poca entropía y son menos que aleatorias, por lo que se descubrió que esa versión de SSL era insegura. El problema fue informado a Netscape en 1994 por Phillip Hallam-Baker , entonces investigador del equipo web del CERN, pero no se solucionó antes del lanzamiento. El problema en el código en ejecución fue descubierto en 1995 por Ian Goldberg y David Wagner , [4] que tuvieron que aplicar ingeniería inversa al código objeto porque Netscape se negó a revelar los detalles de su generación de números aleatorios ( seguridad por oscuridad ). Ese RNG se solucionó en versiones posteriores (versión 2 y superiores) mediante una siembra más robusta (es decir, más aleatoria y, por lo tanto, con mayor entropía desde la perspectiva de un atacante).
Microsoft utilizó un algoritmo no publicado para generar valores aleatorios en versiones anteriores de su sistema operativo Windows . Estas cantidades aleatorias se ponen a disposición de los usuarios a través de la utilidad CryptGenRandom . En noviembre de 2007, Leo Dorrendorf et al. de la Universidad Hebrea de Jerusalén y la Universidad de Haifa publicaron un artículo titulado Criptoanálisis del generador de números aleatorios del sistema operativo Windows . [5] El artículo presentó graves debilidades en el enfoque de Microsoft en ese momento. Las conclusiones del artículo se basaron en el desensamblaje del código en Windows 2000, pero según Microsoft también se aplicaron a Windows XP. [6] Microsoft ha declarado que los problemas descritos en el artículo se han abordado en versiones posteriores de Windows, que utilizan una implementación de RNG diferente. [6]
El Instituto Nacional de Estándares y Tecnología de Estados Unidos ha publicado una colección de "generadores de bits aleatorios deterministas" que recomienda como Publicación Especial NIST 800-90. [7] Uno de los generadores, Dual_EC_DRBG , fue favorecido por la Agencia de Seguridad Nacional . [8] Dual_EC_DRBG utiliza tecnología de curva elíptica e incluye un conjunto de constantes recomendadas. En agosto de 2007, Dan Shumow y Niels Ferguson de Microsoft demostraron que las constantes podrían construirse de tal manera que crearan una puerta trasera cleptográfica en el algoritmo. [9] En septiembre de 2013, The New York Times escribió que "la NSA había insertado una puerta trasera en un estándar de 2006 adoptado por NIST... llamado estándar Dual EC DRBG", [10] revelando así que la NSA llevó a cabo un ataque de malware contra el pueblo estadounidense. En diciembre de 2013, Reuters informó que documentos publicados por Edward Snowden indicaban que la NSA había pagado a RSA Security 10 millones de dólares para que Dual_EC_DRBG fuera el algoritmo predeterminado en su software de cifrado, y planteó más preocupaciones de que el algoritmo pudiera contener una puerta trasera para la NSA. [11] Debido a estas preocupaciones, en 2014, el NIST retiró Dual_EC_DRBG de su borrador de guía sobre generadores de números aleatorios, recomendando que "los usuarios actuales de Dual_EC_DRBG realicen la transición a uno de los tres algoritmos aprobados restantes lo más rápidamente posible". [12]
Crypto-1 es un criptosistema desarrollado por NXP para su uso en chips MIFARE . El sistema es propietario y, en un principio, el algoritmo no se publicó. Tras aplicar ingeniería inversa al chip, investigadores de la Universidad de Virginia y del Chaos Computer Club descubrieron un ataque a Crypto-1 que explotaba un generador de números aleatorios mal inicializado. [13]
En mayo de 2008, el investigador de seguridad Luciano Bello reveló su descubrimiento de que los cambios realizados en 2006 al generador de números aleatorios en la versión del paquete OpenSSL distribuido con Debian Linux y otras distribuciones basadas en Debian, como Ubuntu , redujeron drásticamente la entropía de los valores generados e hicieron que una variedad de claves de seguridad fueran vulnerables a ataques. [14] [15] La debilidad de seguridad fue causada por cambios realizados al código openssl por un desarrollador de Debian en respuesta a las advertencias del compilador de código aparentemente redundante. [16] Esto causó una regeneración masiva mundial de claves y, a pesar de toda la atención que recibió el problema, se podría asumir que muchas de estas claves antiguas todavía están en uso. Los tipos de claves afectados incluyen claves SSH , claves OpenVPN , claves DNSSEC , material de clave para usar en certificados X.509 y claves de sesión utilizadas en conexiones SSL/TLS . Las claves generadas con GnuPG o GNUTLS no se ven afectadas ya que estos programas usaron métodos diferentes para generar números aleatorios. Las claves generadas por distribuciones de Linux no basadas en Debian tampoco se ven afectadas. La vulnerabilidad de generación de claves débiles fue rápidamente corregida después de que se informó de ella, pero todos los servicios que todavía utilizan claves generadas por el código antiguo siguen siendo vulnerables. Varios paquetes de software contienen ahora comprobaciones con una lista negra de claves débiles para intentar impedir el uso de cualquiera de estas claves débiles restantes, pero los investigadores siguen encontrando implementaciones de claves débiles. [17]
En diciembre de 2010, un grupo autodenominado fail0verflow anunció la recuperación de la clave privada del algoritmo de firma digital de curva elíptica (ECDSA) utilizado por Sony para firmar el software de la consola de juegos PlayStation 3. El ataque fue posible porque Sony no logró generar un nuevo nonce aleatorio para cada firma. [18]
En 2012, Lenstra, Hughes, Augier, Bos, Kleinjung y Wachter anunciaron un análisis que comparaba millones de claves públicas RSA obtenidas de Internet. Fueron capaces de factorizar el 0,2% de las claves utilizando únicamente el algoritmo de Euclides . [19] [20] Explotaron una debilidad exclusiva de los criptosistemas basados en la factorización de números enteros . Si n = pq es una clave pública y n ′ = p ′ q ′ es otra, entonces si por casualidad p = p ′ , entonces un simple cálculo de mcd( n , n ′) = p factoriza tanto n como n ′, comprometiendo totalmente ambas claves. Nadia Heninger , parte de un grupo que realizó un experimento similar, dijo que las claves incorrectas ocurrieron casi en su totalidad en aplicaciones integradas , y explica que el problema del primo compartido descubierto por los dos grupos es resultado de situaciones en las que el generador de números pseudoaleatorios está mal inicializado y luego resembrado entre la generación del primer y el segundo primo. [21]
En agosto de 2013, se reveló que errores en la clase Java SecureRandom podían generar colisiones en los valores nonce k utilizados para ECDSA en las implementaciones de Bitcoin en Android . Cuando esto ocurría, se podía recuperar la clave privada, lo que a su vez permitía robar Bitcoins de la billetera que la contenía . [22]
El uso de generadores de números pseudoaleatorios (PRNG) inadecuados puede generar poca o ninguna seguridad. La generación de números aleatorios de calidad es difícil.
OpenSSL 0.9.8c-1 hasta versiones anteriores a 0.9.8g-9 en sistemas operativos basados en Debian utiliza un generador de números aleatorios que genera números predecibles, lo que facilita a los atacantes remotos realizar ataques de fuerza bruta para adivinar claves criptográficas.
{{cite news}}
: Enlace externo en |publisher=
( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda )