Cap3


Home
Su
Presentazione
Cap1
Cap2
Cap3
Cap4
Cap5
Cap6
Cap7
Cap8
Appendice

3 - STANDARD DI POSTA ELETTRONICA SICURA

La posta elettronica è lo strumento base delle comunicazioni digitali. Tuttavia per la struttura stessa della rete Internet i messaggi di posta elettronica viaggiano in chiaro e passano per diversi server prima di arrivare a destinazione, cosicché l’intercettazione delle e-mail è un compito piuttosto facile, e la lettura del contenuto non presenta nessuna difficoltà.

 

Inoltre il mittente del messaggio può essere facilmente contraffatto e il contenuto dell’e-mail può essere manomesso, oltre che osservato, consentendo così la creazione di e-mail contraffatte.

 

Per prevenire questi rischi, e dotare la posta elettronica di nuovi servizi, sono necessari servizi di: autenticazione del mittente, firma elettronica e autenticazione del messaggio, cifratura del messaggio, gestione di ricevute autenticate del messaggio (non-ripudio) e dell’orario di ricezione (time-stamping).

 

I due principali standard di posta elettronica sicura sono: PGP-Mail ed S/MIME.

E’ opportuno analizzare in dettaglio i due standard e confrontare le diverse proposte di PKI all’interno delle quali essi operano.

 

3.1 - PGP-Mail

PGP è l’acronimo di Pretty Good Privacy, ed è un software sviluppato agli inizi degli anni Novanta per consentire lo scambio di posta elettronica sicura.

 

PGP si basa sugli algoritmi di crittografia a chiave pubblica RSA e a chiave segreta IDEA, e consente la cifratura e la firma digitale dei messaggi di posta elettronica.

 

Questo programma divenne ben presto lo “standard de facto” per l’utilizzo della posta elettronica sicura, grazie al fatto di essere semplice, innovativo, efficiente, e grazie ad una politica di commercializzazione molto efficace: esso venne diffuso via Internet, e commercializzato dapprima con una licenza shareware e poi con una licenza freeware.

 

Poiché PGP non riconosce l’esistenza di enti certificatori, ed è estraneo al concetto di certificati di chiave pubblica, esso fa uso di un diverso meccanismo di diffusione e validazione delle chiavi pubbliche.

 

Gestione e Validazione delle chiavi pubbliche in PGP

Ogni utente, oltre ad avere una propria coppia di chiavi pubblica/privata, ha anche una lista di chiavi pubbliche di altri utenti, con cui intende scambiare posta sicura, che ritiene affidabili. Per evitare manomissioni, questa lista (detta keyring) è memorizzata e firmata con la propria chiave privata. In realtà più che firmare l’intera lista, l’utente aggiunge la propria firma a ciascuna delle chiavi pubbliche che ritiene affidabili.

 

PGP consente lo scambio tra utenti delle liste di chiavi pubbliche ritenute valide, ciascuna firmata con la propria chiave privata, e questo fornisce un meccanismo per valutare l’affidabilità della chiave pubblica di un utente sconosciuto in base alle firme apposte da altri utenti ritenuti affidabili.

 

Al momento dell’accettazione di una chiave pubblica come affidabile, e dunque dell’apposizione della propria firma a quella chiave, PGP consente di aggiungere una proprietà che caratterizza il livello di affidabilità che si attribuisce a quella chiave pubblica. I possibili valori sono:

 

· Completamente Affidabile: qualunque altra chiave firmata da questa è ritenuta affidabile.

· Parzialmente Affidabile: perché un’altra chiave firmata da questa sia ritenuta affidabile è necessario svolgere ulteriori verifiche.

· Non affidabile, Sconosciuto: questa chiave non viene utilizzata per valutare l’affidabilità di altre chiavi pubbliche.

 

Questo meccanismo di distribuzione delle chiavi pubbliche va sotto il nome di “Web of Trust”, ed è la forma di PKI che PGP si è dato.

 

Web of Trust contro PKI

