stringtranslate.com

RSA (criptosistema)

RSA ( Rivest–Shamir–Adleman ) es un criptosistema de clave pública , uno de los más antiguos y ampliamente utilizados para la transmisión segura de datos. Las siglas «RSA» provienen 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 la Sede de Comunicaciones del Gobierno (GCHQ), la agencia de inteligencia de señales británica , por el matemático inglés Clifford Cocks . Ese sistema fue desclasificado en 1997. [2]

En un criptosistema de clave pública , la clave de cifrado es pública y distinta de la clave de descifrado , que se mantiene en secreto (privada). Un usuario 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. Cualquiera puede cifrar los mensajes mediante la clave pública, pero solo pueden descifrarlos quienes conozcan la clave privada. [1]

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 factorización es una pregunta abierta. [3] No hay métodos publicados para vencer al sistema si se utiliza una clave lo suficientemente grande.

RSA es un algoritmo relativamente lento, por lo que no se suele utilizar para cifrar directamente los datos de los usuarios. Con mayor frecuencia, se utiliza RSA para transmitir claves compartidas para criptografía de clave simétrica , que luego se utilizan para el cifrado y descifrado masivo.

Historia

Adi Shamir , co-inventor de RSA (los otros son Ron Rivest y Leonard Adleman )

La idea de un criptosistema de clave pública-privada asimétrico 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 la factorización no estaba bien estudiada en ese momento. [4] Además, al igual que Diffie-Hellman , RSA se basa en la exponenciación modular .

Ron Rivest , Adi Shamir y Leonard Adleman , del Instituto Tecnológico de Massachusetts , intentaron varias veces a lo largo de un año crear una función que fuera difícil de invertir. Rivest y Shamir, como científicos informáticos, propusieron muchas funciones potenciales, mientras que Adleman, como matemático, fue responsable de encontrar sus debilidades. Probaron muchos enfoques, incluidos los " polinomios de permutación" y los "polinomios de mochila ". 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 la casa de un estudiante y bebieron mucho vino antes de regresar a sus hogares alrededor de la medianoche. [6] Rivest, incapaz de dormir, se tumbó 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 artículo listo al amanecer. El algoritmo ahora se conoce como RSA: las iniciales de sus apellidos en el mismo orden que su artículo. [7]

Clifford Cocks , un matemático inglés que trabajaba para la agencia de inteligencia británica Government Communications Headquarters (GCHQ), describió un sistema similar en un documento interno en 1973. [8] Sin embargo, dadas las computadoras relativamente caras necesarias para implementarlo en ese momento, se consideró principalmente una curiosidad y, hasta donde se sabe públicamente, nunca se implementó. Sus ideas y conceptos no fueron revelados hasta 1997 debido a su clasificación de alto secreto.

Kid-RSA (KRSA) es un sistema de cifrado de clave pública simplificado e inseguro publicado en 1997, diseñado para fines educativos. Algunas personas creen que aprender Kid-RSA brinda conocimientos sobre RSA y otros sistemas de cifrado de clave pública, análogos al DES simplificado . [9] [10] [11] [12] [13]

Patentar

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 a al menos un terminal que tiene un dispositivo de decodificación. Un mensaje que se va 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. A continuación, 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 exponencial se divide por el producto de dos números primos predeterminados (asociados con el receptor previsto).

En agosto de 1977, en la columna Mathematical Games de la revista Scientific American , se publicó una descripción detallada del algoritmo . [7] Esto precedió a la fecha de presentación de la patente, en diciembre de 1977. En consecuencia, la patente no tenía validez 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 concedió la patente, su duración era de 17 años. La patente estaba a punto de expirar el 21 de septiembre de 2000, pero RSA Security hizo público el algoritmo el 6 de septiembre de 2000. [14]

Operación

El algoritmo RSA implica cuatro pasos: generación de clave , distribución de clave, cifrado y descifrado.

Un principio básico detrás de RSA es la observación de que es práctico encontrar tres números enteros positivos muy grandes e , d y n , tales que para todos los números enteros m ( 0 ≤ m < n ), ambos y tienen el mismo resto cuando se dividen por (son congruentes módulo ): Sin embargo, cuando solo se dan e y n , es extremadamente difícil encontrar d .

Los números enteros n y e constituyen la clave pública, d representa la clave privada y m representa el mensaje. La exponenciación modular de e y d corresponde al cifrado y al descifrado, respectivamente.

Además, como los dos exponentes se pueden intercambiar , la clave privada y pública también se pueden intercambiar, lo que permite la firma y verificación de mensajes utilizando el mismo algoritmo.

Generación de claves

