Vai al contenuto

Sicurezza a livello applicativo

Da Wikiversità, l'apprendimento libero.
lezione
lezione
Sicurezza a livello applicativo
Tipo di risorsa Tipo: lezione
Materia di appartenenza Materia: Sicurezza nelle reti
Avanzamento Avanzamento: lezione completa al 100%

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

[modifica]

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.


Citazione: Phil Zimmermann
If privacy is outlawed, only outlaws will have privacy.


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

[modifica]

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

[modifica]
Generazione e verifica della firma digitale: se l'hash (mdc) calcolato dal ricevente non coincide con il risultato della firma decifrata, allora il documento è stato modificato dopo la firma, oppure la firma non è stata generata con la chiave privata del presunto mittente.

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à

[modifica]

Alice vuole garantire confidenzialità ai suoi messaggi che scrive a Bob. Quello che deve fare è comprimere il messaggio, scegliere una chiave temporanea 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.

Confidenzialità

All'arrivo, quello che deve fare Bob è decodificare il messaggio ricevuto, decifrare la chiave temporanea con la sua chiave privata , ed usare questa chiave temporanea per decifrare il messaggio (decompressione).

Note

[modifica]

PGP prevede due diverse funzionalità:

  • Cifratura;
  • Firma digitale.

Queste due funzionalità possono essere usate insieme, oppure da sole. Nel caso si voglia averle entrambe, è opportuno firmare il MAC del testo originale, non del cifrato, e poi cifrare anche questa firma.

La codifica finale, Radix64, è necessaria per convertire il cifrato in caratteri ASCII; i sistemi di posta interpretano certe sequenze di bit come dei comandi, quindi questi bit non devono apparire all'interno di una mail; se questo è semplice che accada con del normale testo, è molto più difficile evitarlo con file binari. Quello che fa Radix64 è semplicemente prendere il file binario in blocchi di 6 bit ed espanderli fino a farli diventare dei blocchi di 8 bit, con una sequenza sicuramente accettata dai server di posta. Questa procedura, però, porta ad un'espansione degli allegati (e quindi, anche del testo) del 33%.

L'implementazione più usata di OpenPGP è la GnuPG, che usa:

  • RSA come algoritmo preferenziale per la cifratura asimmetrica, ma anche DSS e ElGamal;
  • AES come algoritmo preferenziale per la cifratura simmetrica, ma anche 3DES, CAST5, Blowfish e Twofish;
  • SHA-256 come algoritmo preferenziale per la firma, ma anche MD5, SHA vari e RIPEMD160;
  • BZIP2 come algoritmo preferenziale per la compressione, ma anche ZIP e Zlib.

Un'altra implementazione è quella della PGP Corporation, giunta alla nona versione.

Gestione delle chiavi

[modifica]

Ogni utente PGP ha due portachiavi: uno pubblico ed uno privato.

Il portachiavi pubblico contiene tutte le chiavi pubbliche che conosce, di tutte le persone con cui ha comunicato o con cui prevede di comunicare; sono salvate in un database, indicizzate con il loro KeyID e con lo UserID.

Il portachiavi privato, al contrario, contiene tutte le chiavi private dell'utente; anche queste chiavi sono indicizzate con il loro KeyID, e sono cifrate con un algoritmo simmetrico che usa come chiave l'MDC di una passphrase.

Bisogna porre attenzione su dove vengono salvate le chiavi private, perché un malintenzionato che si appropria della versione cifrata può comunque attaccare il testo, sperando di ricavare le chiavi originali. Per ovviare a grosse noie dovute al furto delle chiavi private, conviene pubblicare certificati che durino breve tempo, qualche anno al massimo: se in questo lasso di tempo vengono perse, infatti, potrebbero ancora essere considerate valide da un software che non controlla le liste di revoca delle certification authority.

Per quanto riguarda i certificati, abbiamo già visto che, ad oggi, la rete delle certification authority ha una struttura anarchica/oligarchica, nella quale tutti possono agire da root CA, se vogliono.

Esistono due tipi di certificati: quelli che hanno la funzione di creare altre CA e quelli che servono per identificare gli utenti finali; non bisogna confondere i due certificati, perché se un utente normale firma un certificato con la sua chiave certificata da una CA di fiducia, non vuol dire che il nuovo certificato sia di fiducia, anzi.

Per quanto riguarda la revoca delle chiavi, bisogna porre particolare attenzione. Quando si genera una coppia di chiavi pubblica/privata, è bene generare anche un certificato di revoca; un certificato di revoca non è altro che il KeyID della chiave pubblica, seguita da un messaggio standard, il revocation code. Questo certificato deve essere generato subito, e poi salvato in un luogo sicuro: nel momento in cui si dovessero perdere le chiavi private, oppure dovessero essere rubate, quel certificato sarà l'unico strumento utilizzabile per avvertire il mondo che tutti i messaggi firmati con quella chiave non devono essere considerati validi. Attenzione, se questo certificato viene rubato, chiunque può revocare le vostre chiavi.

S/MIME

[modifica]

S/MIME, acronimo di Secure/Multipurpose Internet Mail Extensions è uno standard per la crittografia a chiave pubblica e la firma digitale di messaggi di posta elettronica in formato MIME, adottato dai moderni client di posta. MIME, descritto nel RFC 1341, permette di inserire in un qualsiasi messaggio di posta elettronica oltre al semplice testo contenuti multimediali, quali immagini, video e audio.

Fu sviluppato dalla RSA Data Security Inc. basato sullo standard PKCS#7 per il formato dei dati ed X.509v3 per il formato dei certificati digitali.

Caratteristiche

[modifica]

S/MIME è simile a PGP, offre gli stessi servizi, ma adotta formati diversi ed incompatibili. Diversamente da PGP, il quale usa un sistema web of trust per la distribuzione delle chiavi pubbliche, i corrispondenti che usano S/MIME necessitano di una Certification Authority che compie diverse operazioni di autenticazione e validazione del richiedente fino al rilascio di un certificato digitale.

Collegamenti esterni

[modifica]