La Web of Trust implementata da PGP elimina la necessità di enti certificatori; non c’è bisogno di attendere l’emissione di un certificato di chiave pubblica per iniziare a cifrare/firmare i messaggi. La struttura è decentralizzata ed i costi operativi, anche in termini di tempo, sono sicuramente più bassi rispetto al meccanismo di validazione di una public key infrastructure.

Tuttavia questo meccanismo è più rischioso perché non c’è un controllo diretto sulla validità della chiave in questione, ma anzi si fa affidamento su una catena di affermazioni di validità di cui non si ha il controllo diretto. Inoltre essa pone dei problemi tecnici nel caso in cui si debba essere revocare una chiave pubblica.

 

Con PGP dunque non si ha una garanzia totale circa l’affidabilità di una chiave pubblica, ma piuttosto un indice di affidabilità, tanto più alto quanto maggiore è il numero delle firme affidabili apposto a quella chiave.

 

 

La proposta di PGP-Mail non è mai stata ratificata come standard, questo ne ha impedito l’accettazione ufficiale da parte di molte organizzazioni, e ne ha limitato lo sviluppo. La sua popolarità sta rapidamente scemando a favore del nuovo standard S/MIME.

 

3.2 - S/MIME

S/MIME si va affermando come lo standard definitivo per lo scambio di posta elettronica sicura; esso fa uso della crittografia a chiave pubblica, dei certificati X.509, e si inserisce perfettamente all’interno di una architettura PKI.

S/MIME è già ampiamente supportato da molte applicazioni, gode di un vasto supporto commerciale, e la sua diffusione è in continuo aumento.

 

Pur essendo uno standard “de facto”, ufficialmente S/MIME non è ancora stato dichiarato standard a tutti gli effetti; le sue specifiche sono state sottoposte agli organismi competenti sotto forma di RFC e allo stato attuale la proposta è sotto forma di Internet Draft.

Non c’è dubbio comunque che S/MIME verrà ratificato come standard in tempi molto brevi, e con modifiche minime rispetto alla sua forma attuale.

 

Poiché l’intera struttura di questa proposta è basata sulla architettura MIME è opportuno esaminare preliminarmente lo standard MIME.

 

3.2.1 - LO STANDARD MIME

 

Cos’è MIME

L’acronimo MIME (Multipupose Internet Mail Estensions) indica un insieme di specifiche per la formattazione dei messaggi di posta elettronica universalmente accettato, il cui scopo è quello di consentire che i messaggi transitino, nel loro viaggio da mittente a destinatario, attraverso diversi sistemi di elaborazione senza subire danneggiamenti o perdite di dati.

La codifica MIME si preoccupa di modificare i dati da trasmettere per consentire la trasmissione di file binari, immagini o documenti che fanno uso di caratteri con codifiche estese e potenzialmente pericolose per il transito su particolari sistemi o gateway.

MIME definisce inoltre un insieme di identificatori (“tag”) che consentono di trasmettere, all’interno dello stesso messaggio di posta elettronica, diversi oggetti (quali uno o più messaggi di testo, file binari, immagini,etc..) opportunamente separati in campi, e consente di specificare il tipo di contenuto presente in ciascun campo del messaggio.

 

La codifica MIME

Lo standard MIME descrive la struttura dei messaggi di posta elettronica.

 

La struttura dati MIME è organizzata in diverse entità (parts), ed è di tipo ricorsivo, cioè ogni singola entità può contenerne altre opportunamente formattate ed etichettate secondo le specifiche MIME.

Ciascuna entità è caratterizzata da una intestazione (header) e da un contenuto (Body). Nell’intestazione è presente un campo“Content-Type” che descrive il contenuto della entità in questione; la classificazione avviene specificando dapprima il contesto generale (es. messaggio di testo) e in seguito specificando più in dettaglio la codifica utilizzata (tramite un campo sub-type).

Esempio:

 

Content-Type: text/plain;

 

text specifica che si ha a che fare con del testo.

/plain specifica che si tratta di testo semplice, non formattato.

 

Esempio:

 

Content-Type: image/xyz;

 

specifica che si tratta di un immagine formattata secondo la codifica xyz

 

 

