Perché lo scambio di chiavi è necessario?

46

Diciamo che "Alice" e "Bob" vogliono comunicare tra loro su una rete non sicura.

Utilizzando lo scambio di chiavi Diffie-Hellman, possono ottenere la stessa chiave simmetrica alla fine. Tuttavia, come ho capito, non hanno affatto bisogno di ottenere la stessa chiave simmetrica , perché possono semplicemente usare chiave asimmetrica senza scambio di chiavi.

Con l'algoritmo RSA, Alice e Bob possono semplicemente condividere le loro chiavi pubbliche ( public_a , public_b ) e mantenere le loro chiavi private ( private_a , private_b ). Alice può semplicemente inviare a Bob i messaggi che sono crittografati da public_b e Bob può decrittografarlo con private_b . Possono ancora comunicare su una rete non sicura, senza scambio di chiavi Diffie-Hellman .

So che potrei sbagliarmi, ma non sono sicuro di dove mi fossi sbagliato. Qualcuno ha idee sul perché e quando è necessario uno scambio di chiavi Diffie-Hellman (o qualsiasi scambio di chiavi)? È adatto alla situazione che ho menzionato sopra?

    
posta Firegun 17.11.2015 - 08:25
fonte

4 risposte

55

Se l'utente malintenzionato è in grado di acquisire passivamente i dati e successivamente ottiene l'accesso alla chiave privata dei certificati (ad esempio furto, attacco heartbleed o applicazione della legge), l'utente malintenzionato può decodificare tutti i dati acquisiti in precedenza se la chiave di crittografia è derivata solo dal certificato stesso.

Lo scambio di chiavi DH consente di creare una chiave indipendente dal certificato. In questo modo la conoscenza del certificato da sola non è sufficiente per decodificare i dati acquisiti in precedenza. Questo è chiamato segreto d'urgenza. Vedi Wikipedia per ulteriori informazioni.

Oltre ad ottenere la segretezza con DH ci sono altri motivi per usare la crittografia simmetrica invece di usare semplicemente le chiavi private RSA. Pertanto, anche se non si utilizza DH per lo scambio di chiavi, TLS creerà una chiave simmetrica, che viene quindi derivata dal certificato. Per ulteriori dettagli sul perché utilizzare la chiave privata direttamente per crittografare non è una buona idea vedere Perché PGP utilizza la crittografia simmetrica e RSA? .

    
risposta data 17.11.2015 - 08:33
fonte
17

Ci sono molti passaggi necessari per comprendere le ragioni e cercherò di guidarti attraverso ciascuna.

1) Usa la crittografia correttamente ...

With RSA algorithm, Alice and Bob can just share their public keys (public_a, public_b) and keep their private keys (private_a, private_b). Alice can just send Bob the messages which are encrypted by private_a, and Bob can decrypted it by public_a. They can still communicate over an insecure network, without Diffie–Hellman key exchange at all.

Questa parte è semplicemente sbagliata. Quello che stai facendo in questa parte è la firma, non la crittografia. Dato che public_key_a è pubblico, i tuoi messaggi non saranno affatto crittografati. Invece di farlo, A dovrebbe cifrare i messaggi con public_key_b e poi B decodificarli con private_key_b. Poiché private_key_b è noto solo a B, A sa che solo B può decrittografarlo.

La firma digitale dimostra che un messaggio proviene da una determinata persona. La crittografia dimostra che solo tu, il portatore di chiavi e la persona che ha crittografato il messaggio, il mittente del messaggio, conosci il messaggio. È necessario disporre di crittografia e firma quando si utilizza la crittografia asimmetrica. Crittografia per proteggere la riservatezza del messaggio e della firma per dimostrare che tu sei quello che ha inviato questo messaggio.

Ma c'è ancora dell'altro ... Ad esempio, devi ancora proteggerti dagli attacchi di replay.

2) Bob di solito non ha una chiave pubblica

