¿Qué sucede cuando encripto algo con mi clave pública RSA?

Oct 06 2020

Sé que cifrar algo con mi clave privada se usa para firmar. Para demostrar que el mensaje realmente proviene de mí.

Pero, ¿qué pasa si firmo algo con mi clave pública ? Eso significaría que solo yo podría descifrarlo con mi clave privada .

Supongamos que hice esto y envié mi texto cifrado (cifrado con mi clave pública) a alguien. ¿Podrá descifrarlo?

Respuestas

13 mti2935 Oct 06 2020 at 19:30

Existe la idea errónea de que firmar un mensaje es lo mismo que cifrar el mensaje con la clave privada . Esta noción es fundamentalmente incorrecta, como señaló Thomas Pornin en Si la clave pública no se puede utilizar para descifrar algo cifrado por la clave privada, ¿cómo funcionan las firmas digitales? . Como explica Pornin, el cifrado / descifrado y la firma / verificación son de hecho dos algoritmos diferentes. Se puede usar una clave privada para descifrar un mensaje que fue cifrado usando la clave pública correspondiente, o para firmar un mensaje; pero no se puede utilizar una clave privada para cifrar un mensaje.

Siguiendo la misma lógica, la noción de firmar un mensaje con la clave pública también es fundamentalmente incorrecta. Se puede utilizar una clave pública para cifrar un mensaje o para verificar una firma realizada en un mensaje utilizando la clave privada correspondiente; pero no se puede utilizar una clave pública para firmar un mensaje.

7 kelalaka Oct 06 2020 at 21:09

Aquí hay mucha terminología de mezcla. En resumen, la firma RSA no es el descifrado RSA de Cornell CS.

RSA es una permutación de trampilla, desafortunadamente, que puede usarse tanto para encriptación como para firma. Esto crea una confusión común.

En primer lugar, aunque RSA se puede utilizar para el cifrado, nosotros no. Preferimos el cifrado híbrido donde se usa un criptosistema de clave pública para el intercambio de claves y la clave se usa en el algoritmo simétrico. DHKE-AES AES y RSA-KEM AES son ejemplos.

Si uno realmente quiere enviar un mensaje con encriptación RSA, debe olvidarse de usar el libro de texto RSA, que no usa un mecanismo de relleno para estar seguro. PKCS # 1 v1.5 y el relleno OAEP se pueden utilizar para el cifrado RSA. Lo último es preferible ya que lo primero es difícil de implementar correctamente y causó muchos ataques .

Si desea firmar un mensaje, debe utilizar el esquema de firma probabilística (PSS). Y cuando firmamos, no firmamos el mensaje, firmamos el hash del mensaje. Esto es necesario ya que el mensaje puede ser muy largo y como prueba de seguridad.

¿Qué sucede cuando encripto algo con mi clave pública RSA?

Si lo encripta con la clave pública sin relleno, el ataque de raíz cúbica funciona si la clave pública es 3. Ahora olvídese del cifrado sin relleno. Con el relleno correcto, usted mismo ha enviado el mensaje, nada más.

Sé que cifrar algo con mi clave privada se usa para firmar. Para demostrar que el mensaje realmente proviene de mí.

Pero, ¿qué pasa si firmo algo con mi clave pública? Eso significaría que solo yo podría descifrarlo con mi clave privada.

Las claves públicas son pequeñas y se supone que son conocidas si realmente las usa para la firma, esto significa que hay una falsificación de firma digital . Un atacante toma su clave pública (e,n)y produce una falsificación de firma.

La terminología correcta no es descifrado, es la verificación de la firma. Para firmas, tenemos signy verifyfunciones.

Supongamos que hice esto y le envié mi texto cifrado (cifrado con mi clave pública) a alguien. ¿Podrá descifrarlo?

Para las firmas, el descifrado no es la operación. La verificación y la falsificación son las operaciones. Si usa la clave pública, harán falsificaciones.

Nota final: aunque RSA permite el cifrado y las firmas digitales, no usamos la misma clave para las diferentes operaciones. Necesita dos conjuntos diferentes para esto en RSA.

Para el lector curioso, aquí el artículo de Dan Boneh sobre los ataques RSA.

  • Veinte años de ataques al criptosistema RSA
TheodoreNorvell Oct 08 2020 at 06:27

Asumiré que RSA tiene las propiedades de seguridad que esperamos que tenga. En particular, asumiré que, si alguien conoce un mensaje p, una clave pública pubKey y el valor de enc (p, pubKey), entonces será difícil para ellos calcular la clave privada correspondiente, priKey. E, incluso si tienen muchos pares de texto sin formato / texto cifrado, su clave privada seguirá siendo difícil de calcular. Difícil de calcular aquí significa que necesitarían mucho tiempo o mucho hardware o ambos. (No hay pruebas de esta suposición, pero parece ser cierto que uno conoce una forma de romper RSA cuando se usan suficientes bits).

Suponga que cifra (en lugar de firmar) un mensaje m con su clave pública y envía a alguien el resultado enc (m, pubKey). Y suponga que ellos también conocen su clave pública. De la suposición en el primer párrafo, con m en el papel de p, su clave privada estará segura. E incluso si de alguna manera me conocen, aún estará seguro.

Firmar generalmente significa encriptar un hash de su mensaje con su clave privada, es decir, envía (m, s) donde s = enc (h (m), privKey). Luego, el destinatario con su clave pública puede verificar que dec (s, pubKey) = h (m), lo que significa que s es enc (h (m), privKey) y por lo tanto (casi con certeza) debe haber sido calculado por alguien que sepa privKey.

(Esta cadena de inferencia en el párrafo anterior en realidad se basa en una propiedad de RSA y h que no se indicó en el primer párrafo, es decir, que, si alguien conoce pubKey, pero no privKey, es difícil para ellos calcular un par ( m, s) tal que dec (s, pubKey) = h (m). Pero esto es completamente irrelevante porque la pregunta es sobre la firma con la clave pública).

Si firma por error con su clave pública, envía (m, enc (h (m), pubKey)). Ahora el destinatario o el que escucha a escondidas sabrá h (m), enc (h (m), pubKey) y, presumiblemente, pubKey. Esta es la misma situación que se describe en el primer párrafo con h (m) desempeñando el papel de p. Entonces, nuevamente, su clave privada está segura. (El destinatario también conoce m, pero saber m no debería ser de ninguna ayuda a menos que el mensaje diga algo como "mi clave privada es ...")