Il contenuto di un’entità può a sua volta contenere un’altra entità MIME, anch’essa costituita di un header e un body, che trasporti informazioni specifiche e classificate dal suo Content-Type specifico. Questo meccanismo consente l’incapsulamento e la strutturazione all’interno dello stesso messaggio di informazioni anche molto complesse, e garantisce una grande flessibilità ed estensibilità.

 

In MIME sono specificate due entità speciali, dette “composite top-level entities”, che forniscono il contenitore per tutti gli altri tipi di entità: message e multipart.

Un messaggio di posta elettronica in codifica MIME dovrà dunque avere come “scheletro” più esterno necessariamente una di queste due strutture, potrà poi contenere altri oggetti secondo le regole di incapsulamento appena viste.

 

L’entità message contiene tutti gli header definiti nello standard RFC 822 per i messaggi di posta elettronica, e il suo corpo (Body) può, se necessario, contenere a sua volta altre entità codificate MIME.

 

Esempio di un semplice messaggio MIME di tipo Message

 

From: "Bruno Coletta" <brunocoletta@inwind.it>

To: <Francesco@xyz.it>

Subject: Ciao

Date: Wed, 11 Oct 2000 14:19:02 +0200

MIME-Version: 1.0

Content-Type: text/plain;

charset="iso-8859-1"

Content-Transfer-Encoding: 7bit

 

Ciao Fra, come stai?

 

 

 

 

La entità multipart consente di inviare all’interno dello stesso messaggio di posta diverse strutture MIME (entità) tra loro indipendenti e ciascuna con la propria codifica.

 

 

Esempio di messaggio MIME di tipo multipart

 

Qui sotto è riportato un semplice messaggio di posta elettronica che contiene del testo formattato in HTML, ma contemporaneamente contiene anche lo stesso testo non formattato, per permetterne la lettura ai client che non supportano la formattazione HTML.

Questo risultato è ottenuto con una codifica MIME multipart/alternative ossia una codifica che raggruppa assieme due messaggi indipendenti (multipart) ma che contengono lo stesso messaggio in codifiche diverse (alternative), cosicché il client di posta finale è libero di scegliere la codifica che preferisce.

 

From: "Bruno Coletta" <brunocoletta@inwind.it>

To: <Francesco@xyz.it>

Subject: Testo HTML

Date: Thu, 12 Oct 2000 12:04:45 +0200

MIME-Version: 1.0

Content-Type: multipart/alternative;

boundary="----=_NextPart_000_002E_01C03444.9CBBD5B0"

 

This is a multi-part message in MIME format.

 

------=_NextPart_000_002E_01C03444.9CBBD5B0

Content-Type: text/plain;

charset="iso-8859-1"

Content-Transfer-Encoding: quoted-printable

 

Prova di testo HTML

 

------=_NextPart_000_002E_01C03444.9CBBD5B0

Content-Type: text/html;

charset="iso-8859-1"

Content-Transfer-Encoding: quoted-printable

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML><HEAD>

<META content=3D"text/html; charset=3Diso-8859-1" =

http-equiv=3DContent-Type>

<META content=3D"MSHTML 5.00.2920.0" name=3DGENERATOR>

<STYLE></STYLE>

</HEAD>

<BODY>

<DIV><FONT face=3DArial size=3D2><STRONG>Prova di testo=20

HTML</STRONG></FONT></DIV><FONT face=3DArial></FONT><FONT=20

size=3D2></FONT></BODY></HTML>

 

------=_NextPart_000_002E_01C03444.9CBBD5B0-

 

 

La separazione delle diverse entità avviene grazie a dei tag di separazione, che contengono dei numeri di sessione appositamente generati, e diversi di messaggio in messaggio.

 

 

 

 

Oltre a queste speciali top-level entities, appena discusse (“message” e “multipart”), lo standard MIME descrive con precisione la semantica e la sintassi di diversi altri Content-Type quali:

· Text: il contenuto (body) di questa entità è di tipo testuale sono previsti diversi sub-type, quali:

o Plain - testo semplice

o Enriched - testo formattato secondo un standard altrove definito

o Altri formati specifici di Word Processor o applicazioni

(es. text/Microsoft Word 7.0, text/Corel WordPerfect 4.0, etc…)