Las claves para el algoritmo RSA se generan de la siguiente manera:

  1. Elija dos números primos grandes p y q .
    • Para dificultar la factorización, p y q deben elegirse al azar, ser ambos grandes y tener una gran diferencia. [1] Para elegirlos, el método estándar es elegir números enteros aleatorios y utilizar una prueba de primalidad hasta encontrar dos primos.
    • p y q deben mantenerse en secreto.
  2. Calcular n = pq .
    • n se utiliza como módulo tanto para las claves públicas como para las privadas. Su longitud, expresada habitualmente en bits, es la longitud de la clave .
    • n se libera como parte de la clave pública.
  3. Calcular λ ( n ) , donde λ es la función totiente de Carmichael . Puesto que n = pq , λ ( n ) = mcm ( λ ( p ),  λ ( q )) , y puesto que p y q son primos, λ ( p ) = φ ( p ) = p − 1 , y asimismo λ ( q ) = q − 1 . Por lo tanto λ ( n ) = mcm( p − 1, q − 1) .
    • El mcm se puede calcular a través del algoritmo euclidiano , ya que mcm( ab ) = | de |/mcd( ab ) .
    • λ ( n ) se mantiene en secreto.
  4. Elija un entero e tal que 1 < e < λ ( n ) y mcd ( e , λ ( n )) = 1 ; es decir, e y λ ( n ) son coprimos .
    • e tiene una longitud de bits corta y un peso Hamming pequeño , lo que da como resultado un cifrado más eficiente: el valor más comúnmente elegido para e es 2 16 + 1 =65 537 . El valor más pequeño (y más rápido) posible para e es 3, pero se ha demostrado queun valor tan pequeño para e es menos seguro en algunos entornos. [15]
    • e se publica como parte de la clave pública.
  5. Determinar d como de −1 (mod λ ( n )) ; es decir, d es el inverso multiplicativo modular de e módulo λ ( n ) .
    • Esto significa: resolver para d la ecuación de ≡ 1 (mod λ ( n )) ; d puede calcularse eficientemente utilizando el algoritmo euclidiano extendido , ya que, gracias a que e y λ ( n ) son coprimos, dicha ecuación es una forma de la identidad de Bézout , donde d es uno de los coeficientes.
    • d se mantiene en secreto como el exponente de clave privada .

La clave pública consiste en el módulo n y el exponente público (o de cifrado) e . La clave privada consiste en el exponente privado (o de 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 ellos pueden descartarse después de que se haya calculado d . [16]

En el artículo original de RSA, [1] se utiliza la función totient de Euler φ ( n ) = ( p − 1)( q − 1) en lugar de λ ( n ) para calcular el exponente privado d . Dado que φ ( n ) siempre es divisible por λ ( n ) , el algoritmo funciona igual de bien. La posibilidad de utilizar la función totient de Euler resulta también del teorema de Lagrange aplicado al grupo multiplicativo de números enteros módulo pq . Por tanto, cualquier d que satisfaga de ≡ 1 (mod φ ( n )) también satisface de ≡ 1 (mod λ ( n )) . Sin embargo, calcular d módulo φ ( n ) a veces producirá un resultado mayor que el necesario (es decir, d > λ ( n ) ). La mayoría de las implementaciones de RSA aceptarán exponentes generados utilizando cualquiera de los dos métodos (si utilizan el exponente privado d , en lugar de utilizar el método de descifrado optimizado basado en el teorema del resto chino que se describe a continuación), pero algunos estándares como FIPS 186-4 (Sección B.3.1) pueden requerir que d < λ ( n ) . Cualquier exponente privado "de gran tamaño" que no cumpla con este criterio siempre se puede reducir 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] [ ¿ fuente autopublicada? ] se recomienda que ( p − 1) y ( q − 1) tengan solo factores comunes muy pequeños, si los hay, además del 2 necesario. [1] [18] [19] [ verificación fallida ] [20] [ verificación fallida ]

Nota: Los autores del artículo original de RSA llevan a cabo la generación de claves eligiendo d y 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 , hacen lo inverso (eligen e y calculan d ). Dado que la clave elegida puede ser pequeña, mientras que la clave calculada normalmente no lo es, el algoritmo del artículo de RSA optimiza el descifrado en comparación con el cifrado, mientras que el algoritmo moderno optimiza el cifrado en su lugar. [1] [21]

Distribución de claves

Supongamos que Bob quiere enviar información a Alice . Si deciden utilizar RSA, Bob debe conocer la clave pública de Alice para cifrar el mensaje y Alice debe utilizar su clave privada para descifrarlo.

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.

Encriptación

Después de que Bob obtiene la clave pública de Alice, puede enviarle un mensaje M.

Para ello, primero convierte M (estrictamente hablando, el texto sin formato sin relleno) en un entero m (estrictamente hablando, el texto sin formato con relleno ), de modo que 0 ≤ m < n mediante el uso de un protocolo reversible acordado conocido como esquema de relleno. Luego calcula el texto cifrado c , utilizando la clave pública de Alice e , correspondiente a

Esto se puede hacer con bastante rapidez, incluso para números muy grandes, utilizando la exponenciación modular . Bob luego transmite c a Alice. Tenga en cuenta que al menos nueve valores de m producirán un texto cifrado c igual a m , [a] pero es muy poco probable que esto ocurra en la práctica.

