¿Existe alguna ventaja en el uso de pares de claves separados para el cifrado y la firma? [duplicar]

3

Supongamos que estamos diseñando un protocolo binario para el intercambio de mensajes entre dispositivos. Parte del mensaje estará cifrado RSA y también habrá un bloque de firma RSA en el mensaje.

¿Hay alguna ventaja en el uso de dos pares de claves separados, uno para el cifrado y otro para la firma? Esto se opone a usar los mismos pares de claves para el cifrado y la firma.

Para aclarar:

Opción 1. El dispositivo A tiene par de llaves A y el dispositivo B tiene par de llaves B. Estos se utilizan tanto para el cifrado como para la firma.

Opción 2. El dispositivo A tiene pares de llaves Aenc y Asign y el dispositivo B tiene pares de llaves Benc y Bsign, y estos pares de llaves se utilizan para el cifrado y la firma respectivamente.

    
pregunta Andrew Savinykh 04.10.2016 - 22:40
fuente

1 respuesta

4

Definitivamente . Hay dos ventajas principales de tener un par de llaves para el cifrado y otro par de llaves para la firma.

La primera razón es que usted querrá mantener copias de seguridad de las claves caducadas que se han utilizado para el cifrado, que no es el caso de las claves de firma. Normalmente almacena los datos cifrados cifrados y los descifra para verlos. Si pierde una clave privada de cifrado, perderá datos. Si pierde una clave privada de firma, no perderá nada (ya que la clave pública estará en un lugar público, ¿no?). Nuestro oso favorito hizo una gran discusión sobre este punto en un responder .

Una segunda razón es que un protocolo de cifrado puede estar roto. Es plausible que solo se rompa la parte de cifrado o solo la parte de firma del protocolo (por ejemplo, mediante datos de marca de agua dentro de un texto cifrado). Si el cifrado RSA está roto y tiene 2 claves, debe revocar todas las claves de cifrado (y sustituirlas por otro protocolo), pero no necesita hacer nada respecto a las claves de firma. Lo contrario (la firma está rota) también se mantiene.

Debido a la demanda popular (en los comentarios), defenderé el segundo punto anterior presentando dos escenarios: uno en el que se puede romper una firma asimétrica sin romper el cifrado, y uno en el que se puede romper el cifrado sin rompiendo el algoritmo de firma. Vamos a rockear:

(No soy un teórico, por lo tanto, puede haber algo mal si lo miras con suficiente pedantería, no tengas miedo de señalarlo).

Rompiendo la firma sin romper el cifrado

Suponiendo que la firma se realiza de la siguiente manera (es una forma común para el cifrado asimétrico):

encrypt(privkey, hash(plaintext))

El propósito de un atacante es poder firmar un mensaje de su propia creación con mi clave. Puede robar la llave o atacar el algoritmo. Si el atacante encuentra una manera de encontrar colisiones de manera eficiente en la función hash() , puede tomar un mensaje previamente firmado por mí para recuperar el hash (descifrando la firma) y crear un mensaje propio que colisione con el mismo valor de hash.

En otras palabras, al romper hash() y tener acceso a al menos uno de los mensajes firmados por mí, el atacante anula el algoritmo de firma sin tocar encrypt() .

Rompiendo el cifrado sin romper la firma

Una forma común de romper el cifrado es poder adivinar la clave en función de la información del texto cifrado y del texto sin formato. Esto a menudo se denomina marca de agua (aunque se usa más a menudo contra el cifrado simétrico). El cifrado se realizará por:

encrypt(pubkey, plaintext)

Ahora, supongamos que el atacante me enviará varios cyphertexts cifrados con mi clave pública. Y que me convencerá de revelarle el contenido del texto en claro que desencripté usando mi clave privada. Esto no es nada descabellado: imagina correos encriptados con restablecimientos de contraseña, descifraré el correo y enviaré el texto sin formato al atacante.

Ahora, si es posible adivinar (con alta probabilidad), en función de ciertos bits en el texto cifrado, que cierto bit en el texto plano será 1 o 0 si otro bit en la clave privada es 1 o 0, entonces Tenemos una alta probabilidad de que descubramos un solo bit de la clave privada. Esto es como un ataque contra el modelo S-BOX del algoritmo si hubiéramos estado hablando de cifrado simétrico.

(El párrafo anterior es considerablemente inverosímil. Pensar en RSA como usar bits no es muy realista. Estoy usando bits porque es la forma en que la marca de agua funciona con los cifrados de bloques, pero puedes pensar que es cualquier ataque estadístico en RSA)

Repitiendo el procedimiento anterior varias veces, el atacante puede recuperar mi clave privada, y el cifrado está roto porque ahora puede descifrar todos los mensajes que me han enviado.

¿Por qué no funciona esto para firmas? Debido a la misma función hash() que la anterior. Si el hash es criptográfico, debería ser imposible determinar la ubicación de los bits en el texto sin formato en función de la salida del hash. Por lo tanto, si hash() es correcto pero el algoritmo de cifrado puede ser atacado con marcas de agua, podemos romper el cifrado sin romper el algoritmo de firma.

Pero espere, ¿no se utilizan hashes criptográficos (en el texto plano) durante el cifrado? Ekhm ... no, la encriptación necesita preservar todos los datos para que sea posible descifrarlos. Un hash perderá algunos datos, por lo tanto, no se puede utilizar de la misma forma que en el algoritmo de firma en el cifrado.

Por supuesto, estos dos escenarios son no los únicos escenarios posibles. Pero, ¿son los escenarios plausibles , con suficiente atención como para justificar el uso de 2 pares de llaves (uno para firmar y otro para cifrado)

    
respondido por el grochmal 04.10.2016 - 22:52
fuente

Lea otras preguntas en las etiquetas