· Image : solo alcuni formati di base vengono supportati come predefiniti, è poi possibili estendere questo content-type con la definizione di sub-type specifici per i formati che si vogliono supportare.

· Audio

· Application : questo content-type consente di associare le informazioni binarie trasportate nel contenuto dell’entità in questione con qualunque tipo di applicazione che sappia come interpretarle. Nelle specifiche S/MIME si fa ampio uso di questo identificatore per contraddistinguere i campi contenenti dei messaggi cifrati o firmati (application/pkcs7-mime) in modo che possano essere gestiti dall’opportuna applicazione di crittografia, che si occupa di decifrare o verificare il contenuto di questo campo.

 

3.2.2 - LE ESTENSIONI S/MIME

S/MIME è l’acronimo di Secure/MIME, ed è una estensione della codifica MIME per l’utilizzo di servizi di posta elettronica sicura.

I servizi introdotti sono

· Cifratura del contenuto del messaggio

· Autenticazione del mittente

· Firma elettronica e verifica di integrità del messaggio

· Ricevute Sicure e Non Ripudio

 

L’aggiunta di queste nuove funzionalità allo standard MIME avviene attraverso la definizione di nuovi “tag” di formattazione MIME, che identificano il contenuto di questi campi come “cifrato” o “firmato”, etc…

L’implementazione vera e propria di queste funzionalità si basa invece su tecniche di crittografia a chiave pubblica e sull’utilizzo rigoroso di Certificati di Chiave pubblica in standard X.509.

 

Le specifiche S/MIME contenute nei documenti RFC 2311 e RFC 2312, descrivono dettagliatamente alcuni nuovi Content-Type MIME utilizzati per associare il contenuto di un campo MIME a delle applicazioni di crittografia a chiave pubblica che consentano di estendere la posta elettronica con i servizi di cifratura e autenticazione.

 

S/MIME e PKCS

Per quanto riguarda le operazioni di crittografia S/MIME si basa sulle specifiche internazionali PKCS, tra cui le più utilizzate sono:

· "PKCS #1: RSA Encryption", [PKCS-1]

· "PKCS #7: Cryptographic Message Syntax", [PKCS-7]

· "PKCS #10: Certification Request Syntax", [PKCS-10]

 

I messaggi S/MIME non sono altro che la combinazione di dati in formato MIME e oggetti in formato PKCS secondo queste regole:

 

· I dati che devono essere protetti sono sempre delle entità MIME tradizionali

· Il risultato delle operazioni di crittografia effettuate è un oggetto in formato PKCS

· l’oggetto risultato delle operazioni svolte viene incapsulato all’interno di un’entità MIME opportunamente formattata per descrivere il tipo di oggetto che contiene.

 

 

I nuovi Content-Type

Vengono dunque definiti i nuovi content-type:

MIME Type File Extension

 

application/pkcs7-mime .p7m

(signedData, envelopedData)

 

application/pkcs7-mime .p7c

(degenerate signedData

"certs-only" message)

 

application/pkcs7-signature .p7s

 

application/pkcs10 .p10

 

 

Alcuni di questi nuovi formati vengono utilizzati per lo scambio di certificati di chiave pubblica, per l’invio di certification request o per altri scopi di gestione dei certificati.

Il formato application/pkcs7-mime si occupa della codifica MIME di oggetti cifrati e firmati. Esso possiede due sub-type che specificano quale delle due funzioni è stata applicata ai dati in esso contenuti:

· smime-type=enveloped-data identifica il contenuto come cifrato

· smime-type=signed-data identifica il contenuto come firmato

Inoltre, assieme alle etichette MIME, viene impostata l’estensione .p7m per il file in attachment contenente il codice cifrato. Questa è un ulteriore informazione circa il contenuto del campo MIME che garantisce la corretta interpretazione dei dati nel caso in cui il contenuto di questo campo venga salvato su file e perda la formattazione di tipo, l’estensione allora fornirà un’indicazione utile per la decodifica.

 

3.2.3 - CRITTOGRAFIA E FIRMA DIGITALE CON S/MIME

Il processo di cifratura o firma dei dati è svolto da una applicazione di crittografia incaricata di questo compito, o a volte dallo stesso Client di posta elettronica.

