# Crittografia/Cifrature asimmetriche

Crittografia
Copertina Tutti i moduli · Sviluppo
    Copertina
Parte I: Introduzione alla Crittografia
* Introduzione alla crittografia
* Storia della crittografia
** Crittografia classica
** Crittografia medievale
** Crittografia dal 1800 alla seconda guerra mondiale
** Crittografia durante la seconda guerra mondiale
** Crittografia contemporanea
** Crittografia nella cultura popolare
** Linea temporale degli eventi importanti
* Concetti fondamentali
** Principio di Kerckhoffs
** Obiettivi della crittografia
** Obiettivi della crittanalisi
** Il ruolo della crittografia nella sicurezza informatica
** Cifrature simmetriche
** Cifrature asimmetriche
** Funzioni Hash
** Distribuzione e autenticazione della chiave
** Difetti e debolezze comuni
Parte II: Progettare cifrari
* Principi base nella progettazione
* Piccoli segreti nascondono segreti più grandi
* algoritmi aperti e il valore del Peer-Review
* Pensa come un crittoanalista
* La matematica che devi conoscere
* La sicurezza informatica non è solo la cifratura
* Un codice non violato non è necessariamente non violabile
Parte III: Violare cifrature
* I principi base nel violare cifrari
* Debolezze
** La proporzionalità della segretezza
*** La lunghezza della chiave
*** Qualità della sorgente casuale
*** Gli effetti del testo in chiaro sul testo cifrato
** Debolezze statistiche
** Implementazioni errate
** Peer-review non adeguato
** Ingegneria sociale e coercizione
* Attacchi
** Attacco di forza bruta
** Analisi della frequenza
** Indice delle coincidenze
** Crittanalisi lineare
** Crittanalisi differenziale
** Attacco incontro nel mezzo
* Come furono violate le cifrature storiche
** Violare i cifrari a trasposizione
** Violare il cifrario di Cesare
** Violare la macchina Enigma
** Violare il cifrario a permutazione
** Violare il cifrario di Vigenère
Parte IV: Usare cifrature
* Applicazioni della crittografia
** Firma elettronica
*** Firma elettronica
*** DSA
** Moneta elettronica
** Voto elettronico
** DRM
** Anonimato
* Cifrature classiche
** Cifrario di Beale
** Cifrari a trasposizione
** Cifrario di Cesare
** Cifrario Atbash
** Cifrario a chiave autocifrante
** Cifrario di Playfair
** Sostituzione polialfabetica
** S-box
** Scytale
** Cifrario a sostituzione
** Cifrario a permutazione
** Cifrario di Vernam
** Cifrario di Vigenère
* Cifrature contemporanee
** Cifrature simmetriche
*** Macchina Enigma
*** One-time pads
*** Data Encryption Standard (DES)
*** Advanced Encryption Standard
** Cifrature asimmetriche
*** Introduzione alla cifratura a chiave pubblica
*** RSA
*** ElGamal
*** Curva ellittica
** Funzioni di hash
*** MD5
*** SHA-1
*** RIPEMD-160
*** Tiger
* Protocolli
** Protocolli di autentificazione
*** Kerberos
** Protocolli per lo scambio chiave
*** Diffie-Hellman
** Comunicazioni sicure
*** SSL, SSH
Parte V: La crittografia e la società
* La natura mutevole dell'uso della crittografia
* Crittografia, governi e leggi
* Aspettative dell'utente normale
* Snake Oil
Parte VI: Miscellanea
* Possibilità future
** Crittografia quantistica
** Miglioramento del calcolo parallelo dei computer
* Glossario dei termini
* Letture addizionali
* Appendice A: background matematico
** Crittografia/Teoria dei numeri
** Crittografia/Teoria dei gruppi
** Crittografia/Complessità computazionale
Modifica il sommario
La crittografia asimmetrica, conosciuta anche come crittografia a coppia di chiavi, crittografia a chiave pubblica/privata o anche solo crittografia a chiave pubblica, è un metodo di crittografia. Come si evince dal nome, ogni attore coinvolto possiede una coppia di chiavi:
* la chiave privata, personale e segreta, viene utilizzata per decodificare un documento criptato;
* la chiave pubblica, che deve essere distribuita, serve a criptare un documento destinato alla persona che possiede la relativa chiave privata.
L'idea base della crittografia con coppia di chiavi diviene più chiara se si usa un'analogia postale:
* Il mittente A chiude il pacco con un lucchetto di cui possiede la chiave, conserva la chiave e spedisce il pacco al destinatario B.
* B riceve il pacco (che non può aprire perché non ha la chiave), lo chiude nuovamente con un lucchetto di cui conserva a sua volta la chiave e rispedisce il pacco ad A.
* A toglie il suo lucchetto e rispedisce il pacco a B, che può finalmente aprire il pacco, chiuso ormai solo con il lucchetto da lui scelto.
Questo semplice metodo condivide alcune caratteristiche con la crittografia a chiave pubblica: si tratta di un sistema che risolve efficacemente il classico problema della crittografia tradizionale. Se la sicurezza del sistema dipende dalla segretezza della chiave di codifica utilizzata, allora è necessario almeno un canale sicuro attraverso il quale trasmettere la chiave.

## Differenze con la crittografia tradizionale

