RSA bytes máximos para cifrar, ¿comparación con AES en términos de seguridad?

21

¿Cuál es el número máximo de bytes para cifrar un mensaje de texto simple usando RSA que sea razonablemente seguro y eficiente y que AES sería mejor para el mismo tamaño en bytes? Por cierto, el cifrado no tiene que ser público. Me pregunto si AES es tan bueno en un mensaje corto como en un documento grande. Básicamente, el mensaje o documento se enviaría encriptado, pero la clave nunca se haría pública. Supongo que eso también anularía el propósito de RSA, pero he leído varias veces en línea que RSA es bueno para mensajes cortos y AES es bueno para mensajes largos.

    
pregunta pandoragami 30.03.2013 - 06:23
fuente

5 respuestas

41

RSA, como se define en PKCS # 1 , cifra los "mensajes" de tamaño limitado. Con el "relleno v1.5" y una clave RSA de 2048 bits, el tamaño máximo de los datos que se pueden cifrar con RSA es de 245 bytes. No más.

Cuando "encripta los datos con RSA", en la práctica, en realidad está cifrando una clave simétrica aleatoria con RSA, y luego encripta los datos con un algoritmo de encriptación simétrico, que no está limitado en tamaño. Así es como funciona en SSL , S / MIME , OpenPGP ... Regularmente, algunas personas sugieren hacer" solo RSA "dividiendo el introduzca el mensaje en fragmentos de 245 bytes y cifre cada uno de ellos más o menos por separado. Esta es una mala idea porque:

  • Puede haber debilidades sustanciales en la forma en que los datos se dividen y luego se reconstruyen. No hay un estándar bien estudiado para eso.
  • Cada fragmento, cuando está cifrado, crece un poco (con una clave de 2048 bits, los 245 bytes de datos se convierten en 256 bytes); cuando se procesan grandes cantidades de datos, la sobrecarga de tamaño se vuelve significativa.
  • El descifrado de un mensaje grande puede llegar a ser intolerablemente caro.

Al cifrar datos con un cifrado de bloque simétrico, que utiliza bloques de bits n , algunos problemas de seguridad comienzan a aparecer cuando la cantidad de datos cifrados con una sola clave se acerca a 2 < sup> n / 2 bloques, es decir, n*2n/2 bits. Con AES, n = 128 (AES-128, AES-192 y AES-256 utilizan bloques de 128 bits). Esto significa un límite de más de 250 millones de terabytes, que es lo suficientemente grande como para no ser un problema. Es precisamente por eso que AES se definió con bloques de 128 bits, en lugar de los bloques de 64 bits más comunes (en ese momento): el tamaño de los datos es prácticamente ilimitado.

    
respondido por el Thomas Pornin 30.03.2013 - 14:50
fuente
34

Comparar los dos directamente es un poco como comparar un tractor con un tren: ambos son vehículos pero tienen una función y construcción completamente diferentes.

RSA es un cifrado asimétrico. Es ideal para el intercambio seguro de mensajes a través de una red no confiable, ya que la clave pública puede ser conocida por todos; un mensaje cifrado con la clave pública solo puede ser descifrado por la clave privada. Como tal, si dos partes conocen las claves públicas de la otra, pueden intercambiar mensajes de forma segura. Esto significa que no se debe transmitir información secreta, siempre que se mantengan autenticidad y integridad . Afortunadamente, RSA proporciona un método para generar firmas en los datos, lo que ayuda a probar que es auténtico. Dado un mensaje firmado por una clave privada, es posible verificar esa firma usando la clave pública correspondiente.

Como regla general, solo puede cifrar datos tan grandes como la longitud de la clave RSA. Por lo tanto, si tiene una clave RSA de 4096 bits, solo puede cifrar mensajes de hasta 4096 bits de longitud. No solo eso, sino que es increíblemente lento. RSA no está diseñado como un cifrado de transporte de datos a toda velocidad.

