Come viene scambiata la chiave in un protocollo di crittografia della chiave privata?


12

Windows NT utilizzava un protocollo point-to-point in cui un client può comunicare "in modo sicuro" con un server utilizzando un codice di flusso per crittografare una matrice di messaggi con una chiave k . Il server crittografa anche la sua risposta con la stessa chiave k . Ma come è a conoscenza di questa chiave?

Più in generale: se Alice e Bob utilizzano un algoritmo di crittografia / decrittografia che opera sulla stessa chiave privata k , qual è un modo sicuro per scambiare questa chiave? (senza usare una diversa chiave di corso)

Questo è qualcosa che mi sono sempre chiesto mentre studiavo la crittografia a chiave privata.


Risposte:


6

La maggior parte degli algoritmi a chiave privata si basano sull'impossibilità di determinati calcoli come la fattorizzazione di un numero nei suoi fattori primi data l'attuale infrastruttura informatica.

Allo stesso tempo, la maggior parte di essi è anche intensiva dal punto di vista computazionale quando viene utilizzata per la crittografia e la decrittografia e pertanto l'intero flusso di messaggi non viene crittografato utilizzando le chiavi private. Piuttosto, il messaggio viene crittografato utilizzando un altro algoritmo (meno intensivo) e la chiave utilizzata per tale crittografia viene crittografata utilizzando la chiave privata.

Naturalmente, come sottolineato, lo scambio sicuro di chiavi rimane un problema che può essere risolto in una certa misura da:

  • Scambio di chiavi Diffie-Hellman : utilizza l'arthimetic modulare per scambiare le chiavi in ​​modo sicuro.
  • Centro di distribuzione chiavi singole / multiple (KDC) : utilizza un sistema di ticketing basato su terze parti attendibile.
  • Protocollo di autenticazione Kerberos : un protocollo relativamente complesso basato su KDC.

7

Ogni volta che Alice e Bob vogliono concordare una stessa chiave privata, il metodo più popolare è usare Diffie-Hellman . Funziona come segue:

  1. n=13g=17

  2. a=3b=7

  3. Alice calcola: e Bob calcola: , in questo caso e e si scambiano i valori degli altri (può essere attraverso la chat), cioè tutti lo sanno i valori di e .A=gamodnB=gbmodnA=12B=4AB

  4. Alice calcola: e Bob calcola: , in questo caso .K=BamodnK=AbmodnK=12

Ora Alice e Bob hanno entrambi concordato il valore come chiave. Nota che, poiché il valore di e e molto grandi numeri primi è quasi impossibile per un intercettatore di fattorizzare loro e calcolare la chiave di se stesso.Kng

Un problema nella crittografia a chiave privata è l'attacco man-in-the-middle e questo è uno dei motivi principali per scegliere la crittografia a chiave pubblica piuttosto che la crittografia a chiave privata.


5

Innanzitutto, un punto di terminologia: ciò che descrivi è la crittografia simmetrica e una chiave condivisa tra i partecipanti è generalmente nota come chiave segreta; "Chiave privata" di solito indica la parte di una chiave nella crittografia a chiave pubblica che solo un partecipante conosce.

Esistono due modi per diffondere una chiave segreta: può essere trasportata in un modo fisicamente sicuro o può essere trasportata usando un'altra forma di crittografia, comunemente crittografia a chiave pubblica.

Esistono modi per scambiare una chiave segreta che non richiede un canale di comunicazione segreto. Il più popolare è il protocollo di scambio chiavi Diffie-Hellman. Il principio di Diffie-Hellman è che ogni partecipante genera la propria coppia di chiavi e c'è un'operazione matematica che costruisce un gran numero da una chiave pubblica e una chiave privata. Questa operazione matematica ha una proprietà molto interessante: il gran numero può essere costruito dalla chiave privata di Alice e dalla chiave pubblica di Bob, oppure dalla chiave privata di Bob e dalla chiave pubblica di Alice; ottieni lo stesso numero in entrambi i modi. Quindi Alice e Bob si scambiano le loro chiavi pubbliche ed entrambe le parti conoscono il numero elevato, che può quindi essere utilizzato come chiave segreta. Un intercettatore può scoprire entrambe le chiavi pubbliche, ma è impossibile¹ trovare il numero elevato solo dalle chiavi pubbliche.

Lo scambio di chiavi Diffie-Hellman consente a due parti di scambiare un segreto, indipendentemente da chi sta ascoltando. Tuttavia, non autentica Alice su Bob o viceversa. Pertanto è suscettibile di un attacco man-in-the-middle : Mallory esegue lo scambio di chiavi con Alice (che crede di parlare con Bob) e separatamente con Bob (che crede di parlare con Alice), e quindi può decidere o almeno conosco il segreto.

