La crittografia asimmetrica è usata di solito come parte della crittografia ibrida : una chiave simmetrica casuale K è generato dal mittente; K è crittografato con la chiave pubblica del destinatario e la maggior parte dei dati viene crittografata con un algoritmo di crittografia simmetrica utilizzando K come chiave. In pratica si utilizza la crittografia asimmetrica come algoritmo di scambio di chiavi.
In effetti questo non è di solito fatto in questo modo; è always fatto in questo modo. Ci sono molte buone ragioni per questo, ovvero:
-
Non sappiamo davvero come fare la crittografia "pura" asimmetrica in modo sicuro. Per la crittografia simmetrica abbiamo un sacco di teoria e pratica su modalità di funzionamento ; ma per qualcosa come RSA siamo ancora all'oscuro in questo senso.
-
La crittografia asimmetrica comporta l'espansione delle dimensioni; il testo crittografato è necessariamente più grande del messaggio di origine ("necessariamente" a causa della randomizzazione, necessaria per sconfiggere la ricerca esaustiva sui dati in chiaro). Se la crittografia asimmetrica viene utilizzata in tutto, allora l'overhead delle dimensioni per un grande messaggio diventa non trascurabile. A contrario , con crittografia ibrida, il sovraccarico è fisso anche se si crittografano gigabyte di dati.
-
La crittografia e la decifratura asimmetriche sono computazionalmente più costose rispetto alla crittografia simmetrica.
Queste ragioni si alimentano a vicenda: ad es. le modalità di funzionamento per la crittografia asimmetrica non sono studiate perché sarebbero comunque costose, per nessun guadagno chiaro.
Una conseguenza è che una normale implementazione RSA accetterà di crittografare i messaggi solo fino al limite di dimensione inerente dell'algoritmo e non tenterà di "dividere" il messaggio in blocchi crittografati individualmente o in qualcosa del genere.
Gli unici casi in cui viene utilizzata la crittografia asimmetrica senza crittografia ibrida sono:
- Casi specializzati in cui i dati da crittografare sono sempre brevi.
- Protocolli avanzati in cui il mittente deve essere in grado di provare alcune proprietà algebriche su ciò che è crittografato e / o crittografia omomorfica (questo è tipico dei protocolli di voto elettronico). In questi casi, i messaggi da crittografare non sono solo una sequenza di bit; hanno molte strutture matematiche e saranno di nuovo brevi.