Descifrado

Alice puede recuperar m de c usando su exponente de clave privada d calculando

Dado m , puede recuperar el mensaje original M invirtiendo el esquema de relleno.

Ejemplo

A continuación se muestra un ejemplo de cifrado y descifrado RSA: [b]

  1. Elija dos números primos distintos, como por ejemplo
    y .
  2. Calcular n = pq dando
  3. Calcule la función totiente de Carmichael del producto como λ ( n ) = mcm ( p − 1, q − 1) dando
  4. Elija cualquier número 2 < e < 780 que sea coprimo de 780. Elegir un número primo para e nos deja solo para comprobar que e no es divisor de 780.
    Dejar .
  5. Calcule d , el inverso multiplicativo modular de e (mod λ ( n )) , obteniendo como

La clave pública es ( n = 3233, e = 17) . Para un mensaje de texto simple rellenado 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 , se calcula

Para descifrar c = 2790 , se calcula

Ambos cálculos se pueden realizar de manera eficiente utilizando el algoritmo de elevar al cuadrado y multiplicar para la exponenciación modular . En situaciones de la vida real, los primos seleccionados serían mucho mayores; en nuestro ejemplo, sería trivial factorizar n = 3233 (obtenido de la clave pública disponible libremente) para obtener los primos p y q . Luego, se invierte e , también de la clave pública, para obtener d , adquiriendo así la clave privada.

Las implementaciones prácticas utilizan el teorema del resto chino para acelerar el cálculo utilizando el módulo de factores (mod pq utilizando 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:

A continuación se muestra cómo se utilizan d p , d q y q inv para un descifrado eficiente (el cifrado es eficiente mediante la elección de un par d y e adecuado ):

Firmar mensajes

Supongamos que Alice utiliza la clave pública de Bob para enviarle un mensaje cifrado. En el mensaje, ella puede afirmar ser Alice, pero Bob no tiene forma de verificar que el mensaje proviene de Alice, ya que cualquiera puede utilizar la clave pública de Bob para enviarle mensajes cifrados. Para verificar el origen de un mensaje, también se puede utilizar RSA para firmar un mensaje.

Supongamos que Alice desea enviar un mensaje firmado a Bob. Para ello, puede utilizar su propia clave privada. Produce un valor hash del mensaje, lo eleva a la potencia d (módulo n ) (como hace cuando descifra un mensaje) y lo adjunta como una "firma" al mensaje. Cuando Bob recibe el mensaje firmado, utiliza el mismo algoritmo hash junto con la clave pública de Alice. Eleva la firma a la potencia e (módulo n ) (como hace cuando cifra un mensaje) y compara el valor hash resultante con el valor hash del mensaje. Si ambos coinciden, 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 se envió.

Esto funciona gracias a las reglas de exponenciación :

De esta manera, las claves se pueden intercambiar sin pérdida de generalidad, es decir, una clave privada de un par de claves se puede utilizar para:

  1. Descifrar un mensaje destinado únicamente al destinatario, que puede ser cifrado por cualquier persona que disponga de la clave pública (transporte cifrado asimétrico).
  2. Cifrar un mensaje que puede ser descifrado por cualquier persona, pero que sólo puede ser cifrado por una persona; esto proporciona una firma digital.

Pruebas de corrección

Demostración mediante el pequeño teorema de Fermat

La prueba de la corrección de RSA se basa en el pequeño teorema de Fermat , que establece que a p − 1 ≡ 1 (mod p ) para cualquier entero a y primo p , sin dividir a . [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 )) .

Dado que λ ( pq ) = mcm ( p − 1, q − 1) es, por construcción, divisible tanto por p − 1 como por 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 demostrar que m edm (mod p ) , consideramos dos casos:

  1. Si m ≡ 0 (mod p ) , m es un múltiplo de p . Por lo tanto, m ed es un múltiplo de p . Por lo tanto, m ed ≡ 0 ≡ m (mod p ) .
  2. Si m 0 (mod p ) ,
    donde usamos el pequeño teorema de Fermat para reemplazar m p −1 mod p con 1.

La verificación de que m edm (mod q ) se realiza de forma completamente análoga:

  1. Si m ≡ 0 (mod q ) , m ed es un múltiplo de q . Por lo tanto, m ed ≡ 0 ≡ m (mod q ) .
  2. Si m 0 (mod q ) ,

Esto completa la prueba de que, para cualquier entero m y enteros e , d tales que ed ≡ 1 (mod λ ( pq )) ,

Notas

  1. ^ No podemos romper trivialmente RSA aplicando el teorema (mod pq ) porque pq no es primo.
  2. ^ En particular, la afirmación anterior es válida para cualquier e y d que satisfagan ed ≡ 1 (mod ( p − 1)( q − 1)) , ya que ( p − 1)( q − 1) es divisible por λ ( pq ) , y por lo tanto trivialmente también por p − 1 y q − 1 . Sin embargo, en las implementaciones modernas de RSA, es común usar un exponente privado reducido d que solo satisface la condición más débil, pero suficiente, ed ≡ 1 (mod λ ( pq )) .
  3. ^ Esto es parte del teorema del resto chino , aunque no es la parte significativa de dicho teorema.

