No con el "libro de texto" RSA, donde codifica su mensaje como un número grande y calcula directamente el texto cifrado c del texto del mensaje my la clave pública (e, n) con c = m^e mod n
y descifra utilizando la clave secreta (d , n) como m = c^d mod n
.
Pero con RSA real, definitivamente sí como se introduce la aleatoriedad.
Un esquema común (estándar RSA ISO, que es un cifrado híbrido) es crear primero un número aleatorio largo (por ejemplo, si utiliza un RSA de 2048 bits que es n es 2048 bits, elija un número aleatorio (hasta 2048) bits), que se convertirá en su mensaje RSA m rsa . Este mensaje RSA se cifrará de forma asimétrica. A continuación, creará un hash criptográfico (p. ej., SHA-256) de este valor aleatorio para crear un valor 256- clave simétrica de bits. Su mensaje real se cifrará con la clave simétrica (utilizando, por ejemplo, AES-256-CBC) y estos dos textos cifrados se adjuntan.
Concedido en la práctica, el esquema de encriptación es un poco más complicado; por ejemplo, un protocolo como OAEP se utiliza para proporcionar autenticación de mensaje adicional para evitar ataques de texto cifrado adaptados más sofisticados contra un oráculo de descifrado ( que proporcionan los servidores HTTPS). De hecho, como señaló CodesInChaos, usar un buen esquema de relleno (como OAEP) directamente para un mensaje corto le permite aplicar RSA directamente al mensaje breve rellenado.
Aparte del relleno de cifrado asimétrico óptimo (OAEP)
OAEP funciona como se muestra en el diagrama a continuación. Para concretar, supongamos RSA de 2048 bits (que significa n = 2048 bits) y sea H la función hash SHA-256 y G sea una función de generación de máscara basada en una función de hash (que esencialmente crea un hash de la longitud deseada de N-k0 bits comenzando con SHA-256). La elección de la función hash significa que la longitud de r (e Y) es k0 = 256 bits. También tenga en cuenta que el ⊕ rojo (círculos con más) significa XOR .
Entonces tenemos un mensaje corto m (de longitud n-k0-k1 que es más corto que n-k0 = 2048-256 = 1792 bits) que queremos cifrar directamente mediante RSA. Creamos una versión acolchada m pad para que tenga exactamente n-k0 bits de longitud (el pad tendrá una longitud de k1 bits y comenzará con un 1 seguido de todos los ceros). Creamos un número de k0 = 256 bits al azar y lo llamamos r. Calculamos G (r) y XOR este valor con el mensaje rellenado y se convierte en X. Luego toma X y calcula H (X) y XOR este con r para proporcionar Y. Luego con su mensaje OAEP rellenado (la concatenación de X y Y), puede aplicar directamente el cifrado RSA.
O para resumir X = m pad ⊕ G (r) e Y = H (X) r, con el mensaje OAEP en RSA que es la concatenación (X, Y). Para el descifrado, primero se descifra el mensaje RSA para recuperar (X, Y). El descifrador calcula H (X) y lo empareja con Y, para encontrar r, es decir, r = Y ⊕ H (X). Luego, el desencriptador calcula G (r) y lo empareja con X para recuperar el mensaje original rellenado (y el pad puede truncarse eliminando todo desde el último 1 seguido de todos los ceros).