El ataque de Wiener , llamado así por el criptólogo Michael J. Wiener, es un tipo de ataque criptográfico contra RSA . El ataque utiliza la representación de fracciones continuas para exponer la clave privada d cuando d es pequeño.
Los personajes ficticios Alice y Bob son personas que quieren comunicarse de forma segura. Más específicamente, Alice quiere enviar un mensaje a Bob que solo Bob puede leer. Primero Bob elige dos primos secretos p y q . Luego calcula el módulo RSA N = pq . Este módulo RSA se hace público junto con el exponente de cifrado e . N y e forman el par de claves públicas ( e , N ) . Al hacer pública esta información, cualquiera puede cifrar mensajes a Bob. El exponente de descifrado d satisface ed ≡ 1 (mod λ ( N )) , donde λ ( N ) denota la función de Carmichael , aunque a veces se utiliza φ ( N ), la función totient de Euler (nota: este es el orden del grupo multiplicativo ( Z / N Z ) × , que no es necesariamente un grupo cíclico). El exponente de cifrado e y λ ( N ) también deben ser primos entre sí para que haya una inversa modular . La factorización de N y la clave privada d se mantienen en secreto, de modo que solo Bob puede descifrar el mensaje. Denotamos el par de claves privadas como ( d , N ) . El cifrado del mensaje M está dado por C ≡ M e (mod N ) y el descifrado del texto cifrado C está dado por C d ≡ ( M e ) d ≡ M ed ≡ M (mod N ) (utilizando el pequeño teorema de Fermat ).
Utilizando el algoritmo euclidiano , se puede recuperar eficientemente la clave secreta d si se conoce la factorización de N. Al tener la clave secreta d , se puede factorizar eficientemente el módulo de N. [1]
En el criptosistema RSA , Bob podría tender a usar un valor pequeño de d , en lugar de un número aleatorio grande para mejorar el rendimiento de descifrado RSA . Sin embargo, el ataque de Wiener muestra que elegir un valor pequeño para d dará como resultado un sistema inseguro en el que un atacante puede recuperar toda la información secreta, es decir, romper el sistema RSA . Esta ruptura se basa en el teorema de Wiener, que se cumple para valores pequeños de d . Wiener ha demostrado que el atacante puede encontrar d de manera eficiente cuando d < 1/3 N 1/4 . [2]
El artículo de Wiener también presentó algunas contramedidas contra su ataque que permiten un descifrado rápido. A continuación se describen dos técnicas.
Elección de una clave pública grande : reemplace e por e ′, donde e ′ = e + k ⋅ λ ( N ) para algún valor grande de k . Cuando e ′ es suficientemente grande, es decir, e ′ > N 3/2 , entonces el ataque de Wiener no se puede aplicar independientemente de lo pequeño que sea d .
Utilizando el teorema del resto chino : supongamos que uno elige d tal que tanto d p ≡ d (mod ( p − 1)) como d q ≡ d (mod ( q − 1)) son pequeños pero d en sí mismo no lo es, entonces se puede realizar un descifrado rápido de C de la siguiente manera:
Tenga en cuenta que
donde G = mcd( p − 1, q − 1) .
Como ed ≡ 1 (mod λ ( N )) , existe un entero K tal que
Definiendo k = K/mcd( K , G ) y g = GRAMO/mcd( K , G ) , y sustituyendo en lo anterior se obtiene:
Dividido por dpq :
Entonces, mi/pq es un poco más pequeño que a/escaño , y el primero se compone enteramente de información pública. Sin embargo, todavía se requiere un método de verificación [ aclaración necesaria ] y de conjeturas.
Mediante el uso de manipulaciones algebraicas y de identidades simples , se puede comprobar la precisión de una suposición . [1]
Sea N = pq con q < p < 2 q . Sea d < 1/3 Número 1/4 .
Dado ⟨ N , e ⟩ con ed ≡ 1 (mod λ ( N )) , el atacante puede recuperar eficientemente d . [2] [ verificación fallida ]
Supongamos que las claves públicas son ⟨ N , e ⟩ = ⟨90581, 17993⟩ . El ataque debería determinar d . Al usar el teorema de Wiener y fracciones continuas para aproximar d , primero tratamos de encontrar la expansión en fracciones continuas de mi/norte . Nótese que este algoritmo encuentra fracciones en sus términos más bajos. Sabemos que
De acuerdo con la expansión de fracciones continuas de mi/norte , todos convergentes a/dson :
Podemos verificar que el primer convergente no produce una factorización de N . Sin embargo, el convergente 1/5 rendimientos
Ahora, si resolvemos la ecuación
entonces encontramos las raíces que son x = 379; 239 . Por lo tanto hemos encontrado la factorización
Nótese que, para el módulo N = 90581 , el teorema de Wiener funcionará si
La prueba se basa en aproximaciones utilizando fracciones continuas. [2]
Como ed = 1 (mod λ ( N )) , existe un k tal que ed − kλ ( N ) = 1 . Por lo tanto
Sea G = mcd( p − 1, q − 1) ; note que si se utiliza φ ( N ) en lugar de λ ( N ), entonces la prueba se puede reemplazar con G = 1 y φ ( N ) reemplazado con λ ( N ).
Luego multiplicando por1/GRAMO ,
Por lo tanto ,a/Dios es una aproximación de mi/φ ( N ) . Aunque el atacante no conoce φ ( N ), puede usar N para aproximarlo. De hecho, dado que φ ( N ) = N − p − q + 1 y p + q − 1 < 3 √ N , tenemos:
Utilizando N en lugar de φ ( N ) obtenemos:
Ahora, kλ ( N ) = ed − 1 < ed , por lo que kλ ( N ) < ed . Como e < λ ( N ) , por lo que kλ ( N ) < ed < λ ( N ) d , obtenemos:
Dado que k < d y d < 1/3 N 1/4 . De ahí obtenemos:
Dado que d < 1/3 N 1/4 , 2 d < 3 d , entonces 2 d < 3 d < N 1/4 , obtenemos:
De (1) y (2), podemos concluir que
Si | x − a/b | < 1/2b2 , entonces a/b es un convergente de x , por lo tantoa/Dios aparece entre los convergentes de mi/norte . Por lo tanto, el algoritmo eventualmente encontrará a/Dios . [ se necesita más explicación ]