Demostración mediante el teorema de Euler

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 el teorema de Euler .

Queremos demostrar que m edm (mod n ) , donde n = pq es un producto de dos números primos diferentes, y e y d son números enteros positivos que satisfacen ed ≡ 1 (mod φ ( n )) . Como e y d son positivos, podemos escribir ed = 1 + ( n ) para algún número entero no negativo h . Suponiendo que m es primo relativo a n , tenemos

donde la segunda última congruencia se sigue del teorema de Euler .

De manera más general, para cualquier e y d que satisfaga ed ≡ 1 (mod λ ( n )) , la misma conclusión se desprende de la generalización de Carmichael del teorema de Euler , que establece que m λ (n) ≡ 1 (mod n ) para todos los m relativamente primos a n .

Cuando m no es primo relativo con respecto a n , el argumento que acabamos de dar no es válido. Esto es altamente 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 bien m ≡ 0 (mod p ) o bien m ≡ 0 (mod q ) , y estos casos se pueden tratar utilizando la prueba anterior.

Relleno

Ataques contra RSA simple

Hay una serie de ataques contra RSA simple como se describe a continuación.

Esquemas de relleno

Para evitar estos problemas, las implementaciones prácticas de RSA suelen incorporar algún tipo de relleno aleatorio y estructurado en el valor m antes de cifrarlo. Este relleno garantiza que m no se encuentre en el rango de textos simples inseguros y que un mensaje determinado, una vez rellenado, se cifrará en uno de un gran número de posibles textos cifrados diferentes.

Los estándares como PKCS#1 han sido cuidadosamente diseñados para rellenar de forma segura los mensajes antes del cifrado RSA. Debido a que estos esquemas rellenan el texto simple m con una cierta cantidad de bits adicionales, el tamaño del mensaje M sin rellenar debe ser algo menor. Los esquemas de relleno RSA deben diseñarse cuidadosamente para evitar ataques sofisticados que pueden verse facilitados por una estructura de mensaje predecible. Las primeras versiones del estándar PKCS#1 (hasta la versión 1.5) utilizaban 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 elegido adaptativo . Además, en Eurocrypt 2000, Coron et al. [25] demostraron que para algunos tipos de mensajes, este relleno no proporciona un nivel de seguridad lo suficientemente alto. Las versiones posteriores del estándar incluyen el relleno de cifrado asimétrico óptimo (OAEP), que evita estos ataques. Por lo tanto, se debe utilizar OAEP en cualquier aplicación nueva y se debe reemplazar el relleno de PKCS#1 v1.5 siempre que sea posible. El estándar PKCS#1 también incorpora esquemas de procesamiento diseñados para brindar seguridad adicional a las firmas RSA, por ejemplo, el Esquema de Firma Probabilística para RSA ( RSA-PSS ).

Los esquemas de relleno seguros como RSA-PSS son tan esenciales para la seguridad de la firma de mensajes como para el cifrado de mensajes. Se concedieron dos patentes estadounidenses sobre PSS ( patente estadounidense 6.266.771 y patente estadounidense 7.036.014 ); 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 obstaculizado por las patentes. [ ¿ Investigación original? ] Nótese que el uso de diferentes pares de claves RSA para el cifrado y la firma es potencialmente más seguro. [26]

Seguridad y consideraciones prácticas

Utilizando el algoritmo del resto chino

Para lograr mayor eficiencia, muchas bibliotecas criptográficas populares (como OpenSSL , Java y .NET ) utilizan para el descifrado y la firma la siguiente optimización basada en el teorema del resto chino . [27] [ cita requerida ] Los siguientes valores se precalculan y 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: , , , [c] .
     
     
     
     

Esto es más eficiente que calcular la exponenciación elevando al cuadrado , aunque se deben calcular dos exponenciaciones modulares. La razón es que estas dos exponenciaciones modulares utilizan un exponente y un módulo más pequeños.

Factorización de enteros y el problema RSA

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 es inviable si se supone que ambos problemas son difíciles , es decir, que no existe un algoritmo eficiente para resolverlos. Para proporcionar seguridad contra el descifrado parcial puede ser necesario añadir un esquema de relleno seguro . [28]

El problema RSA se define como la tarea de tomar raíces e ésimas módulo de un compuesto n : recuperar un valor m tal que cm 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 RSA es factorizar el módulo n . Con la capacidad de recuperar factores primos, un atacante puede calcular el exponente secreto d a partir de una clave pública ( n , e ) , luego descifrar c utilizando el procedimiento estándar. Para lograr esto, un atacante factoriza n en p y q , y calcula mcm( p − 1, q − 1) que permite la determinación de d a partir 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 factorización de números enteros para una discusión de este problema.

