Skip to main content

Cripto-Anarchia ed Imprenditoria Libertaria – Capitolo 2: La Crittografia a Chiave Pubblica

Articoli scritti da Daniel Krawisz, tratti dal The Mises Circle1

 

Crittografia a Chiave Simmetrica

La crittografia a chiave pubblica è il più grande strumento di libertà mai concepito. La sua scoperta è rivoluzionaria. Prima di questa, tutta la crittografia era solo hacking. E' stata sviluppata nel 1973 da Ellis, Cocks e Williamson del CGHQ nel Regno Unito, ma questo lavoro non è stato classificato fino al 1997. È stata sviluppata in maniera indipendente nel 1976 da Rivest, Shamir e Adleman del MIT. Il loro lavoro è stato pubblicato, anche se protetto da un brevetto fino al 2000. Infine è diventata di libero utilizzo.

Per capirla, però, sarà necessario andare oltre le basi della crittografia a chiave simmetrica, che è il tipo di crittografia con cui abbiamo intuitivamente familiarità (il tipo che è esistito fin dall'antichità). Una volta che vengono compresi i limiti della crittografia a chiave simmetrica, allora crittografia a chiave pubblica vi sembrerà una magia.2

Iniziamo a pensare ad una semplice cifra di sostituzione. Ciò significa che il messaggio è una stringa di testo e la cifratura consiste nel sostituire ogni lettera con una diversa. Ad esempio, riuscite a risolvere il seguente codice?

JHBYEUXRBLPDWJXOBELNEHNTBFYDJHBWDCYUWJWLNUUWZBDJXLYERWRJRWEIBBCWEGJHBWDOYEBXWEJHBWDYSECYLIBJRUXRNEMBDRCYYEBD

Possiamo notare due cose. In primo luogo, questo algoritmo è insicuro. Indipendentemente da come siano sostituite le lettere, sarebbe facile da decifrare, soprattutto con un computer. Abbiamo bisogno di qualcosa di molto più complicato per creare un messaggio che sia abbastanza segreto. Ancora più importante, essere a conoscenza della sequenza di sostituzione delle lettere è sufficiente sia per decrittografare che per cifrare un messaggio. E', infatti, impossibile sapere come crittografare un messaggio senza conoscere simultaneamente il modo per decodificarlo.

Questa è l'essenza della crittografia a chiave simmetrica: è impossibile sapere come crittografare un messaggio senza sapere come decifrarlo, e viceversa. Questo porta a problemi reale. Se, per esempio, il mio nemico entra in possesso di uno dei miei messaggi segreti e riesce a decifrarlo, non solo sarebbe in grado di leggere il resto dei miei messaggi ma addirittura farne di nuovi, forse per ingannare me ed i miei amici.

Ma c'è un problema ancora più grande. Perché se l'unica crittografia che conosciamo è la cifratura a chiave simmetrica, allora non ci si può mandare affatto dei messaggi. Due confederati (persone che si vogliono scrivere in maniera sicura ma che non si sono messi già d'accordo su di una chiave comune) non hanno modo di parlare tra di loro per stabilire un protocollo segreto, senza che un intruso carpisca tutte le informazioni. Dobbiamo avere un mezzo di comunicazione già sicuro per definire un codice a chiave simmetrica! Ma se ce l'avessimo, allora il problema sarebbe già risolto.

La crittografia a chiave simmetrica è quindi veramente utile solo per tenere al sicuro i vostri segreti. Nel momento in cui si lascia che qualcun altro la conosca, viene creata una falla di sicurezza. Non sapete chi potrebbe essere in ascolto, e non sapete chi altro può rubare il segreto dal confederato.

 

Crittografia a Chiave Asimettrica

Pensiamo a come migliorare il codice di sostituzione. Uno dei trucchi più evidenti che potremmo provare è quello di sostituire le lettere in blocchi di due piuttosto che individualmente. Ad esempio, AA potrebbe diventare QF e BB potrebbe diventare LV. Questo sarebbe molto più sicuro anche se ancora facilmente scopribile con l'aiuto di un computer. Potremmo allora provare a sostituire le lettere in blocchi di tre o quattro. Alla fine raggiungeremmo un punto in cui sarebbe impossibile anche per un computer scoprirla in un tempo ragionevole.

Tuttavia il problema di questo metodo è che maggiore è il blocco che usiamo, più grande è la lista di sostituzioni. Un blocco di due richiede 26^2==676 sostituzioni. Un blocco di tre richiederebbe 17,576 sostituzioni, ed un blocco da quattro ne richiederebbe quasi mezzo milione. Un computer non potrebbe scoprire un tale codice, ma comunicare un tale elenco non sarebbe affatto pratico.

Invece, potremmo tentare di inventare un algoritmo che estragga casualmente un blocco di quattro lettere in un modo che sarebbe molto difficile da indovinare, ma che può ancora essere descritto con un breve messaggio. Questo apre veramente nuove possibilità: dato che un codice di sostituzione è dato semplicemente come un elenco delle sostituzioni, è intrinsecamente un algoritmo a chiave simmetrica. Considerando che se un codice è dato come un algoritmo, e se l'insieme di sostituzioni da esso definite è così enorme che non può essere elencato, allora le proprietà dell'algoritmo possono modificare le proprietà del codice.

Ad esempio, supponiamo che siete in grado di progettare un algoritmo che può essere eseguito in una frazione di secondo ma per il relativo algoritmo inverso ci vorrebbero milioni di anni. Se foste in possesso di una cosa del genere, potreste spiegarlo in modo sicuro a chiunque e senza paura che il messaggio possa essere decifrato. Non è molto utile perché nessuno, nemmeno io o i miei amici, potrebbe decifrare i messaggi! Comunque è interessante.

Tuttavia, esiste un aggiornamento che rende utile questa idea. Supponiamo che ci siano due algoritmi che siano inversi l'uno rispetto all'altro. Entrambi sono veloci e molto lenti da invertire. Un algoritmo può essere usato per cifrare e l'altro per decifrare. Tengo segreto l'algoritmo di decrittazione ma lascio che i miei amici vedano l'algoritmo di crittografia. Ora mi possono inviare messaggi, ma solo io posso leggerli e non ho dato via segreti che mi possano compromettere. In realtà, posso lasciare che anche i miei nemici possano vedere l'algoritmo di crittografia. Non possono farci nulla se non mandarmi messaggi.

L'aggiornamento finale è che ognuno di noi abbia due algoritmi: uno segreto e l'altro pubblico. Come possiamo scoprire così tanti algoritmi? Tipicamente esiste una classe di algoritmi, ciascuno dei quali è specificato da un numero o chiave. Quindi ognuno di noi ha una chiave pubblica ed una privata. Questa è la crittografia a chiave pubblica.

Ora le due persone possono comunicare in modo sicuro, anche se non si trovano su un canale sicuro. Un nemico può anche origliare, ma non capirà nulla di quello che ci diciamo dopo che ci siamo scambiati le chiavi pubbliche.

 

Costruire Comunità con la Crittografia a Chiave Pubblica

La magia della crittografia a chiave pubblica è che dà alle persone la possibilità di dimostrare di avere un segreto senza rivelarlo. Pensate a quanto possa suonare paradossale. Ma ora è abbastanza facile da capire. Se volessi verificare la vostra identità, vi manderei semplicemente un messaggio cifrato con la chiave pubblica e vi chiederei di dirmi quello che il messaggio contiene. Solo il titolare della chiave privata può rispondere correttamente alla domanda.

Questo potrà sembrarci poco intuitivo, perché la nostra tecnologia non si basa su di essa. Il fatto che usiamo ancora oggi queste tecnologie primitive (come le carte di credito che hanno il proprio numero stampato in bella vista, o le forme di identificazione come i numeri della previdenza sociale) è obsoleto. Sono obsoleti da decenni. Non c'è alcuna ragione per cui dobbiate mostrare la vostra password o il vostro numero di identità a qualcuno.

Il motivo per cui la crittografia a chiave pubblica è così potente per l'individuo, è che dimostrate la vostra identità solo con il vostro consenso. Una chiave privata non è come una carta d'identità che può essere richiesta in qualsiasi momento e portata via in caso di necessità. Potete scegliere in quali gruppi far parte e potete mantenere segreta la vostra appartenenza.

C'è un piccolo problema. Se vi è una terza parte che si intrufola quando scambiate le chiavi pubbliche, può vedere quali chiavi vengono scambiate. Anche se non vede che dimostrate la vostra identità, non potrebbe supporre che la chiave pubblica possa corrispondere alla chiave privata? E' un problema facilmente risolvibile perché la chiave che si utilizza per l'autenticazione non deve essere la stessa per quella utilizzata per stabilire un canale sicuro. È anche possibile generare una nuova chiave in modo casuale ad ogni conversazione e quindi autenticarsi con la vostra chiave privata.3

C'è di più. Se si utilizza l'algoritmo privato su un messaggio cifrato con l'algoritmo pubblico, riuscite lo stesso a decifrare il messaggio originale. Dato che i due algoritmi sono inversi, potreste anche usare il vostro algoritmo privato su un messaggio non criptato per ottenere un messaggio criptato che può essere decifrato solo dal vostro algoritmo pubblico. Il risultato è un messaggio cifrato che è veramente il mio. Questa è l'idea alla base di una firma digitale.

L'utilizzo di una firma digitale può servire alla comunità per alcuni tipi di comunicazioni, per qualunque cosa ritenga importante come stabilire la reputazione dei suoi membri. I messaggi possono essere firmati digitalmente da più persone, in modo che possano essere considerati come contratti o registrazioni di uno scambio. La storia di ogni membro può essere pubblica ed indelebile.

Una vera e propria firma digitale è un po' più complicata di quello che finora ho descritto qui. Normalmente non si cifrerebbe un intero messaggio, ma lo si farebbe solo per una parte del messaggio. Il messaggio viene inviato con il suo hash cifrato. L'effetto è lo stesso perché il messaggio è ancora indelebilmente legato al mittente.

Una comunità che unisce il segreto della crittografia, l'autenticazione a chiave pubblica e la firma digitale è una comunità volontaria legata insieme da contratti e dalla reputazione. Non richiede alcuna autorità centrale, perché i documenti di cui si avvale per stabilire la reputazione possono essere memorizzati su diversi computer. Quindi è resistente agli attacchi dello stato. L'esilio è l'unica punizione che la comunità ha a sua disposizione.

Questo è il libertarismo. E' esattamente ciò che i libertari hanno sempre agognato. Se vogliamo che la gente si abitui all'idea che possiamo mettere da parte lo stato e che la libertà di associazione e la privacy sono inerenti alla natura della realtà, tutto quello che dobbiamo fare è costruire una comunità crittografica. Non c'è bisogno di parlare in termini astratti con quelle persone che non vogliono ascoltare. Basta costruire le reti e le persone ne saranno attratte. Una volta che le persone ci si abituano, saranno loro a richiederle.

C'è un altro servizio che le persone potrebbero desiderare e che non ho previsto: l'anonimato. Un intruso non può sapere quello che state dicendo, ma potrebbe comunque sapere che voi ne siete membri. Forse una spia può diventare membro e cercare di legare una persona nella vita reale ad una chiave pubblica. Idealmente, potreste voler evitare che le vostre comunicazioni vengano legate ad una certa comunità. L'anonimato è un po' più complicato da prevedere, ma può essere raggiunto con i servizi come quelli forniti da TOR. Non voglio andare più in dettaglio su ciò che è possibile, ma basti dire che è possibile costruire molto di più sulla struttura di base che ho descritto qui.


Traduzione per il Portico Dipinto a cura di Johnny Contanti.

  • 1. Crypto-Anarchy and Libertarian Entrepreneurship, part 2: http://themisescircle.org/blog/2013/05/24/crypto-anarchy-and-libertarian-entrepreneurship-chapter-ii/
  • 2. Vedi Stallings, W., Cryptography and Network Security: Principles and Practice, 5th ed., Pearson Education, 2011 per una introduzione alla crittografia che spiega nel dettaglio tutto quello che ho introdotto qui. Oppure leggete questa voce su Wikipedia.
  • 3. Infatti usereste molto probabilmente qualcosa chiamato "chiave di scambio Diffie-Hellman" per stabilire un canale di comunicazione. Il principio è lo stesso anche se è leggermente differente rispetto al metodo che ho spiegato.