General | |
---|---|
Diseñadores | Ron Rivest , Adi Shamir y Leonard Adleman |
Publicado por primera vez | 1977 |
Certificación | PKCS # 1 , ANSI X9.31 , IEEE 1363 |
Detalle de cifrado | |
Tamaños de clave | 2.048 a 4.096 bits típicos |
Rondas | 1 |
Mejor criptoanálisis público | |
Tamiz de campo numérico general para ordenadores clásicos; Algoritmo de Shor para computadoras cuánticas. Se ha roto una clave de 829 bits . |
RSA ( Rivest – Shamir – Adleman ) es un criptosistema de clave pública que se utiliza ampliamente para la transmisión segura de datos. También es uno de los más antiguos. El acrónimo RSA proviene de los apellidos de Ron Rivest , Adi Shamir y Leonard Adleman , quienes describieron públicamente el algoritmo en 1977. Un sistema equivalente fue desarrollado en secreto, en 1973 en GCHQ (la agencia británica de inteligencia de señales ), por el matemático inglés Clifford Cocks. . Ese sistema fue desclasificado en 1997. [1]
En un criptosistema de clave pública , la clave de cifrado es pública y distinta de la clave de descifrado , que se mantiene secreta (privada). Un usuario de RSA crea y publica una clave pública basada en dos números primos grandes , junto con un valor auxiliar. Los números primos se mantienen en secreto. Cualquier persona puede cifrar los mensajes a través de la clave pública, pero solo puede decodificarlos alguien que conozca los números primos. [2]
La seguridad de RSA se basa en la dificultad práctica de factorizar el producto de dos números primos grandes , el " problema de factorización ". Romper el cifrado RSA se conoce como el problema RSA . Si es tan difícil como el problema de la factorización es una pregunta abierta. [3] No existen métodos publicados para anular el sistema si se utiliza una clave lo suficientemente grande.
RSA es un algoritmo relativamente lento. Debido a esto, no se usa comúnmente para cifrar directamente los datos del usuario. Más a menudo, RSA se utiliza para transmitir claves compartidas para criptografía de clave simétrica , que luego se utilizan para cifrado-descifrado masivo.
La idea de un criptosistema asimétrico de clave pública-privada se atribuye a Whitfield Diffie y Martin Hellman , quienes publicaron este concepto en 1976. También introdujeron firmas digitales e intentaron aplicar la teoría de números. Su formulación utilizó una clave secreta compartida creada a partir de la exponenciación de algún número, módulo un número primo. Sin embargo, dejaron abierto el problema de realizar una función unidireccional, posiblemente porque la dificultad de factorizar no estaba bien estudiada en ese momento. [4]
Ron Rivest , Adi Shamir y Leonard Adleman en el Instituto de Tecnología de Massachusetts , hicieron varios intentos en el transcurso de un año para crear una función unidireccional que era difícil de invertir. Rivest y Shamir, como informáticos, propusieron muchas funciones potenciales, mientras que Adleman, como matemático, fue responsable de encontrar sus debilidades. Probaron muchos enfoques, incluidos " polinomios basados en mochila " y "polinomios de permutación". Durante un tiempo, pensaron que lo que querían lograr era imposible debido a requisitos contradictorios. [5] En abril de 1977, pasaron la Pascua en casa de un estudiante y bebieron una buena cantidad de Manischewitz.vino antes de regresar a sus hogares alrededor de la medianoche. [6] Rivest, incapaz de dormir, se acostó en el sofá con un libro de texto de matemáticas y comenzó a pensar en su función unidireccional. Pasó el resto de la noche formalizando su idea y tenía gran parte del papel listo para el amanecer. El algoritmo ahora se conoce como RSA: las iniciales de sus apellidos en el mismo orden que su papel. [7]
Clifford Cocks , un matemático inglés que trabajaba para la Sede de Comunicaciones del Gobierno de la agencia de inteligencia británica (GCHQ), describió un sistema equivalente en un documento interno en 1973. [8] Sin embargo, dadas las computadoras relativamente caras necesarias para implementarlo en ese momento, fue considerado principalmente una curiosidad y, hasta donde se sabe públicamente, nunca se desplegó. Su descubrimiento, sin embargo, no fue revelado hasta 1997 debido a su clasificación de alto secreto.
Kid-RSA (KRSA) es un cifrado de clave pública simplificado publicado en 1997, diseñado con fines educativos. Algunas personas sienten que aprender Kid-RSA brinda información sobre RSA y otros cifrados de clave pública, análogos a DES simplificado . [9] [10] [11] [12] [13]
El 20 de septiembre de 1983 se concedió al MIT una patente que describe el algoritmo RSA : Patente estadounidense 4.405.829 "Sistema y método de comunicaciones criptográficas". Del resumen de la patente de DWPI :
El sistema incluye un canal de comunicaciones acoplado a al menos un terminal que tiene un dispositivo de codificación y al menos un terminal que tiene un dispositivo de decodificación. Un mensaje a transferir se cifra en texto cifrado en el terminal de codificación codificando el mensaje como un número M en un conjunto predeterminado. Luego, ese número se eleva a una primera potencia predeterminada (asociada con el receptor previsto) y finalmente se calcula. El resto o residuo, C, se ... calcula cuando el número exponenciado se divide por el producto de dos números primos predeterminados (asociados con el receptor previsto).
Una descripción detallada del algoritmo fue publicado en agosto de 1977, en la revista Scientific American 's juegos matemáticos columna. [7] Esto precedió a la fecha de presentación de la patente de diciembre de 1977. En consecuencia, la patente no tenía valor legal fuera de los Estados Unidos . Si el trabajo de Cocks hubiera sido conocido públicamente, una patente en los Estados Unidos tampoco habría sido legal.
Cuando se emitió la patente, la duración de la patente era de 17 años. La patente estaba a punto de expirar el 21 de septiembre de 2000, cuando RSA Security lanzó el algoritmo al dominio público, el 6 de septiembre de 2000. [14]
El algoritmo RSA implica cuatro etapas: clave de generación, distribución de claves de cifrado, y el descifrado.
Un principio básico detrás de RSA es la observación de que es práctico encontrar tres enteros positivos muy grandes e , d y n , de manera que con exponenciación modular para todos los enteros m (con 0 ≤ m < n ):
y que el conocimiento de correo y n , o incluso m , puede ser extremadamente difícil encontrar d . La barra triple (≡) aquí denota congruencia modular .
Además, para algunas operaciones es conveniente que se pueda cambiar el orden de las dos exponenciaciones y que esta relación también implique:
RSA implica una clave pública y una clave privada . La clave pública puede ser conocida por todos y se utiliza para cifrar mensajes. La intención es que los mensajes cifrados con la clave pública solo se puedan descifrar en un período de tiempo razonable utilizando la clave privada. La clave pública está representado por los números enteros n y E ; y, la clave privada, por el entero d (aunque n también se usa durante el proceso de descifrado, por lo que también podría considerarse parte de la clave privada). m representa el mensaje (preparado previamente con una técnica determinada que se explica a continuación).
Las claves para el algoritmo RSA se generan de la siguiente manera:
La clave pública consta del módulo ny el exponente público (o cifrado) e . La clave privada consta del exponente privado (o descifrado) d , que debe mantenerse en secreto. p , q y λ ( n ) también deben mantenerse en secreto porque se pueden usar para calcular d . De hecho, todos pueden descartarse después de que se haya calculado d . [dieciséis]
En el documento de RSA original, [2] el Euler función totient φ ( n ) = ( p - 1) ( q - 1) se utiliza en lugar de λ ( n ) para el cálculo del exponente privado d . Dado que φ ( n ) siempre es divisible por λ ( n ), el algoritmo también funciona. El hecho de que se pueda utilizar la función totient de Euler también puede verse como una consecuencia del teorema de Lagrange aplicado al grupo multiplicativo de enteros módulo pq . Por lo tanto, cualquier d satisfactoriod ⋅ e ≡ 1 (mod φ ( n )) también satisface d ⋅ e ≡ 1 (mod λ ( n )) . Sin embargo, calcular d módulo φ ( n ) a veces producirá un resultado mayor de lo necesario (es decir, d > λ ( n ) ). La mayoría de las implementaciones de RSA aceptarán exponentes generados usando cualquiera de los métodos (si usan el exponente privado d en absoluto, en lugar de usar el método de descifrado optimizado basado en el teorema del resto chinose describe a continuación), pero algunos estándares como FIPS 186-4 pueden requerir que d < λ ( n ) . Cualquier exponente privado "sobredimensionado" que no cumpla con ese criterio siempre puede reducirse módulo λ ( n ) para obtener un exponente equivalente más pequeño.
Dado que cualquier factor común de ( p - 1) y ( q - 1) está presente en la factorización de n - 1 = pq - 1 = ( p - 1) ( q - 1) + ( p - 1) + ( q - 1) , [17] se recomienda que ( p - 1) y ( q - 1) tengan solo factores comunes muy pequeños, si los hay además de los necesarios 2. [2] [18] [19] [20]
Nota: Los autores del artículo RSA original llevan a cabo la generación de claves eligiendo dy luego calculando e como el inverso multiplicativo modular de d módulo φ ( n ), mientras que la mayoría de las implementaciones actuales de RSA, como las que siguen a PKCS # 1 , lo hacen lo contrario (elija ey calcule d ). Dado que la clave elegida puede ser pequeña, mientras que la clave calculada normalmente no lo es, el algoritmo del papel RSA optimiza el descifrado en comparación con el cifrado, mientras que el algoritmo moderno optimiza el cifrado. [2] [21]
Suponga que Bob quiere enviar información a Alice . Si deciden usar RSA, Bob debe conocer la clave pública de Alice para cifrar el mensaje y Alice debe usar su clave privada para descifrar el mensaje.
Para permitir que Bob envíe sus mensajes cifrados, Alice transmite su clave pública ( n , e ) a Bob a través de una ruta confiable, pero no necesariamente secreta. La clave privada de Alice ( d ) nunca se distribuye.
Una vez que Bob obtiene la clave pública de Alice, puede enviar un mensaje M a Alice.
Para hacerlo, primero convierte M (estrictamente hablando, el texto plano sin relleno) en un entero m (estrictamente hablando, el texto plano relleno), de modo que 0 ≤ m < n mediante el uso de un protocolo reversible acordado conocido como relleno esquema . Luego calcula el texto cifrado c , usando la clave pública e de Alice , correspondiente a
Esto se puede hacer razonablemente rápido, incluso para números muy grandes, usando exponenciación modular . Bob luego transmite c a Alice.
Alice puede recuperar m de c utilizando su exponente de clave privada d calculando
Dado m , puede recuperar el mensaje original M invirtiendo el esquema de relleno.
A continuación, se muestra un ejemplo de cifrado y descifrado RSA. Los parámetros utilizados aquí son artificialmente pequeños, pero también se puede utilizar OpenSSL para generar y examinar un par de claves real .
La clave pública es ( n = 3233 , e = 17 ). Para un mensaje de texto plano relleno m , la función de cifrado es
La clave privada es ( n = 3233 , d = 413 ). Para un texto cifrado c , la función de descifrado es
Por ejemplo, para cifrar m = 65 , calculamos
Para descifrar c = 2790 , calculamos
Ambos cálculos se pueden calcular de manera eficiente utilizando el algoritmo de multiplicar y cuadrar para exponenciación modular . En situaciones de la vida real, los números primos seleccionados serían mucho mayores; en nuestro ejemplo sería trivial al factor n , 3233 (obtenido de la clave pública de libre acceso) de nuevo al primos p y q . e , también de la clave pública, se invierte para obtener d , adquiriendo así la clave privada.
Las implementaciones prácticas usan el teorema del resto chino para acelerar el cálculo usando el módulo de factores (mod pq usando mod p y mod q ).
Los valores d p , d q y q inv , que forman parte de la clave privada se calculan de la siguiente manera:
Así es como se utilizan d p , d q y q inv para un descifrado eficiente. (El cifrado es eficiente mediante la elección de un adecuado d y e par)
Suponga que Alice usa la clave pública de Bob para enviarle un mensaje encriptado. En el mensaje, ella puede afirmar que es Alice, pero Bob no tiene forma de verificar que el mensaje era de Alice, ya que cualquiera puede usar la clave pública de Bob para enviarle mensajes cifrados. Para verificar el origen de un mensaje, RSA también se puede utilizar para firmar un mensaje.
Suponga que Alice desea enviar un mensaje firmado a Bob. Puede usar su propia clave privada para hacerlo. Produce un valor hash del mensaje, lo eleva a la potencia de d (módulo n ) (como lo hace al descifrar un mensaje) y lo adjunta como una "firma" al mensaje. Cuando Bob recibe el mensaje firmado, usa el mismo algoritmo hash junto con la clave pública de Alice. Eleva la firma a la potencia de e (módulo n ) (como lo hace cuando encripta un mensaje) y compara el valor hash resultante con el valor hash del mensaje. Si los dos están de acuerdo, él sabe que el autor del mensaje estaba en posesión de la clave privada de Alice y que el mensaje no ha sido alterado desde que fue enviado.
Esto funciona debido a las reglas de exponenciación :
Por lo tanto, las claves se pueden intercambiar sin pérdida de generalidad, es decir, una clave privada de un par de claves se puede utilizar para:
La prueba de la exactitud de RSA se basa en el pequeño teorema de Fermat , que indica que un p - 1 ≡ 1 (mod p ) para cualquier entero una y el primer p , no dividiendo una . [nota 1]
Queremos demostrar que
para cada entero m cuando p y q son números primos distintos y e y d son enteros positivos que satisfacen ed ≡ 1 (mod λ ( pq )) .
Como λ ( pq ) = lcm ( p - 1, q - 1) es, por construcción, divisible por p - 1 y q - 1 , podemos escribir
para algunos enteros no negativos h y k . [nota 2]
Para comprobar si dos números, como m ed y m , son congruentes mod pq , basta (y de hecho es equivalente) comprobar que son congruentes mod p y mod q por separado. [nota 3]
Para mostrar m ed ≡ m (mod p ) , consideramos dos casos:
La verificación de que m ed ≡ m (mod q ) procede de forma completamente análoga:
Esto completa la prueba de que, para cualquier entero m , y enteros e , d tales que ed ≡ 1 (mod λ ( pq )) ,
Notas:
Aunque el artículo original de Rivest, Shamir y Adleman utilizó el pequeño teorema de Fermat para explicar por qué funciona RSA, es común encontrar pruebas que se basan en cambio en el teorema de Euler .
Queremos mostrar que m ed ≡ m (mod n ) , donde n = pq es un producto de dos números primos diferentes y e y d son enteros positivos que satisfacen ed ≡ 1 (mod φ ( n )) . Desde e y d son positivos, podemos escribir ed = 1 + hφ ( n ) para algunos no negativo número entero h . Suponiendo que m es primo con n , tenemos
donde la penúltima congruencia se sigue del teorema de Euler .
Más en general, para cualquier e y d satisfacer ed ≡ 1 (mod λ ( n )) , la misma conclusión se desprende de la generalización de Carmichael del teorema de Euler , que afirma que m λ (n) ≡ 1 (mod n ) para todos los m primos a n .
Cuando m no es primo con n , el argumento que acabamos de dar no es válido. Esto es muy improbable (solo una proporción de números 1 / p + 1 / q - 1 / ( pq ) tienen esta propiedad), pero incluso en este caso, la congruencia deseada sigue siendo cierta. O m ≡ 0 (mod p ) o m ≡ 0 (mod q ) , y estos casos pueden tratarse utilizando la demostración anterior.
Hay una serie de ataques contra RSA simple como se describe a continuación.
Para evitar estos problemas, las implementaciones prácticas de RSA suelen incorporar algún tipo de relleno estructurado y aleatorio en el valor m antes de cifrarlo. Este relleno asegura que m no caiga en el rango de textos planos inseguros, y que un mensaje dado, una vez rellenado, se cifrará en uno de un gran número de textos cifrados diferentes posibles.
Estándares como PKCS # 1 se han diseñado cuidadosamente para rellenar de forma segura los mensajes antes del cifrado RSA. Debido a que estos esquemas rellenan el texto plano m con cierto número de bits adicionales, el tamaño del mensaje no rellenado M debe ser algo menor. Los esquemas de relleno RSA deben diseñarse cuidadosamente para evitar ataques sofisticados que pueden ser facilitados por una estructura de mensaje predecible. Las primeras versiones del estándar PKCS # 1 (hasta la versión 1.5) usaban una construcción que parece hacer que RSA sea semánticamente seguro. Sin embargo, en Crypto 1998, Bleichenbacher demostró que esta versión es vulnerable a un ataque práctico de texto cifrado adaptable elegido . Además, en Eurocrypt 2000, Coron et al.[25] mostró que para algunos tipos de mensajes, este relleno no proporciona un nivel de seguridad suficientemente alto. Las versiones posteriores del estándar incluyen Optimal Asymmetric Encryption Padding (OAEP), que previene estos ataques. Como tal, OAEP debe usarse en cualquier aplicación nueva, y el relleno PKCS # 1 v1.5 debe reemplazarse siempre que sea posible. El estándar PKCS # 1 también incorpora esquemas de procesamiento diseñados para proporcionar seguridad adicional para las firmas RSA, por ejemplo, el Esquema de firma probabilística para RSA ( RSA-PSS ).
Los esquemas de relleno seguro como RSA-PSS son tan esenciales para la seguridad de la firma de mensajes como lo son para el cifrado de mensajes. Se concedieron dos patentes de EE. UU. Sobre PSS (USPTO 6266771 y USPTO 70360140); sin embargo, estas patentes expiraron el 24 de julio de 2009 y el 25 de abril de 2010, respectivamente. El uso de PSS ya no parece estar gravado por las patentes. [ investigación original? ] Tenga en cuenta que el uso de diferentes pares de claves RSA para el cifrado y la firma es potencialmente más seguro. [26]
Para mayor eficiencia, muchas bibliotecas de cifrado populares (como OpenSSL , Java y .NET ) utilizan la siguiente optimización para el descifrado y la firma basada en el teorema del resto chino . Los siguientes valores se calculan previamente y se almacenan como parte de la clave privada:
Estos valores permiten al destinatario calcular la exponenciación m = c d (mod pq ) de manera más eficiente de la siguiente manera:
Esto es más eficiente que calcular la exponenciación al elevar al cuadrado , aunque se tengan que calcular dos exponenciaciones modulares. La razón es que estas dos exponenciaciones modulares usan un exponente más pequeño y un módulo más pequeño.
La seguridad del criptosistema RSA se basa en dos problemas matemáticos: el problema de factorizar números grandes y el problema RSA . Se cree que el descifrado completo de un texto cifrado RSA no es factible asumiendo que ambos problemas son difíciles , es decir, no existe un algoritmo eficiente para resolverlos. Proporcionar seguridad contra el descifrado parcial puede requerir la adición de un esquema de relleno seguro . [27]
El problema RSA se define como la tarea de tomar e º raíces módulo un compuesto n : la recuperación de un valor de m tal que c ≡ m e (mod n ) , donde ( n , e ) es una clave pública RSA y c es un texto cifrado RSA . Actualmente, el enfoque más prometedor para resolver el problema de RSA es factorizar el módulo n . Con la capacidad de recuperar factores primos, un atacante puede calcular el exponente secreto d de una clave pública ( n , e ), luego descifre c usando el procedimiento estándar. Para lograr esto, un atacante factores n en p y q , y calcula lcm ( p - 1, q - 1) que permite la determinación de d de e . Todavía no se ha encontrado ningún método de tiempo polinomial para factorizar números enteros grandes en una computadora clásica, pero no se ha demostrado que no exista ninguno. Consulte la factorización de enteros para una discusión de este problema .
Se puede utilizar un tamiz cuadrático polinomial múltiple (MPQS) para factorizar el módulo público n .
La primera factorización de RSA-512 en 1999 utilizó cientos de computadoras y requirió el equivalente a 8.400 MIPS años, durante un tiempo transcurrido de aproximadamente siete meses. [28] Para 2009, Benjamin Moody podría factorizar una clave RSA-512 bit en 73 días usando solo software público (GGNFS) y su computadora de escritorio (una Athlon64 de doble núcleo con una cpu de 1.900 MHz). Se requirieron menos de cinco gigabytes de almacenamiento en disco y alrededor de 2.5 gigabytes de RAM para el proceso de tamizado.
Rivest, Shamir y Adleman observó [2] que Miller ha demostrado que - suponiendo la verdad de la extendida hipótesis de Riemann - encontrar d de n y e es tan dura como la factorización n en p y q (hasta una diferencia de tiempo polinómico). [29] Sin embargo, Rivest, Shamir y Adleman señalaron, en la sección IX / D de su artículo, que no habían encontrado una prueba de que invertir RSA es tan difícil como factorizar.
A partir de 2020 [update], el número RSA factorizado más grande conocido públicamente era de 829 bits (250 dígitos decimales, RSA-250 ). [30] Su factorización, mediante una implementación distribuida de última generación, tomó aproximadamente 2700 años de CPU. En la práctica, las claves RSA suelen tener una longitud de 1024 a 4096 bits. En 2003, RSA Security estimó que era probable que las claves de 1024 bits se pudieran descifrar para 2010. [31] A partir de 2020, no se sabe si dichas claves se pueden descifrar, pero las recomendaciones mínimas se han movido a al menos 2048 bits. [32] Generalmente se presume que RSA es seguro si n es lo suficientemente grande, fuera de la computación cuántica.
Si n es de 300 bits o menos, se puede factorizar en unas pocas horas en una computadora personal , utilizando software que ya está disponible gratuitamente. Se demostró que las claves de 512 bits eran prácticamente rompibles en 1999 cuando RSA-155 se factorizó utilizando varios cientos de computadoras, y ahora se factorizan en unas pocas semanas utilizando hardware común. En 2011 se informaron exploits que utilizan certificados de firma de código de 512 bits que pueden haber sido factorizados. [33] Un dispositivo de hardware teórico llamado TWIRL , descrito por Shamir y Tromer en 2003, cuestionó la seguridad de las claves de 1024 bits. [31]
En 1994, Peter Shor demostró que una computadora cuántica , si es que alguna vez se pudiera crear prácticamente para ese propósito, sería capaz de factorizar el tiempo polinomial , rompiendo RSA; consulte el algoritmo de Shor .
Esta sección necesita citas adicionales para su verificación . ( octubre de 2017 ) |
Encontrar el números primos grandes p y q por lo general se realiza mediante pruebas de números aleatorios del tamaño correcto con probabilísticos pruebas de primalidad que eliminan rápidamente la práctica totalidad de los nonprimes.
El número p y q no debe ser "demasiado cerca", no sea que la factorización de Fermat para n tener éxito. Si p - q es menor que 2 n 1/4 ( n = p * q , que incluso para valores pequeños de 1024 bits de n es3 × 10 77 ) Resolviendo para p y q es trivial. Además, si p - 1 o q - 1 tiene solo pequeños factores primos, n puede factorizarse rápidamente mediante el algoritmo p - 1 de Pollard y, por lo tanto, dichos valores de p o q deben descartarse.
Es importante que el exponente privado d sea lo suficientemente grande. Michael J. Wiener mostró que si p es entre q y 2 q (que es bastante típico) y d < n 1/4 / 3 , a continuación, d puede ser calculado de manera eficiente de n y e . [34]
No se conoce ningún ataque contra pequeños exponentes públicos como e = 3 , siempre que se utilice el relleno adecuado. Coppersmith's Attack tiene muchas aplicaciones para atacar RSA específicamente si el exponente público e es pequeño y si el mensaje encriptado es corto y no relleno. 65537 es un valor comúnmente utilizado para e ; este valor puede considerarse como un compromiso entre evitar posibles ataques de pequeños exponentes y seguir permitiendo cifrados eficientes (o verificación de firmas). La Publicación especial del NIST sobre seguridad informática (SP 800-78 Rev 1 de agosto de 2007) no permite exponentes públicos e inferiores a 65537, pero no indica el motivo de esta restricción.
En octubre de 2017, un equipo de investigadores de la Universidad de Masaryk anunció la vulnerabilidad ROCA , que afecta a las claves RSA generadas por un algoritmo incorporado en una biblioteca de Infineon conocida como RSALib. Se demostró que una gran cantidad de tarjetas inteligentes y módulos de plataforma confiable (TPM) se vieron afectados. Las claves RSA vulnerables se identifican fácilmente mediante un programa de prueba que lanzó el equipo. [35]
A criptográficamente fuerte generador de números aleatorios , que ha sido correctamente sembrado con entropía adecuada, debe ser utilizado para generar el números primos p y q . A principios de 2012, Arjen K. Lenstra , James P. Hughes, Maxime Augier, Joppe W. Bos, Thorsten Kleinjung y Christophe Wachter llevaron a cabo un análisis que compara millones de claves públicas recopiladas de Internet . Pudieron factorizar el 0.2% de las claves usando solo el algoritmo de Euclid. [36] [37]
Explotaron una debilidad exclusiva de los criptosistemas basados en la factorización de enteros. Si n = pq es una clave pública y n ′ = p ′ q ′ es otra, entonces si por casualidad p = p ′ (pero q no es igual a q ′), entonces un simple cálculo de mcd ( n , n ′) = p factores tanto n como n′, Comprometiendo totalmente ambas claves. Lenstra y col. tenga en cuenta que este problema se puede minimizar mediante el uso de una semilla aleatoria fuerte de longitud de bits dos veces el nivel de seguridad pretendido, o empleando una función determinista para elegir q dado p , en lugar de elegir p y q independientemente.
Nadia Heninger era parte de un grupo que hizo un experimento similar. Usaron una idea de Daniel J. Bernstein para calcular el GCD de cada clave RSA n contra el producto de todas las demás claves n ′ que habían encontrado (un número de 729 millones de dígitos), en lugar de calcular cada mcd ( n , n ′) por separado, logrando así una aceleración muy significativa ya que después de una gran división, el problema de GCD es de tamaño normal.
Heninger dice en su blog que las claves incorrectas ocurrieron casi por completo en aplicaciones integradas, incluidos "firewalls, enrutadores, dispositivos VPN, dispositivos de administración de servidores remotos, impresoras, proyectores y teléfonos VOIP" de más de 30 fabricantes. Heninger explica que el problema de un primo compartido descubierto por los dos grupos resulta de situaciones en las que el generador de números pseudoaleatorios está mal sembrado inicialmente y luego se vuelve a sembrar entre la generación del primer y segundo primos. El uso de semillas de entropía suficientemente alta obtenidas de los tiempos de pulsación de teclas o el ruido de diodos electrónicos o el ruido atmosférico de un receptor de radio sintonizado entre estaciones debería resolver el problema. [38]
La generación de números aleatorios sólidos es importante en todas las fases de la criptografía de clave pública. Por ejemplo, si se utiliza un generador débil para las claves simétricas que están siendo distribuidas por RSA, entonces un intruso podría omitir RSA y adivinar las claves simétricas directamente.
Kocher describió un nuevo ataque a RSA en 1995: si el atacante Eve conoce el hardware de Alice con suficiente detalle y es capaz de medir los tiempos de descifrado de varios textos cifrados conocidos, Eve puede deducir la clave de descifrado d rápidamente. Este ataque también se puede aplicar contra el esquema de firma RSA. En 2003, Boneh y Brumley demostraron un ataque más práctico capaz de recuperar factorizaciones RSA a través de una conexión de red (por ejemplo, desde un servidor web habilitado para Secure Sockets Layer (SSL)) [39] Este ataque aprovecha la información filtrada por el teorema chino del resto. optimización utilizada por muchas implementaciones de RSA.
Una forma de frustrar estos ataques es asegurarse de que la operación de descifrado requiera una cantidad constante de tiempo para cada texto cifrado. Sin embargo, este enfoque puede reducir significativamente el rendimiento. En cambio, la mayoría de las implementaciones de RSA utilizan una técnica alternativa conocida como cegamiento criptográfico . El cegamiento de RSA hace uso de la propiedad multiplicativa de RSA. En lugar de calcular c d (mod n ) , Alice primero elige un valor aleatorio secreto r y calcula ( r e c ) d (mod n ) . El resultado de este cálculo, después de aplicar el teorema de Euler , es rc d(mod n ), por lo que el efecto de r se puede eliminar multiplicando por su inverso. Se elige un nuevo valor de r para cada texto cifrado. Con el cegamiento aplicado, el tiempo de descifrado ya no se correlaciona con el valor del texto cifrado de entrada, por lo que falla el ataque de tiempo.
En 1998, Daniel Bleichenbacher describió el primer ataque práctico de texto cifrado adaptable elegido , contra mensajes cifrados con RSA utilizando el esquema de relleno PKCS # 1 v1 (un esquema de relleno aleatoriza y agrega estructura a un mensaje cifrado con RSA, por lo que es posible determinar si el mensaje descifrado es válido). Debido a fallas con el esquema PKCS # 1, Bleichenbacher pudo montar un ataque práctico contra las implementaciones RSA del protocolo Secure Sockets Layer y recuperar claves de sesión. Como resultado de este trabajo, los criptógrafos ahora recomiendan el uso de esquemas de relleno comprobables como el relleno de cifrado asimétrico óptimo.y RSA Laboratories ha lanzado nuevas versiones de PKCS # 1 que no son vulnerables a estos ataques.
Se ha descrito un ataque de canal lateral utilizando análisis de predicción de rama (BPA). Muchos procesadores utilizan un predictor de bifurcaciones para determinar si es probable que se tome o no una bifurcación condicional en el flujo de instrucciones de un programa. A menudo, estos procesadores también implementan subprocesos múltiples simultáneos (SMT). Los ataques de análisis de predicción de sucursales utilizan un proceso de espionaje para descubrir (estadísticamente) la clave privada cuando se procesan con estos procesadores.
El análisis de predicción de rama simple (SBPA) afirma mejorar el BPA de una manera no estadística. En su artículo, "Sobre el poder del análisis de predicción de rama simple", [40] los autores de SBPA ( Onur Aciicmez y Cetin Kaya Koc ) afirman haber descubierto 508 de 512 bits de una clave RSA en 10 iteraciones.
En 2010. [41] El autor recuperó la clave variando el voltaje de alimentación de la CPU fuera de los límites; esto provocó múltiples fallas de energía en el servidor.
Algunas bibliotecas de criptografía que brindan soporte para RSA incluyen:
|journal=
( ayuda )|journal=
( ayuda )|journal=
( ayuda )|journal=
( ayuda )