Quando l'attaccante può intercettare e iniettare messaggi, è necessaria più crittografia per consentire ai partecipanti di autenticarsi a vicenda. (Un attaccante passivo significa effettivamente che il protocollo di trasporto sottostante fornisce l'autenticazione.) Il modo semplice è per ogni partecipante di conoscere già la chiave pubblica dell'altro. Se Alice conosce la chiave pubblica di Bob:

  • Alice può autenticare Bob inviandogli una sfida: un valore casuale (un nonce ) crittografato con la chiave pubblica di Bob. Se Bob riesce a decifrare quel valore e rispedirlo, Alice sa che sta davvero parlando con Bob.
  • Bob può autenticarsi con Alice inviandole un messaggio firmato con la sua chiave pubblica. Alice verifica la firma per verificare che stia davvero parlando con Bob.

Esistono molte varianti che utilizzano uno di questi metodi (o ancora un'altra variante) in una direzione e lo stesso metodo o un metodo diverso nell'altra direzione o che eseguono l'autenticazione in una sola direzione. Ad esempio, SSL / TLS (il livello di crittografia per molti protocolli come HTTPS, SMTPS, IMAPS, ecc.) Può utilizzare diverse combinazioni di cifratura e di solito autentica il server sul client ma può anche autenticare il client. Diffie-Hellman è lento e ingombrante per questa applicazione; l'algoritmo più diffuso con la distribuzione delle chiavi pubbliche è RSA .

Naturalmente, Alice e Bob potrebbero non conoscersi in anticipo la chiave pubblica dell'altro. Quindi si affidano invece a una catena di fiducia: Bob invia ad Alice la sua chiave pubblica, insieme a una dichiarazione firmata da una terza parte che afferma che questa chiave è in realtà la chiave pubblica di Bob. Questa dichiarazione firmata si chiama certificato e la terza parte è un'autorità di certificazione . La terza parte può essere nota a Bob o la sua identità può essere confermata da una quarta parte e così via. Alla fine questa catena di fiducia (... garantisce Dominique per Charlie che garantisce per Bob) deve raggiungere una parte di Ron di cui Bob si fida già, il che significa che Bob ha la chiave pubblica di Ron e si fida di Ron per firmare solo certificati validi.

Esistono protocolli che non si basano sulla crittografia a chiave pubblica. In particolare, il protocollo Kerberos viene utilizzato in entrambe le reti unix e basate su Windows per stabilire connessioni tra un client e un server. Kerberos utilizza un server di autenticazione centrale chiamato Key Distribution Center (KDC). Il KDC deve avere la password dell'utente memorizzata in un database e il client richiede normalmente all'utente la password. Per evitare di esporre la password, il protocollo non utilizza direttamente la password, ma un hash crittografico o più in generale una funzione di derivazione della chiave applicata alla password.

Con questo segreto condiviso, il client e il KDC stabiliscono un canale sicuro e il KDC invia al client un "ticket". Il ticket contiene una chiave di sessione (ovvero una chiave segreta appena generata), nonché una copia della chiave crittografata con un'altra chiave simmetrica condivisa tra il KDC e il server che il client desidera contattare. Il client quindi inoltra questa copia crittografata al server. Il server decodifica questo messaggio per ottenere la chiave di sessione e genera un nonce che crittografa con la chiave di sessione e lo invia al client. Il client quindi avvia un canale sicuro con il server, crittografato con la chiave di sessione, e inizia mostrando che potrebbe decrittografare il nonce: questo autentica il client sul server. Una istituzione di sessione Kerberos è una variante del protocollo Needham-Schroeder .

¹ Nel senso che i crittografi hanno provato molto duramente, ma il modo migliore che hanno trovato per farlo richiede un'incredibile quantità di potenza di calcolo.



3

C'è sempre la soluzione banale: gli utenti si incontrano e si scambiano le chiavi. Questo non è molto pratico per molti casi, ma possibile.

Oltre al protocollo di scambio di chiavi Diffie-Hellman (DH), esistono anche protocolli di distribuzione di chiavi quantistiche . Uno dei protocolli QKD più noti è il protocollo Bennett-Brassard, BB84 .

Il vantaggio di BB84 su DH è che DH è sicuro solo se il logaritmo discreto non può essere eseguito in modo efficiente (vedere presupposto logaritmo discreto e anche il relativo presupposto DDH ). Tuttavia, BB84 è teoricamente sicuro per le informazioni. Cioè, anche se , BB84 sarebbe comunque sicuro (ma DH no).P=NP

D'altro canto, l'attacco MITM è un problema anche per BB84 e bisogna supporre che gli utenti utilizzino il canale autenticato per superare questo problema (ma questo di solito richiede loro di condividere una chiave di autenticazione, e siamo di nuovo al punto di partenza).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.