I messaggi S/MIME sono una
combinazione di corpi MIME ed oggetti PKCS.
Le entità MIME e gli altri dati,
come certificati e identificatori di algoritmi, sono dati a funzionalità di
elaborazione PKCS che producono un oggetto PKCS.
L’oggetto PKCS è infine racchiuso
in MIME.
S/MIME fornisce un formato per i
dati solo imbustati (solo cifrati), diversi formati per dati solo firmati, e
diversi formati per dati firmati e imbustati.
I diversi formati sono richiesti
per accomodare diversi ambienti, in particolare per i messaggi firmati.
Preparazione
di un’entità MIME per la firma e la cifratura (imbustamento)
S/MIME è usato per rendere sicure
le entità MIME.
Un’entità MIME potrebbe essere una sottoparte, sottoparti di un messaggio, o un intero messaggio con tutte le sue sottoparti.
Un’entità MIME che è un intero
messaggio include solo gli header MIME e il corpo MIME, ma non include gli
header RFC-822.
Nota che S/MIME può anche essere
usato per rendere sicure le entità MIME usate in applicazioni che non siano
Internet Mail.
L’entità MIME che è resa sicura e
descritta in questa sezione può essere pensata l’entità MIME “interna”.
La procedura per la preparazione di
un’entità MIME è data in [MIME-SPEC].
Una singola procedura è usata per
la creazione di entità MIME che devono essere firmate, cifrate, o sia firmate
che imbustate.
Alcuni passi addizionali sono
raccomandati per difendersi contro problemi che possono occorrere durante il
trasposto della posta.
Si raccomanda che tali passi
addizionali siano eseguiti sia per la firma che la cifratura di un messaggio in
modo che il messaggio possa essere inoltrato a qualsiasi ambiente senza
modifiche.
Questi passi sono descrittivi
piuttosto che prescrittivi.
L’implementatore è libero di usare
una qualsiasi procedura purché il risultato sia lo stesso.
Step 1. L’entità MIME è preparata secondo le convenzioni locali.
Step 2. Le
parti foglia dell’entità MIME sono convertite in forma canonica.
Step 3. Una appropriata codifica di trasferimento è applicata alle foglie dell’entità MIME.
Quando un messaggio S/MIME è
ricevuto, i servizi di sicurezza sul messaggio sono rimossi, e il risultato è
l’entità MIME.
L’entità MIME è tipicamente passata
ad un agente MIME, essa è decodificata e presentata all’utente o
all’applicazione ricevente.
Ogni entità MIME DEVE essere
convertita in una forma canonica che è rappresentabile unicamente e in modo non
ambiguo nell’ambiente dove la firma è creata e nell’ambiente dove la firma sarà
verificata.
Le entità MIME DEVONO essere messe
in forma canonica sia per la cifratura (imbustamento) che per la firma.
I dettagli esatti della forma
canonica dipendono dal tipo e sottotipo MIME dell’entità.
In generale la forma canonica sarà
elaborata dall’agente in trasmissione piuttosto che dall’implementazione
S/MIME.
I dettagli della forma canonica
sono specificati in [MIME-SPEC].
Le implementazioni S/MIME DEVONO
essere capaci di trattare con oggetti MIME binari.
Se nessun header
Content-Transfer-Encoding è presente, la codifica di trasferimento dovrebbe
essere considerata 7BIT.
Le implementazioni S/MIME
DOVREBBERO comunque usare la codifica di trasferimento descritta di seguito nel
paragrafo successivo per tutte le entità MIME che rendono sicure.
La ragione del rendere sicure solo
entità MIME a 7-bit, anche per dati cifrati (imbustati) che non sono mostrati
durante il trasporto, è che ciò permette alle entità MIME di essere trattate in
qualsiasi ambiente senza essere cambiate.
Un’entità multipart/signed che è
trasmessa sull’infrastruttura internet standard SMTP o un altro trasporto che è
vincolato a testo a 7-bit, DEVE avere una codifica di trasferimento applicata
in modo da essere rappresentata come testo a 7-bit.
Le entità MIME che sono gia dati a
7-bit non hanno bisogno di una codifica di trasferimento.
Le entità come testo ad 8-bit e
dati binari possono essere codificati con codifica di trasferimento
quoted-printable o base-64.
La ragione primaria per cui sono
richiesti 7-bit è che l’infrastruttura di trasporto mail Internet non
garantisce il trasporto di dati ad 8-bit o binari.
Anche se alcuni segmenti
dell’infrastruttura possono ora trattare dati ad 8-bit e dati binari, spesso
non è possibile conoscere dove il percorso del trasporto è ad 8-bit.
Se un messaggio di posta ad 8-bit
incontra un agente di trasferimento messaggi che non può trasmetter dati ad
8-bit o binari, l’agente ha tre opzioni, nessuna delle quali accettabile per un
messaggio firmato in chiaro:
L’agente potrebbe cambiare la
codifica di trasferimento; questo invaliderebbe la firma.
L’agente potrebbe trasmettere i
dati comunque, ciò darebbe come risultato nella maggior parte dei casi l’ottavo
bit corrotto; anche questo invaliderebbe la firma.
L’agente potrebbe ritornare il
messaggio al mittente.
[MIME-SPEC] proibisce ad un agente
di cambiare la codifica di trasferimento della prima parte di un messaggio
multipart/signed.
Se un agente che non può trasmettere dati ad 8-bit o binari incontra un messaggio con dati ad 8-bit o binari nella prima parte, dovrebbe ritornare il messaggio al mittente come non consegnato.