Diciamo che Alice (A) è il server e Bob (B) è il client. Di solito il client non ha una chiave pubblica. Ad esempio, conosci una chiave pubblica? La risposta è molto probabilmente NO. Quindi, Bob può ricevere messaggi da Alice e verificare che vengano davvero da Alice, ma Alice non può essere certo che tutto ciò che riceve da Bob provenga davvero da Bob.

Questo problema è una delle cause principali del perché abbiamo aggiunto il protocollo di scambio di chiavi come Diffie-Hellman.

3) RSA è limitato a un blocco.

Esiste una tecnica utilizzata per crittografare un messaggio lungo che si chiama cifratura dei blocchi di cifratura . Purtroppo, questa tecnica non può essere utilizzata con RSA. Non è che sia totalmente impossibile, ma piuttosto che nessuno sa se è davvero sicuro se lo facciamo. Quindi limita la crittografia RSA a un blocco. D'altra parte, gli algoritmi di crittografia simmetrica come AES funzionano come un incantesimo con il concatenamento dei blocchi ed è la ragione per cui li usiamo.

Ulteriori letture: link

4) Diffie-Hellman è un protocollo di scambio di chiavi

Diffie-Hellman è solo un modo per "creare e condividere" una chiave che può quindi essere utilizzata per la crittografia simmetrica. Il La forza di Diffie-Hellman è che tutta la conversazione per creare questa chiave può avvenire in testo semplice e la chiave sarebbe ancora privato.

Nota : Diffie-Hellman non risolve il problema degli attacchi MitM perché non può autenticare le parti che comunicano tra loro. Questo problema viene invece risolto con firma digitale .

5) Ephemeral Diffie-Hellman fornisce un segreto perfetto in avanti

Ephemeral Diffie-Hellman è solo un nome di fantasia per dire che stai generando una nuova coppia di chiavi Diffie-Hellman ogni sessione e non le memorizzi. Poiché non li memorizzi mai, un utente malintenzionato non può mai recuperarli.

Vedi questa ottima risposta per maggiori dettagli: link

6) Effimero Diffie-Hellman ti protegge dall'attacco di replay

Un effetto collaterale molto buono dell'uso di Effemerale Diffie-Hellman è che ti protegge anche dall'attacco di replay. Poiché il server e il client scelgono una nuova chiave DH privata a caso ogni sessione, non è possibile riprodurre il messaggio da un'altra sessione per impersonare il server o il client.

Conclusione

Questa è una breve panoramica di come funziona TLS e tutte quelle parti sono necessarie per fornire una connessione sicura. Senza la crittografia simmetrica non è possibile crittografare un messaggio lungo e senza crittografia asimmetrica non è possibile condividere la chiave di crittografia e fornire una perfetta segretezza in avanti.

    
risposta data 17.11.2015 - 17:19
fonte
2

Si presume che Alice e Bob possano scambiarsi in modo affidabile le chiavi pubbliche su una rete non protetta.

Senza un protocollo di scambio di chiavi, Alice e Bob pensano che questo accada: (A = chiave pubblica di Alice, B = chiave pubblica di Bob)

Alice  ---------- A --------------> Bob


Alice  <----------- B ------------- Bob

quando questo è ciò che realmente accade (M = chiave pubblica di Mallory)

Alice  ----- A ------> Mallory --------- M ------> Bob

Alice  <---- M ------- Mallory <-------- B ------- Bob

Bob e Alice ora pensano di crittografare i messaggi l'uno con l'altro; in realtà stanno solo crittografando i messaggi per Mallory, che decodifica, legge e ricodifica i messaggi utilizzando i destinatari previsti reali

    
risposta data 17.11.2015 - 23:51
fonte
1

L'utilizzo di RSA per tutti i messaggi è indesiderabile perché l'algoritmo è dispendioso dal punto di vista computazionale. L'utilizzo di RSA per negoziare una chiave simmetrica consente di inviare ulteriori messaggi in modo molto più economico in termini di utilizzo della CPU.

    
risposta data 17.11.2015 - 16:39
fonte

Leggi altre domande sui tag