Para resolver este problema, una solución común es utilizar un Cryptosystem híbrido .
Cree una nueva clave de sesión aleatoria ( clave efímera ) para el cifrado simétrico (AES), a continuación, cifre los datos con esta clave con el modo de operación adecuado con un href="https://en.wikipedia.org/wiki/Padding_(cryptography)"> esquema de relleno como pkcs # 5
key = generate_random_key()
encrypted_data = AES(k, data)
Ahora, A encripta la clave de sesión con la clave pública de B.
encrypted_key = Encrypt(key, B_private_key)
Finalmente, A firma digitalmente todo
sign = Sign(Hash(encrypted_key || encrypted_data)
y enviar
Send(encrypted_data, encrypted_key, sign)
De esta manera;
- datos cifrados con un algoritmo simétrico que es mucho más rápido que el cifrado asimétrico.
- los datos son confidenciales desde que se cifraron con una clave.
- los datos están autenticados , ya que A usa su clave secreta para firmar, y B puede verificar esto con el certificado público de A.