# Sicurezza a livello applicativo

Vogliamo portare la sicurezza a livello applicativo, creando sicurezza crittografica, per esempio nella posta elettronica. Gli strumenti a disposizione sono
* PGP, Pretty Good Privacy;
* S/MIME.
La sicurezza dei messaggi deve essere mantenuta dal mittente fino al destinatario, non più, come per WPA, WEP, UMTS o GSM, soltanto nel campo delle stazioni wireless. I problemi che si presentano con questo approccio sono diversi, legati a:
* Interoperabilità tra le applicazioni, specie nel caso della posta, dove esistono tanti client diversi;
* Sistemi intermedi, spesso legittimi, che hanno bisogno di accedere ai dati per fare analisi antivirus o antispam;
* Problema della crittografia da uno a molti.

## Pretty Good Privacy

Il protocollo PGP prevede la possibilità di usare firme digitali, confidenzialità, compressione dei dati e codifica di qualsiasi flusso di dati come se fossero caratteri ASCII da 8 bit. In origine, fu pensato per la posta elettronica, e poi esteso per tutti i tipi di file, compresi quelli binari; PGP può essere usato anche per cifrare i file sull'hard disk di un computer.
La necessità era quella di cifrare i messaggi, puntando ad un utilizzo sistematico della cifratura, non tanto per una questione di privacy di tutti, ma più che altro come scudo, perché i messaggi cifrati sono facilmente distinguibili dagli altri, quindi gli attaccanti sanno su cosa concentrarsi; al contrario, se tutto è cifrato, gli attaccanti non hanno alcun metodo per discriminare i messaggi interessanti da quelli inutili.

### Storia del PGP e di Zimmermann

Nel 1991, il PGP viene pubblicato sulla USENET americana, in forma binaria e gratuita. Il consiglio era quello di copiare e distribuire quel software, per rendere la cifratura un oggetto di massa; attraverso internet, però, il PGP lascia i confini degli Stati Uniti d'America.
Il PGP è un software che sfrutta algoritmi di RSA e IDEA, protetti da brevetto software, ma validi soltanto negli USA. Inoltre, la legge degli USA in quel periodo vietava l'esportazione di algoritmi di cifratura al di fuori degli stati dell'unione, equiparandoli a materiale bellico.
Tutto questo avvenne mentre girava voce che gli Stati Uniti stavano preparando una legge per vietare la cifratura.
Nel 1993, gli Stati Uniti fanno causa a Zimmermann, perché ha permesso l'esportazione di software non esportabile. Con questa motivazione, Zimmermann viene arrestato.
Nel 1995, a nome di Zimmermann, viene pubblicato il libro PGP: Source Code and Internals, che non contiene altro che il codice sorgente del PGP, stampato con caratteri facilmente interpretabili dai software OCR. Questo escamotage permette di mettere in luce una contraddizione interna delle leggi americane: da un lato la stampa è libera, dall'altro lato quello che c'è scritto su quel libro, se Zimmermann è in galera, non può essere stampato.
Il risultato netto di questa manovra è che, nel 1996, Zimmermann viene liberato, e gli Stati Uniti rinunciano alla causa ed alla legge vieta-cifratura. Purtroppo, però, il fatto che il libro sia stato scannerizzato diverse volte porta alla formazione di dialetti PGP, diverse implementazioni con e senza gli algoritmi di IDEA ed RSA, con varianti più o meno casuali e ricercate, che alla fine esistono tantissime versioni di PGP, nessuna delle quali compatibile con le altre.
Soltanto nel 1998 OpenPGP viene standardizzato con la RFC 2440.

### Firme digitali

Per fare una firma digitale, bisogna firmare qualcosa con una chiave privata. Quello che si fa è firmare il digest MDC del messaggio da spedire, firma poi messa in coda al messaggio originale. A questa operazione, poi, seguono compressione e codifica, per permettere al messaggio di essere immune da controlli antivirus e da modifiche fatte nei vari server.
All'arrivo, il messaggio deve essere decodificato e decompresso: il messaggio è leggibile, la firma può essere verificata decifrando con la chiave pubblica del mittente, e confrontando con l'MDC del messaggio ricevuto.

### Confidenzialità

Alice vuole garantire confidenzialità ai suoi messaggi che scrive a Bob. Quello che deve fare è comprimere il messaggio, scegliere una chiave temporanea $K_{t}$ da usare come chiave per la cifratura, dopodiché proteggere la chiave temporanea, cifrandola con la chiave pubblica di Bob. La chiave cifrata viene concatenata al messaggio, il tutto viene codificato e spedito al server di posta.
All'arrivo, quello che deve fare Bob è decodificare il messaggio ricevuto, decifrare la chiave temporanea $K_{t}$ con la sua chiave privata $K_{privB}$, ed usare questa chiave temporanea per decifrare il messaggio (decompressione).