RSA: ¿Es seguro ir sin relleno si la longitud del mensaje == longitud de la clave?

0

He estado leyendo sobre el algoritmo, y he visto que varios ataques contra RSA de libros de texto se basan en el cifrado de mensajes más cortos y en la comprobación del resultado. Si el relleno hace lo que creo que hace (expandir el mensaje para que tenga la misma longitud que la clave), ¿es seguro renunciar al relleno si se garantiza que el mensaje ya tiene la longitud de la clave?

Por lo que sé, algunos esquemas de relleno introducen caracteres aleatorios, así que mi instinto me dice que de todos modos es necesario prevenir ataques contra texto sin formato.

¿Debo buscar un tamaño de mensaje más pequeño y agregar relleno? ¿O es seguro usar m == n y sin relleno?

    
pregunta Lukeyb 08.06.2017 - 10:24
fuente

2 respuestas

7

Cuando cifras un mensaje usando RSA, se necesita relleno para asegurar varias propiedades:

  1. Cifrar el mismo mensaje dos veces debe generar resultados diferentes, para evitar un ataque de texto simple elegido. Esta es la razón por la que los rellenos son aleatorios.
  2. RSA conserva algo de estructura, el relleno debe eliminar esa estructura.
  3. Cuando un atacante manipula el texto cifrado, debes rechazar esa falsificación de una manera que evite que el atacante se entere de nada.

    Muchos rellenos antiguos, como PKCS # 1v1.5 no aseguran esto, y por lo tanto están rotos para muchas aplicaciones. Deberías usar el relleno OAEP.

Alternativamente, puedes cifrar un número aleatorio del mismo tamaño que el módulo con RSA y usar su hash como clave para el cifrado simétrico (por ejemplo, AES-GCM). Esto se conoce como RSA-KEM y no necesita ningún tipo de relleno. Produce textos cifrados más grandes pero es más fácil de implementar.

    
respondido por el CodesInChaos 08.06.2017 - 10:42
fuente
0

Como CodesInChaos mencionó, el relleno destruye la propiedad homomórfica de RSA, que recibe dos mensajes (incluso muy largos) m1, m2 y sus correspondientes textos cifrados c1, c2, luego puede falsificar un tercer texto cifrado válido c '= c1 * c2.

Sin relleno u otras precauciones, el receptor no puede decir si pretendía enviar m1, m2 o m1 * m2.

    
respondido por el Nils Q. 08.06.2017 - 11:59
fuente

Lea otras preguntas en las etiquetas