Il risultato di questo processo verrà poi formattato in un opportuno campo MIME secondo le specifiche S/MIME viste nel paragrafo precedente.

Analogamente in fase di decifratura o verifica il Client effettua tutte le operazioni di decodifica MIME, e demanda le operazioni di crittografia ad un opportuno modulo o ad una applicazione esterna.

Qui di seguito sono riportati due esempi di messaggi di posta elettronica sicura S/MIME: il primo messaggio è cifrato, e il secondo è firmato.

 

 

Esempio di messaggio S/MIME cifrato:

 

Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m

Content-Transfer-Encoding: base64

Content-Disposition: attachment; filename=smime.p7m

 

rfvbnj756tbBghyHhHUujhJhjH77n8HHGT9HG4VQpfyF467GhIGfHfYT6

7n8HHGghyHhHUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jH7756tbB9H

f8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4

0GhIGfHfQbnj756YT64V

 

Si può notare come nell’header il content-type specifichi che il “blocco” apparentemente incomprensibile è in realtà del testo cifrato (“enveloped-data”) che per essere decifrato dovrà essere inviato ad un opportuno modulo di decodifica.

 

Esempio di messaggio S/MIME firmato:

 

Content-Type: application/pkcs7-mime; smime-type=signed-data;

name=smime.p7m

Content-Transfer-Encoding: base64

Content-Disposition: attachment; filename=smime.p7m

 

567GhIGfHfYT6ghyHhHUujpfyF4f8HHGTrfvhJhjH776tbB9HG4VQbnj7

77n8HHGT9HG4VQpfyF467GhIGfHfYT6rfvbnj756tbBghyHhHUujhJhjH

HUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jH7756tbB9H7n8HHGghyHh

6YT64V0GhIGfHfQbnj75

 

Analogamente, nell’header di questo messaggio, il content-type specifiche si tratta di testo firmato (“signed-data”).

 

 

Nel caso in cui si voglia effettuare la firma del documento e cifrare il documento appena firmato, si procede applicando ricorsivamente i due procedimenti precedenti:

 

1) il documento originale in formato MIME con content-type: text/plain (ad esempio) viene firmato: il risultato è un oggetto in formato PKCS #7

2) questo oggetto viene formattato in un’entità MIME con content-type: application/pkcs7-mime; smime-type=signed-data;

3) l’entità MIME viene cifrata: e il risultato è un oggetto PKCS #7

4) questo oggetto viene formattato in un’entità MIME con content-type: application/pkcs7-mime; smime-type= enveloped-data;

 

E’ dunque evidente la flessibilità e l’estensibilità di questa impostazione, che consente, con grande semplicità, l’utilizzo di molte configurazioni.

 

 

3.2.4 - I CERTIFICATI X.509v3 E L’ S/MIME

Per semplificare la gestione dei percorsi di validazione dei certificati, l’S/MIME prevede una serie di accorgimenti nell’invio dei messaggi di posta elettronica.

 

Generalmente l’invio di un messaggio contenente del contenuto firmato è accompagnato dall’invio del proprio certificato di chiave pubblica in allegato al messaggio stesso. Il destinatario del messaggio firmato può disporre così immediatamente del certificato di chiave pubblica del mittente e può facilmente verificare la firma del messaggio ricevuto (dopo aver verificato la validità del messaggio allegato).

 

Questo comodo meccanismo può però essere ulteriormente raffinato. Spesso infatti il destinatario non può verificare direttamente la validità del certificato del mittente allegato con il messaggio, perché non possiede la chiave pubblica della sub-CA che ha firmato quel certificato. Il destinatario è dunque costretto a recuperare il certificato della sub-CA in questione tramite il certificato della root-CA di cui dispone, e successivamente procedere alla verifica del certificato del mittente.

Un utile accorgimento supportato da S/MIME è quello di allegare al messaggio inviato l’intera catena di certificazione del certificato pubblico del mittente, ossia: certificato della sub-CA firmato dalla root-CA à certificato pubblico del mittente firmato dalla sub-CA.

La catena è in genere più lunga, e questo meccanismo semplifica notevolmente i procedimenti di verifica.