Questo è un approccio standard, chiamato hybrid cryptosystem . La crittografia simmetrica e la crittografia asimmetrica hanno ciascuna i loro punti di forza e di debolezza. In particolare:
- La crittografia asimmetrica consente a chiunque di crittografare i messaggi che solo un partecipante sarà in grado di decodificare e consente a chiunque di verificare i messaggi che solo un partecipante può aver firmato.
- La crittografia simmetrica è molto più veloce della crittografia asimmetrica. Davvero, molto.
La sicurezza non è davvero una preoccupazione nella scelta tra crittografia simmetrica e asimmetrica. La crittografia asimmetrica risolve i problemi che la crittografia simmetrica non può; per tutto il resto, viene utilizzata la crittografia simmetrica, perché è molto più veloce.
(Come conseguenza dell'essere più veloce, la crittografia simmetrica tende ad avere un margine di sicurezza più elevato: dimensioni chiave comuni - AES a 128 bit - sono abbastanza grandi da escludere una svolta matematica completamente nuova, tutti i computer attualmente esistenti sulla terra Per tutto il tempo in cui l'universo è esistito si avrebbe solo una piccola possibilità di rompere la crittografia. La crittografia asimmetrica gira su margini minori a causa delle sue scarse prestazioni e ci sono occasionalmente miglioramenti matematici nei metodi di cracking che rendono le dimensioni delle chiavi comunemente utilizzate per alcuni anni ma non necessariamente per alcuni decenni, ma questa è una preoccupazione secondaria rispetto all'alternativa capacità / prestazioni.)
I crittosistemi ibridi risolvono il dilemma utilizzando la crittografia asimmetrica solo dove è necessario:
- Per verificare la firma di un messaggio, il messaggio è hashed e la crittografia asimmetrica viene utilizzata solo sull'hash, non direttamente sul messaggio a lunghezza variabile.
- Per crittografare alcuni dati, viene generata una chiave di sessione simmetrica. La crittografia asimmetrica viene utilizzata per condividere questa chiave simmetrica tra i partecipanti (il client e il server). I dati "reali" sono crittografati e autenticati utilizzando questa chiave simmetrica.
In HTTPS come viene comunemente usato sul web, il server ha una chiave pubblica, ma il client non lo fa - qualsiasi browser può contattare il server, al server non importa chi sia il client. ( I certificati lato client sono usato dove ha senso .) Una vista molto alta e incompleta di una sessione di sessione HTTPS è:
- Il server invia il suo certificato al client. Il certificato contiene la chiave pubblica del server e una firma di tale chiave pubblica da un'autorità di certificazione . Il client verifica che l'autorità di certificazione sia nota (i browser vengono forniti con un elenco di chiavi pubbliche delle autorità di certificazione).
- Il client e il server decidono di scegliere una chiave simmetrica, in modo tale che un attaccante non sarà in grado di ricostruire la chiave semplicemente ispezionando il traffico o anche modificandolo (o almeno verrà rilevato un aggressore attivo e il client o il server interromperanno la sessione). Uno scambio di chiavi Diffie-Hellman più una firma dal server (per consentire al client di verificare che il lo scambio è stato condotto con il server, e non con un attaccante man-in-the-middle) è una possibilità di generare la chiave simmetrica. È anche possibile fare affidamento esclusivamente sulla chiave privata del server (a spese di non garantire inoltrare la segretezza ).
- Tutte le comunicazioni successive utilizzano quella chiave simmetrica.
Nota che ho fatto molte semplificazioni sopra. Per maggiori dettagli, leggi: