Le prime forme di crittografia erano basate su algoritmi di crittografia segreti, ma presto divenne evidente che questa era una pessima idea. Se si sospetta che l'algoritmo sia stato approntato dal nemico, possono potenzialmente decodificare tutto e si deve buttare via tutto e ricominciare da capo. E gli algoritmi sono difficili da inventare.
Un'idea migliore è usare una chiave. In un sistema basato su chiavi, l'algoritmo non è segreto, ma la segretezza è tutta condensata in un grande numero casuale chiamato chiave. L'algoritmo di crittografia prende il messaggio in chiaro e lo combina con la chiave utilizzando una lunga serie di processi matematici per produrre il messaggio crittografato. Al fine di invertire l'algoritmo il destinatario deve anche avere la chiave.
Ora l'algoritmo non è segreto, quindi gli esperti possono esaminarlo per confermare che è sicuro, e se la chiave è compromessa, basta buttarla via e scegliere un nuovo numero casuale lungo. Diamine, usa una nuova chiave ogni volta che invii un messaggio, anche se una chiave viene compromessa senza che tu sappia che il nemico può solo leggere un messaggio.
Queste sono le chiavi. Parli anche di password, che sono diverse, e chiavi pubbliche, che sono un tipo speciale di chiave. Entrambi sono usati per risolvere alcuni problemi pratici irritanti con l'uso delle chiavi come parte di un sistema per lo scambio di messaggi.
Il primo problema pratico con le chiavi è che poiché una chiave è solo un grosso numero casuale, gli umani trovano molto difficile memorizzarle. Se il tuo sistema ha bisogno di una persona per ricordare la chiave e non scriverla, allora hai un problema. Una password è una combinazione di lettere e caratteri che un umano può ricordare. Il tuo sistema può usare qualcosa chiamato algoritmo di derivazione della chiave che prende una password e la trasforma in una chiave. I sistemi basati su password non sono buoni come i sistemi che usano solo una chiave, ma è una limitazione degli esseri umani, non molto che possiamo fare.
Quindi non usi veramente una password per decodificare un messaggio, lo usi per generare la chiave e poi usi la chiave per decodificare il messaggio.
L'altro problema pratico con le chiavi è chiamato distribuzione delle chiavi. Prima di poterti inviare un messaggio in sicurezza, dobbiamo conoscerlo entrambi, quindi devo darlo a te. Ma non posso inviarlo crittografato, perché non hai ancora la chiave. E non posso inviarlo in chiaro, perché cosa succede se un cattivo sta ascoltando?
In molti sistemi esiste un modo per scambiare le chiavi su un canale sicuro separato. Ad esempio, M può dare a Bond la chiave che dovrebbe usare prima di iniziare la sua missione, mentre sono ancora al sicuro nella sede dell'MI6.
Ma a volte questo non è possibile, specialmente su Internet, dove di solito abbiamo solo Internet per comunicare. Quindi è richiesto un nuovo trucco, la crittografia a chiave pubblica.
In questo tipo di sistema, ho due chiavi collegate matematicamente. Se un messaggio è crittografato da una delle chiavi, può essere decifrato solo dall'altra. Chiaro una chiave privata e la tengo segreta; Chiaro l'altro la chiave pubblica e dico a tutti di cosa si tratta.
Ora puoi inviarmi un messaggio sicuro crittografandolo con la chiave pubblica. Un utente malintenzionato può ascoltare tutto quello che vuole, ho già detto loro la chiave pubblica, ma non è un bene per loro, solo la persona con l'altra chiave privata (io) può decifrare il messaggio che hai inviato.
Per motivi pratici noiosi, in genere si usa una chiave pubblica / privata solo una volta in una conversazione, proprio all'inizio, in modo da poter scambiare le chiavi in modo sicuro su una linea non sicura e quindi utilizzare un metodo di crittografia a chiave singola per il messaggio effettivo. Quindi non usi una chiave pubblica o privata per decodificare un messaggio, lo usi per scambiare in sicurezza una terza chiave e poi la usi per decodificare il messaggio.