Per risolvere questo problema, una soluzione comune sta utilizzando un Hybrid Cryptosystem .
Crea una nuova chiave di sessione casuale ( chiave effimera ) per la crittografia simmetrica (AES) quindi crittografare i dati con questa chiave con una corretta modalità di funzionamento con un appropriato schema di riempimento come pkcs # 5
key = generate_random_key()
encrypted_data = AES(k, data)
Ora, A crittografa la chiave di sessione con la chiave pubblica di B.
encrypted_key = Encrypt(key, B_private_key)
Infine, A firma digitalmente tutto
sign = Sign(Hash(encrypted_key || encrypted_data)
e invia
Send(encrypted_data, encrypted_key, sign)
In questo modo;
- dati crittografati con un algoritmo simmetrico che è molto più veloce della crittografia asimmetrica.
- i dati sono riservati poiché crittografati con una chiave.
- i dati sono autenticati poiché A utilizza la sua chiave segreta per firmare e B può verificarlo con il certificato pubblico di A.