Nella crittografia tradizionale viene utilizzata un'unica chiave sia per codificare, sia per decodificare i messaggi. Le informazioni (la chiave e l'algoritmo) necessarie per chi deve inviare il messaggio sono quindi identiche a quelle necessarie a chi deve riceverlo. Per concordare una chiave con il proprio interlocutore c'è bisogno di mettersi preventivamente in contatto con lui incontrandolo di persona, telefonandogli, scrivendogli una lettera, mandandogli un messaggero o in qualsiasi altro modo. In qualsiasi caso, esiste il pericolo che la chiave venga intercettata durante il tragitto, compromettendo quindi l'intero sistema comunicativo.
La crittografia a chiave pubblica permette invece a due (o più) persone di comunicare in tutta riservatezza senza usare la stessa chiave e anche se non si sono mai incontrate precedentemente.

## Utilizzo della crittografia asimmetrica

Per utilizzare questo tipo di crittografia è necessario creare una coppia di chiavi, una chiave pubblica ed una chiave segreta. La chiave pubblica serve unicamente per codificare il messaggio, mentre quella segreta serve unicamente per decodificarlo. È come se una cassaforte avesse due chiavi distinte, una usata per aprirla e una per chiuderla. A questo punto il gioco è fatto: ogni utilizzatore si crea la propria (o le proprie, in casi particolari) coppia di chiavi. La chiave segreta viene tenuta, appunto, segreta e non viene mai rivelata a nessuno (nemmeno alle persone con le quali si comunica); viceversa, la chiave pubblica viene diffusa ovunque e in ogni modo: può essere aggiunta automaticamente in coda a ciascun proprio messaggio nelle varie conferenze elettroniche cui si partecipa, o può essere depositata in archivi pubblici (keyserver) a disposizione di chi la desideri. È importante che la chiave pubblica sia liberamente accessibile, perché chiunque voglia comunicare con la persona che l'ha generata dovrà preventivamente munirsi di questa, con la quale critterà il messaggio.
Un altro possibile utilizzo della coppia chiave pubblica/privata riguarda l'idea di firma digitale: in pratica un utente cifra un messaggio con la propria chiave privata; gli altri, una volta ricevuto tale messaggio, riescono a decifrarlo solo con la chiave pubblica relativa a quel particolare mittente (della quale devono essere preventivamente a conoscenza), per cui possono risalire con certezza alla sua identità.

## Problemi di sicurezza

In realtà il problema della sicurezza riguardante la comunicazione non è del tutto risolto con questo tipo di crittografia, perché non si può essere certi che la chiave (per esempio una chiave presente sul keyserver) appartenga davvero alla persona nominata nell'intestazione della chiave stessa. Una soluzione resta sempre il contatto fisico tra i due interlocutori, i quali, scambiandosi le chiavi pubbliche hanno una reciproca autenticazione. PGP, il primo sistema crittografico di massa che si avvale delle idee della crittografia asimmetrica consiglia, dopo essersi scambiati le chiavi per e-mail o altro mezzo, di telefonarsi e di leggersi i fingerprint (letteralmente "impronte digitali", ovvero un codice (codice di hash) associabile in modo sicuro alla chiave stessa, ma da cui non si può ricavare la chiave); in questo modo, riconoscendo le rispettive voci, si certifica anche la validità della chiave ottenuta.

## Breve panoramica sull'implementazione

Il principio generale della crittografia asimmetrica ha una solida base matematica che lo giustifica; tale base, riassunta e semplificata all'estremo, si fonda sull'uso di un problema complesso, ovvero un'operazione matematica semplice da eseguire ma dal cui risultato è difficile risalire agli argomenti della stessa. L'esempio classico è il problema della fattorizzazione di un numero (trovare i numeri primi che lo producono se moltiplicati tra loro, ad esempio fattorizzando il numero 1001 si ottengono i seguenti fattori primi: 7, 11, 13) usata nel primo e più famoso sistema crittografico a chiave pubblica: RSA. Le conoscenze di matematica pura sviluppate dall'uomo negli ultimi secoli hanno reso sempre più efficiente fattorizzare, ma nessuno è mai riuscito a far fare quel "salto" che porta il problema da complesso a non essere più complesso, il problema diventa quindi intrattabile per numeri oltre una certa dimensione, attualmente per la crittografia RSA vengono considerati "sicuri" numeri di almeno 300 cifre (chiavi da 1024 bit e oltre). Altro esempio di problema complesso è il logaritmo discreto, usato nella nascente crittografia ellittica.
La crittografia è comunque una scienza basata sulle probabilità: i problemi complessi vengono considerati complessi basandosi sul fatto che centinaia di anni di studio non hanno saputo risolverli in modo rapido (ricordiamoci che c'è sempre almeno un modo "non rapido" per risolvere un problema: provare a fare l'operazione diretta con tutti i numeri fino alla dimensione necessaria; questo tipo di soluzione in genere non è neanche contemplata in quanto il tempo necessario aumenta vertiginosamente con la dimensione dei numeri usati), ma nessuno dei problemi usati in crittografia ha un teorema che ne dimostra la complessità (l'unico sistema crittografico dimostrato è lo One Time Pad, ma sfortunatamente è un sistema simmetrico - ovvero non a chiave pubblica - ed estremamente scomodo da usare).

## Voci correlate

* Crittografia simmetrica
* OpenPGP