Comprendo che la segretezza Perfect Forward ha lo scopo di impedire la decrittografia dei dati inviati tra il client e il server nel caso in cui la chiave privata sia trapelata qualche tempo dopo l'invio dei dati.
Ma perché abbiamo bisogno di qualcosa di complicato come lo scambio di chiavi Diffie-Hellman per fare questo? Non potremmo semplicemente usare XOR, in questo modo:
- Il client genera una chiave di crittografia casuale, K e un numero casuale della stessa lunghezza, R1
- Il client invia K xor R1 al server
- Il server genera un numero casuale R2
- Il server invia K xor R1 xor R2 al client
- Il client visualizza il messaggio con il suo numero casuale, inviando K xor R2 al server
- Il server aggiorna anche il messaggio con il suo numero casuale, il che risulta nella chiave, K, che viene quindi utilizzata per crittografare tutte le comunicazioni
Se una chiave che non è generata solo dal client / server è necessaria per qualche motivo, allora questo processo può essere ripetuto di nuovo dal server e quindi le due chiavi possono essere sottoposte a xored per ottenere la chiave finale.
A meno che la chiave privata SSL non sia nota quando si verifica questo scambio, che consentirebbe a un man-in-the-middle di modificare i messaggi inviati tra il client e il server, nessuno sarà in grado di capire quale sia la chiave.
Comprendo che XOR è vulnerabile agli attacchi di testo normale, ma poiché i numeri casuali e la chiave di crittografia vengono utilizzati solo una volta, non vedo perché questo dovrebbe avere importanza.