La criba cuadrática de polinomios múltiples (MPQS) se puede utilizar para factorizar el módulo público n .

La primera factorización RSA-512, realizada en 1999, utilizó cientos de ordenadores y requirió el equivalente a 8.400 MIPS años, durante un tiempo transcurrido de unos siete meses. [29] En 2009, Benjamin Moody podía factorizar una clave RSA de 512 bits en 73 días utilizando únicamente software público (GGNFS) y su ordenador de sobremesa (un Athlon64 de doble núcleo con una CPU de 1.900 MHz). Se requirieron poco menos de 5 gigabytes de almacenamiento en disco y unos 2,5 gigabytes de RAM para el proceso de tamizado.

Rivest, Shamir y Adleman observaron [1] que Miller ha demostrado que, suponiendo la verdad de la hipótesis de Riemann extendida , encontrar d a partir de n y e es tan difícil como factorizar n en p y q (hasta una diferencia de tiempo polinomial). [30] Sin embargo, Rivest, Shamir y Adleman observaron, en la sección IX/D de su artículo, que no habían encontrado una prueba de que invertir RSA sea tan difícil como factorizar.

En 2020 , el mayor número RSA factorizado conocido públicamente tenía 829 bits (250 dígitos decimales, RSA-250 ). [31] Su factorización, mediante una implementación distribuida de última generación, tomó alrededor de 2700 años de CPU. En la práctica, las claves RSA suelen tener entre 1024 y 4096 bits de longitud. En 2003, RSA Security estimó que era probable que las claves de 1024 bits se volvieran descifrables en 2010. [32] En 2020, no se sabe si dichas claves se pueden descifrar, pero las recomendaciones mínimas se han trasladado a al menos 2048 bits. [33] En general, 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 ha demostrado que las claves de 512 bits son prácticamente descifrables en 1999, cuando se factorizó RSA-155 utilizando varios cientos de computadoras, y ahora se factorizan en unas pocas semanas utilizando hardware común. En 2011 se informó de exploits que utilizan certificados de firma de código de 512 bits que pueden haber sido factorizados. [34] Un dispositivo de hardware teórico llamado TWIRL , descrito por Shamir y Tromer en 2003, puso en duda la seguridad de las claves de 1024 bits. [32]

En 1994, Peter Shor demostró que una computadora cuántica (si alguna vez se pudiera crear una para ese propósito) sería capaz de factorizar el tiempo polinomial , rompiendo el RSA; véase el algoritmo de Shor .

Generación de clave defectuosa

Para encontrar los números primos grandes p y q se suelen probar números aleatorios del tamaño correcto con pruebas de primalidad probabilística que eliminan rápidamente prácticamente todos los números no primos.

Los números p y q no deben ser "demasiado cercanos", para que la factorización de Fermat para n no tenga éxito. Si pq es menor que 2 n 1/4 ( n = pq , que incluso para valores "pequeños" de 1024 bits de n es3 × 10 77 ), resolver p y q es trivial. Además, si p − 1 o q − 1 tiene solo factores primos pequeños, n se puede factorizar rápidamente mediante el algoritmo p − 1 de Pollard y, por lo tanto, dichos valores de p o q se deben descartar.

Es importante que el exponente privado d sea lo suficientemente grande. Michael J. Wiener demostró que si p está entre q y 2 q (lo cual es bastante típico) y d < n 1/4 /3 , entonces d se puede calcular de manera eficiente a partir de ne . [35]

No se conoce ningún ataque contra exponentes públicos pequeños como e = 3 , siempre que se utilice el relleno adecuado. El ataque de Coppersmith tiene muchas aplicaciones para atacar a RSA, específicamente si el exponente público e es pequeño y si el mensaje cifrado es corto y no tiene relleno. 65537 es un valor de uso común para  e ; este valor puede considerarse como un compromiso entre evitar posibles ataques de exponente pequeño 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 menores que 65537, pero no indica una razón para esta restricción.

En octubre de 2017, un equipo de investigadores de la Universidad 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 confiables (TPM) estaban afectados. Las claves RSA vulnerables se identifican fácilmente utilizando un programa de prueba que lanzó el equipo. [36]

Importancia de la generación de números aleatorios fuertes

Para generar los primos p y q se debe utilizar un generador de números aleatorios criptográficamente fuerte, que haya sido correctamente sembrado con la entropía adecuada. A principios de 2012, Arjen K. Lenstra , James P. Hughes, Maxime Augier, Joppe W. Bos, Thorsten Kleinjung y Christophe Wachter realizaron un análisis que comparaba millones de claves públicas obtenidas de Internet . Pudieron factorizar el 0,2 % de las claves utilizando únicamente el algoritmo de Euclides. [37] [38] [ ¿ Fuente autopublicada? ]

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 ′ = pq 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 factoriza tanto n como n ', comprometiendo totalmente ambas claves. Lenstra et al. señalan que este problema se puede minimizar utilizando una semilla aleatoria fuerte de longitud de bits el doble del nivel de seguridad deseado, o empleando una función determinista para elegir q dado p , en lugar de elegir p y q independientemente.

Nadia Heninger formó parte de un grupo que realizó un experimento similar. Utilizaron una idea de Daniel J. Bernstein para calcular el MCD de cada clave RSA n por 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 del MCD es de tamaño normal.

Heninger dice en su blog que las claves incorrectas se produjeron casi exclusivamente en aplicaciones integradas, incluidos "cortafuegos, enrutadores, dispositivos VPN, dispositivos de administración remota de servidores, impresoras, proyectores y teléfonos VOIP" de más de 30 fabricantes. Heninger explica que el problema del número primo compartido descubierto por los dos grupos es el resultado de situaciones en las que el generador de números pseudoaleatorios está mal inicializado y luego se vuelve a inicializar entre la generación del primer y el segundo número primo. El uso de semillas de entropía suficientemente alta obtenidas a partir de tiempos de pulsación de teclas o ruido de diodo electrónico o ruido atmosférico de un receptor de radio sintonizado entre estaciones debería resolver el problema. [39]

La generación de números aleatorios potentes 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 se distribuyen mediante RSA, un espía podría eludir RSA y adivinar las claves simétricas directamente.

Ataques de tiempo

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 con Secure Sockets Layer (SSL)). [40] Este ataque aprovecha la información filtrada por la optimización del teorema del resto chino utilizado por muchas implementaciones RSA.

Una forma de frustrar estos ataques es asegurar que la operación de descifrado tome una cantidad de tiempo constante para cada texto cifrado. Sin embargo, este enfoque puede reducir significativamente el rendimiento. En su lugar, la mayoría de las implementaciones de RSA utilizan una técnica alternativa conocida como cegamiento criptográfico . El cegamiento 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 ) , y por lo tanto 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 está correlacionado con el valor del texto cifrado de entrada, y por lo tanto el ataque de tiempo falla.

Ataques adaptativos de texto cifrado seleccionado

En 1998, Daniel Bleichenbacher describió el primer ataque práctico de texto cifrado adaptable contra mensajes cifrados RSA utilizando el esquema de relleno PKCS #1 v1 (un esquema de relleno aleatoriza y añade estructura a un mensaje cifrado RSA, de modo que es posible determinar si un mensaje descifrado es válido). Debido a las fallas del 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 demostrablemente seguros como Optimal Asymmetric Encryption Padding , y RSA Laboratories ha lanzado nuevas versiones de PKCS #1 que no son vulnerables a estos ataques.

Una variante de este ataque, denominada "BERserk", regresó en 2014. [41] [42] Afectó a la biblioteca criptográfica NSS de Mozilla, que era utilizada principalmente por Firefox y Chrome.

Ataques de análisis de canal lateral

Se ha descrito un ataque de canal lateral mediante el análisis de predicción de bifurcaciones (BPA). Muchos procesadores utilizan un predictor de bifurcaciones para determinar si es probable o no que se realice una bifurcación condicional en el flujo de instrucciones de un programa. A menudo, estos procesadores también implementan subprocesamiento simultáneo múltiple (SMT). Los ataques de análisis de predicción de bifurcaciones utilizan un proceso espía para descubrir (estadísticamente) la clave privada cuando se procesa con estos procesadores.