AES es un cifrado de bloque simétrico, y es increíblemente rápido. El texto plano se divide en fragmentos denominados bloques, y cada bloque se cifra en una cadena. Hay diferentes maneras de hacer esto, pero una común se llama Cipher Block Chaining, o CBC para abreviar. Esto permite tamaños de mensaje teóricamente infinitos. Sin embargo, los cifrados simétricos como AES requieren una clave secreta para intercambiarse primero. A diferencia de RSA, la clave compartida debe permanecer desconocida para los atacantes, por lo que debe proporcionar autenticidad, integridad y secreto. Eso es difícil de hacer directamente.

Lo que tenderá a encontrar es que ambos se implementan juntos, de manera que RSA se usa para intercambiar la clave por un cifrado de bloque como AES:

  1. Alice y Bob se conocen las claves públicas de RSA. En general, estos se intercambian fuera de banda, p. a través de un certificado que se implementa como parte de su sistema operativo.
  2. Alice elige una clave aleatoria de 256 bits para AES y la cifra con la clave pública de Bob. Ella firma este mensaje con su clave privada y se lo envía a Bob.
  3. Bob usa la clave pública de Alice para verificar la firma. Luego usa su clave privada para descifrar el mensaje.
  4. Eve (un intruso) ha visto el mensaje cifrado, pero no puede descifrarlo sin conocer la clave privada de Bob. Ella tampoco puede alterar el mensaje, ya que haría que la firma fuera incorrecta. No puede volver a generar una firma válida sin conocer la clave privada de Alice.
  5. Alice y Bob ahora comparten una clave secreta de 256 bits, y la usan para cifrar mensajes usando un cifrado simétrico, como AES.

Esto satisface algunos requisitos:

  • La conversación puede ocurrir en una red no confiable sin que un atacante pueda leer los mensajes.
  • El intercambio de claves de sesión se puede realizar de manera segura, es decir, la autenticidad y la integridad se mantienen en la clave.
  • El rendimiento del cifrado y descifrado de los datos de conversación reales es muy bueno.

En términos de nivel de seguridad, realmente no tiene mucho sentido comparar RSA y AES. Hacen diferentes trabajos. Actualmente asumimos que las claves AES de 128 bits son seguras y que las claves RSA de 2048 bits son seguras, pero esto depende completamente de los requisitos de seguridad individuales. El uso de AES de 256 bits y las claves RSA de 4096 bits debería ser más que suficiente para la próxima década, suponiendo que la implementación sea sólida.

Tenga en cuenta que todo esto es una simplificación, ya que hay muchas advertencias y detalles involucrados, y describir e intercambiar RSA como "encriptación" no es estrictamente correcto, pero en general, esto debe ser una visión general razonable de alto nivel de la forma en que funcionan los dos tipos de criptografía.

    
respondido por el Polynomial 30.03.2013 - 11:25
fuente
3

Una razón por la que normalmente no se usa RSA para grandes cantidades de datos se debe al rendimiento: tanto RSA como AES son seguros para grandes y pequeñas cantidades de datos (cuando se implementan correctamente), pero RSA es mucho más lento.

En los casos en que la clave pública crypto tiene sentido, pero se necesita más rendimiento, se puede implementar un sistema híbrido que aprovecha ambos.

    
respondido por el Adam Caudill 30.03.2013 - 09:53
fuente
2

AES es un algoritmo de clave simétrica. RSA es asimétrica. Si bien ambos son para encriptación, a menudo se usan de diferentes maneras, por lo que es difícil compararlos en términos de eficiencia o fortaleza, ya que el propósito de usar uno contra el otro probablemente sería un factor determinante mayor en el que uno o clase de se utiliza el cifrado.

Es posible que desee comenzar con esta otra pregunta: Encryption - ¿Debo utilizar RSA o AES?

    
respondido por el Eric G 30.03.2013 - 06:59
fuente
1

De acuerdo con el paquete criptográfico GoLang "El mensaje no debe ser más largo que el módulo público menos 11 bytes". enlace

    
respondido por el Andrew Watson 20.11.2014 - 04:01
fuente

Lea otras preguntas en las etiquetas