Una chiave è un gruppo di caratteri casuali disposti in un ordine particolare. I protocolli di crittografia utilizzano una chiave per modificare i dati in modo che vengano criptati e in modo che chiunque non disponga della chiave non possa decodificare le informazioni.
Dopo aver letto questo articolo sarai in grado di:
Argomenti correlati
Abbonati a theNET, il riepilogo mensile di Cloudflare sulle tematiche più discusse in Internet.
Copia link dell'articolo
In crittografia, una chiave è una stringa di caratteri utilizzata all'interno di un algoritmo di crittografia per modificare i dati in modo che appaiano casuali. Proprio come una chiave fisica, blocca (crittografa) i dati in modo che solo chi possiede la chiave giusta possa sbloccarli (decifrarli).
I dati originali sono noti come testo in chiaro e i dati dopo che la chiave li ha crittografati sono noti come testo cifrato.
La formula:
testo in chiaro
+ chiave
= testo cifrato
Prima dell'avvento dei computer, il testo cifrato veniva spesso creato semplicemente sostituendo una lettera con un'altra nel testo in chiaro, un metodo noto come "cifrario a sostituzione". Supponiamo, ad esempio, che qualcuno invii un messaggio con scritto "Hello" a un'altra persona e che ogni lettera venga sostituita con quella successiva nell'alfabeto: "Hello" diventa quindi "Ifmmp".
| H | E | L | L | O |
| +1 | +1 | +1 | +1 | +1 |
| I | F | M | M | P |
"Ifmmp" sembra una stringa di lettere senza senso, ma se qualcuno conosce la chiave, può sostituirla con le lettere corrette e decifrare il messaggio come "Hello". Per questo esempio, la chiave è (lettera) - 1, spostando ogni lettera indietro di una posizione nell'alfabeto per arrivare alla lettera reale.
| I | F | M | M | P |
| -1 | -1 | -1 | -1 | -1 |
| H | E | L | L | O |
Tali cifrari sono relativamente facili da decifrare con una semplice analisi statistica, poiché alcune lettere appariranno più frequentemente di altre in un dato testo (ad esempio, la E è la lettera più comune nella lingua inglese). Per contrastare questo problema, i crittografi hanno sviluppato un sistema chiamato one-time pad.
Un one-time pad è una chiave monouso che ha almeno tanti valori quanti sono i caratteri del testo in chiaro. In altre parole, ogni lettera verrà sostituita da una lettera che dista da essa un numero univoco di lettere nell'alfabeto.
Supponiamo, ad esempio, che qualcuno debba crittografare il messaggio "Hello" e che utilizzi un one-time pad con i valori 7, 17, 24, 9, 11.
| H | E | L | L | O |
| 7 | 17 | 24 | 9 | 11 |
Mentre prima ci spostavamo semplicemente di una posizione in avanti per ogni lettera (lettera + 1), ora ci spostiamo di un numero diverso di posizioni nell'alfabeto per ogni lettera. Aggiungiamo 7 alla prima lettera, H, poi aggiungiamo 17 alla seconda lettera e così via. Per tutti i calcoli che ci portano oltre Z, torniamo semplicemente all'inizio dell'alfabeto e continuiamo ad aggiungere.
| H | E | L | L | O |
| 7 | 17 | 24 | 9 | 11 |
| O | V | J | U | Z |
Partendo dal testo in chiaro "Hello", con la chiave "7, 17, 24, 9, 11" ora abbiamo ora il testo cifrato "Ovjuz".
Affinché la comunicazione tramite un one-time pad funzioni, entrambe le parti della conversazione devono utilizzare la stessa chiave per ogni singolo messaggio (crittografia simmetrica), sebbene venga utilizzata una chiave diversa ogni volta che c'è un nuovo messaggio. Sebbene a terzi "Ovjuz" possa sembrare una sciocchezza casuale, la persona che riceve il testo cifrato "Ovjuz" saprà di dover usare la chiave "7, 17, 24, 9, 11" per decifrarlo (sottraendo anziché addizionando):
| O | V | J | U | Z |
| 7 | 17 | 24 | 9 | 11 |
| H | E | L | L | O |
Pertanto, un semplice messaggio può essere modificato tramite una stringa di dati casuali, una chiave, per poter essere crittografato o decrittografato.
Sebbene gli esempi sopra riportati della crittografia primitiva illustrino il funzionamento dell'utilizzo di una stringa casuale di informazioni per trasformare il testo in chiaro in testo cifrato, le chiavi di crittografia odierne sono molto più complesse.
Ad esempio, la chiave pubblica di un sito Web potrebbe essere qualcosa del tipo:
04 CE D7 61 49 49 FD 4B 35 8B 1B 86 BC A3 C5 BC D8 20 6E 31 17 2D 92 8A B7 34 F4 DB 11 70 4E 49 16 61 FC AE FA 7F BA 6F 0C 05 53 74 C6 79 7F 81 12 8A F7 E2 5E 6C F5 FA 10 69 6B 67 D9 D5 96 51 B0 (copiata nel 2019 dal certificato SSL di cloudflare.com)
Questa è molto più complessa della chiave "7 17 24 9 11" che abbiamo usato sopra per crittografare "Hello".
Invece di limitarsi ad aggiungere o sottrarre, la crittografia moderna utilizza complesse formule matematiche note come algoritmi. E invece di una semplice stringa di numeri casuali per una chiave, le chiavi moderne sono solitamente ulteriormente randomizzate.
Ciò avviene per diverse ragioni:
In combinazione con un algoritmo di crittografia, una chiave di crittografia è in grado di criptare un testo rendendolo irriconoscibile da parte dell'uomo.
Esistono due tipi di crittografia: la crittografia simmetrica e la crittografia asimmetrica, nota anche come crittografia con chiavi pubbliche. Nella crittografia simmetrica, entrambe le parti di una conversazione utilizzano la stessa chiave per trasformare il testo in chiaro in testo cifrato e viceversa.
Nella crittografia asimmetrica (o con chiavi pubbliche), le due parti della conversazione utilizzano ciascuna una chiave diversa. Una chiave è detta chiave pubblica, l'altra chiave è detta chiave privata, così chiamata perché una delle parti la tiene segreta e non la condivide mai con nessuno. Quando il testo in chiaro viene crittografato con la chiave pubblica, solo la chiave privata può decrittografarlo.
SSL (o TLS, come viene chiamato oggi) è un protocollo di crittografia utilizzato per proteggere le comunicazioni Internet. Un sito Web servito tramite HTTPS anziché HTTP utilizza questo tipo di crittografia. In TLS/SSL, un sito Web o un'applicazione Web avrà sia una chiave pubblica che una chiave privata. La chiave pubblica viene condivisa pubblicamente nel certificato SSL del sito Web, affinché chiunque possa vederla. La chiave privata è installata sul server di origine e non viene mai condivisa.
Le sessioni di comunicazione TLS/SSL iniziano con un handshake TLS, durante il quale il sito Web e il client utilizzano la chiave pubblica e la chiave privata per generare nuove chiavi, chiamate chiavi di sessione. Queste chiavi di sessione vengono quindi utilizzate da entrambe le parti per crittografare i propri messaggi avanti e indietro.
Pertanto, TLS inizia con la crittografia asimmetrica (con due chiavi) e passa alla crittografia simmetrica (con una chiave). Entrambe le parti utilizzano le stesse chiavi durante la sessione di comunicazione, ma quando iniziano una nuova sessione, genereranno insieme nuove chiavi.