Crittografia asimmetrica ------------------------ Ogni metodo di crittografia moderno consiste in un algoritmo da applicare al messaggio che si vuole crittare usando come parametro una chiave, ovvero un numero o dei caratteri; il metodo è considerato abbastanza sicuro se conoscendo l'algoritmo e il messaggio codificato, ma non la chiave, non è possibile risalire al messaggio originario in un tempo abbastanza breve perché le informazioni in esso contenute siano utili o interessanti. La crittografia tradizionale richiede l'esistenza di una chiave segreta nota sia al mittente che al destinatario del messaggio: il trasferimento di questa chiave deve avvenire su canali sicuri e comporta difficoltà logistiche significative, specie quando le persone coinvolte non possono vedersi frequentemente di persona. Per ovviare a tale problema, sono stati sviluppati degli algoritmi di crittografia asimmetrica, nel quale esiste una coppia di chiavi legate tra loro da una relazione matematica che fa sì che un messaggio codificato con una delle due chiavi possa essere decodificato esclusivamente conoscendo l'altra chiave. Una delle due chiavi è detta chiave privata, e deve essere custodita in modo sicuro, mentre l'altra è detta chiave pubblica e può essere distribuita senza alcun rischio. La maggior parte della crittografia usata su internet fa uso di uno di questi algoritmi, sia per la loro maggiore praticità che per la capacità aggiuntiva di garantire l'identità del mittente. Crittare ^^^^^^^^ L'invio di un messaggio crittato con chiave pubblica può essere visualizzato con un esempio pratico. Alice vuole inviare a Bob un messaggio, ma sospetta che il postino sbirci nelle buste; Alice può allora chiedere a Bob di inviarle un lucchetto aperto (la chiave pubblica) di cui solo lui ha la chiave (chiave privata). Quando Alice riceve il lucchetto lo usa per chiudere una cassetta in cui ha messo il messaggio; da quel punto in poi solo Bob può aprire la cassetta, che può essere così spedita senza rischi. Con la crittografia asimmetrica via internet la procedura è simile: Alice cerca su internet la chiave pubblica di Bob, si assicura che sia veramente sua, codifica il messaggio e sa che solo Bob, con la sua chiave privata potrà leggerlo; se Bob vuole rispondere dovrà fare la stessa cosa con la chiave pubblica di Alice. Firmare ^^^^^^^ La firma dei messaggi sfrutta le proprietà delle chiavi al contrario: un messaggio codificato con una chiave privata di Alice può essere letto da chiunque abbia la sua chiave pubblica, ma non può essere stato scritto da nessun'altro. Alice può quindi mandare a Bob un messaggio in chiaro accompagnato dallo stesso messaggio crittato con la sua chiave privata: se Bob ha dei dubbi sull'identita` del mittente può decodificare il messaggio con la chiave pubblica di Alice e controllare che i due messaggi siano identici. Certificate Autority e Web of Trust ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Il sistema di crittografia asimmetrica è stato pensato per evitare che le persone debbiano incontrarsi continuamente di persona per scambiarsi delle chiavi segrete, ma rimane un problema: come accertarsi che una chiave pubblica appartenga veramente alla persona a cui crediamo appartenga? Una soluzione a questo problema è data dalle *certificate autority*, CA, degli enti che verificano l'identità di chi ha generato una chiave, la firmano con la loro chiave privata e in questo modo certificano l'appartenenza della chiave generata ad un proprietario. Questo sistema è usato ad esempio per le connessioni web sicure, ma ha il limite di dipendere da una gerarchia rigida e nella quale riuscire a violare la sicurezza di una CA rischia di compromettere tutto il sistema. Un'altra soluzione è quella della *web of trust* in cui non esistono autorità centrali, ma ogni utente verifica le chiavi della sua cerchia di conoscenti, eventualmente facendosene garante nei confronti di chi decide di fidarsi delle sue verifiche. Questo è l'approccio usato ad esempio da gpg, usato nella comunità del software libero per firma e crittografia di email, ma anche per la firma dei rilasci di software, ed ha il vantaggio di essere scalabile a comunità di dimensioni disparate.