El análisis de predicción de ramificaciones simples (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 ramificaciones simples", [43] los autores del SBPA (Onur Aciicmez y Cetin Kaya Koc) afirman haber descubierto 508 de los 512 bits de una clave RSA en 10 iteraciones.

En 2010 se describió un ataque por falla de energía en las implementaciones de RSA. [44] [ ¿ fuente autopublicada? ] El autor recuperó la clave variando el voltaje de energía de la CPU fuera de los límites; esto provocó múltiples fallas de energía en el servidor.

Implementación complicada

Hay muchos detalles que tener en cuenta para implementar RSA de forma segura ( PRNG fuerte , exponente público aceptable, etc.). Esto hace que la implementación sea un desafío, hasta el punto en que el libro Practical Cryptography With Go sugiere evitar RSA si es posible. [45]

Implementaciones

Algunas bibliotecas de criptografía que brindan soporte para RSA incluyen:

Véase también

Notas

  1. ^ Es decir, los valores de m que son iguales a −1, 0 o 1 módulo p mientras que también son iguales a −1, 0 o 1 módulo q . Habrá más valores de m que tengan c = m si p  − 1 o q  − 1 tienen otros divisores en común con e  − 1 además de 2 porque esto da más valores de m tales que o respectivamente.
  2. ^ 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.
  3. ^ Si , entonces algunas [ aclaración necesaria ] bibliotecas calculan h como .

Referencias

  1. ^ abcdefg Rivest, R.; Shamir, A.; Adleman, L. (febrero de 1978). "Un método para obtener firmas digitales y criptosistemas de clave pública" (PDF) . Comunicaciones de la ACM . 21 (2): 120–126. CiteSeerX  10.1.1.607.2677 . doi :10.1145/359340.359342. S2CID  2873616. Archivado desde el original (PDF) el 27 de enero de 2023.
  2. ^ Smart, Nigel (19 de febrero de 2008). "Dr Clifford Cocks CB". Universidad de Bristol . Consultado el 14 de agosto de 2011 .
  3. ^ Castelvecchi, Davide (30 de octubre de 2020). "Un pionero de la computación cuántica advierte de la complacencia en materia de seguridad en Internet". Nature . 587 (7833): 189. Bibcode :2020Natur.587..189C. doi :10.1038/d41586-020-03068-9. PMID  33139910. S2CID  226243008.Entrevista de 2020 a Peter Shor .
  4. ^ Diffie, W.; Hellman, ME (noviembre de 1976). "Nuevas direcciones en criptografía". IEEE Transactions on Information Theory . 22 (6): 644–654. CiteSeerX 10.1.1.37.9720 . doi :10.1109/TIT.1976.1055638. ISSN  0018-9448. 
  5. ^ Rivest, Ronald. "Los primeros días de la RSA: historia y lecciones" (PDF) .
  6. ^ Calderbank, Michael (20 de agosto de 2007). "El criptosistema RSA: historia, algoritmo, números primos" (PDF) .
  7. ^ ab Robinson, Sara (junio de 2003). "RSA sigue guardando secretos tras años de ataques y recibe elogios por sus fundadores" (PDF) . SIAM News . 36 (5).
  8. ^ Cocks, CC (20 de noviembre de 1973). "Una nota sobre el cifrado no secreto" (PDF) . www.gchq.gov.uk . Archivado desde el original (PDF) el 28 de septiembre de 2018 . Consultado el 30 de mayo de 2017 .
  9. ^ Jim Sauerberg. "De cifrados de clave privada a pública en tres sencillos pasos".
  10. ^ Margaret Cozzens y Steven J. Miller. "Las matemáticas del cifrado: una introducción elemental". pág. 180.
  11. ^ Alasdair McAndrew. "Introducción a la criptografía con software de código abierto". pág. 12.
  12. ^ Surender R. Chiluka. "Criptografía de clave pública".
  13. ^ Neal Koblitz. "La criptografía como herramienta de enseñanza". Cryptologia, vol. 21, núm. 4 (1997).
  14. ^ "RSA Security lanza el algoritmo de cifrado RSA al dominio público". Archivado desde el original el 21 de junio de 2007. Consultado el 3 de marzo de 2010 .
  15. ^ ab Boneh, Dan (1999). "Veinte años de ataques al criptosistema RSA". Avisos de la American Mathematical Society . 46 (2): 203–213.
  16. ^ Criptografía aplicada, John Wiley & Sons, Nueva York, 1996. Bruce Schneier , pág. 467.
  17. ^ McKee, James; Pinch, Richard (1998). "Más ataques a los criptosistemas RSA asistidos por servidor". CiteSeerX 10.1.1.33.1333 . 
  18. ^ Un curso de teoría de números y criptografía, Textos de posgrado en matemáticas. N.º 114, Springer-Verlag, Nueva York, 1987. Neal Koblitz , segunda edición, 1994, pág. 94.
  19. ^ Dukhovni, Viktor (31 de julio de 2015). "Factores comunes en (p − 1) y (q − 1)". openssl-dev (Lista de correo).
  20. ^ Dukhovni, Viktor (1 de agosto de 2015). "Factores comunes en (p − 1) y (q − 1)". openssl-dev (Lista de correo).
  21. ^ Johnson, J.; Kaliski, B. (febrero de 2003). Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specification Version 2.1. Network Working Group. doi : 10.17487/RFC3447 . RFC 3447 . Consultado el 9 de marzo de 2016 .
  22. ^ Håstad, Johan (1986). "Sobre el uso de RSA con exponente bajo en una red de clave pública". Avances en criptología: actas de CRYPTO '85 . Apuntes de clase en informática. Vol. 218. págs. 403-408. doi :10.1007/3-540-39799-X_29. ISBN 978-3-540-16463-0.
  23. ^ Coppersmith, Don (1997). "Pequeñas soluciones para ecuaciones polinómicas y vulnerabilidades de RSA de bajo exponente" (PDF) . Revista de criptología . 10 (4): 233–260. CiteSeerX 10.1.1.298.4806 . doi :10.1007/s001459900030. S2CID  15726802. 
  24. ^ Goldwasser, Shafi ; Micali, Silvio (1982-05-05). "Cifrado probabilístico y cómo jugar al póquer mental manteniendo en secreto toda la información parcial". Actas del decimocuarto simposio anual de la ACM sobre teoría de la computación - STOC '82 . Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 365–377. doi :10.1145/800070.802212. ISBN 978-0-89791-070-5. Número de identificación del sujeto  10316867.
  25. ^ Coron, Jean-Sébastien; Joye, Marc; Naccache, David; Paillier, Pascal (2000). "Nuevos ataques al cifrado PKCS#1 v1.5". En Preneel, Bart (ed.). Avances en criptología — EUROCRYPT 2000. Apuntes de clase en informática. Vol. 1807. Berlín, Heidelberg: Springer. págs. 369–381. doi : 10.1007/3-540-45539-6_25 . ISBN . 978-3-540-45539-4.
  26. ^ "Algoritmo RSA".
  27. ^ "OpenSSL bn_s390x.c". Github . Consultado el 2 de agosto de 2024 .
  28. ^ Machie, Edmond K. (29 de marzo de 2013). Ataque de rastreo de seguridad de red y reacción en la red del Departamento de Defensa de los Estados Unidos. Trafford. p. 167. ISBN 978-1466985742.
  29. ^ Lenstra, Arjen; et al. (Grupo) (2000). "Factorización de un módulo RSA de 512 bits" (PDF) . Eurocrypt.
  30. ^ Miller, Gary L. (1975). "Hipótesis de Riemann y pruebas de primalidad" (PDF) . Actas del Séptimo Simposio Anual de la ACM sobre Teoría de la Computación . págs. 234–239.
  31. ^ Zimmermann, Paul (28 de febrero de 2020). "Factorización de RSA-250". Cado-nfs-discuss. Archivado desde el original el 28 de febrero de 2020. Consultado el 12 de julio de 2020 .
  32. ^ ab Kaliski, Burt (6 de mayo de 2003). "TWIRL y tamaño de clave RSA". RSA Laboratories . Archivado desde el original el 17 de abril de 2017. Consultado el 24 de noviembre de 2017 .
  33. ^ Barker, Elaine; Dang, Quynh (22 de enero de 2015). "Publicación especial NIST 800-57 Parte 3 Revisión 1: Recomendación para la gestión de claves: Guía de gestión de claves específica de la aplicación" (PDF) . Instituto Nacional de Normas y Tecnología . p. 12. doi :10.6028/NIST.SP.800-57pt3r1 . Consultado el 24 de noviembre de 2017 .
  34. ^ Sandee, Michael (21 de noviembre de 2011). "Certificados RSA-512 utilizados de forma indebida". Blog de Fox-IT International .
  35. ^ Wiener, Michael J. (mayo de 1990). "Criptoanálisis de exponentes secretos RSA cortos" (PDF) . IEEE Transactions on Information Theory . 36 (3): 553–558. doi :10.1109/18.54902. S2CID  7120331.
  36. ^ Nemec, Matus; Sys, Marek; Svenda, Petr; Klinec, Dusan; Matyas, Vashek (noviembre de 2017). "El regreso del ataque de Coppersmith: factorización práctica de módulos RSA ampliamente utilizados" (PDF) . Actas de la Conferencia ACM SIGSAC de 2017 sobre seguridad informática y de las comunicaciones . CCS '17. doi :10.1145/3133956.3133969.
  37. ^ Markoff, John (14 de febrero de 2012). "Se encuentra un fallo en un método de cifrado en línea". The New York Times .
  38. ^ Lenstra, Arjen K.; Hughes, James P.; Augier, Maxime; Bos, Joppe W.; Kleinjung, Thorsten; Wachter, Christophe (2012). "Ron estaba equivocado, Whit tiene razón" (PDF) .
  39. ^ Heninger, Nadia (15 de febrero de 2012). "Nueva investigación: no hay necesidad de entrar en pánico por las claves factorizables; basta con tener cuidado con las P y las Q". Libertad para experimentar .
  40. ^ Brumley, David; Boneh, Dan (2003). "Los ataques de sincronización remota son prácticos" (PDF) . Actas de la 12.ª Conferencia sobre el Simposio de Seguridad de USENIX . SSYM'03.
  41. ^ "El error 'BERserk' descubierto en la biblioteca de cifrado NSS de Mozilla afecta a Firefox y Chrome". 25 de septiembre de 2014. Consultado el 4 de enero de 2022 .
  42. ^ "Falsificación de firma RSA en NSS". Mozilla .
  43. ^ Acıiçmez, Onur; Koç, Çetin Kaya; Seifert, Jean-Pierre (2007). "Sobre el poder del análisis de predicción de bifurcaciones simples". Actas del 2º Simposio ACM sobre seguridad de la información, las computadoras y las comunicaciones . ASIACCS '07. págs. 312–320. CiteSeerX 10.1.1.80.1438 . doi :10.1145/1229285.1266999. 
  44. ^ Pellegrini, Andrea; Bertacco, Valeria; Austin, Todd (2010). "Ataque basado en fallos de autenticación RSA" (PDF) .
  45. ^ Isom, Kyle. «Criptografía práctica con Go» . Consultado el 4 de enero de 2022 .

Lectura adicional

Enlaces externos