S/MIME es una especificación para mensajeria electrónica segura que se empezó a definir con la finalidad de dotar de seguridad a mensajes de correo electrónico con formato MIME. SMIME ofrece confidencialidad, integridad, no repudio del origen y autenticación mediante la combinación de los algorítmos criptográficos seguros con los estándares de correo más difundidos , obteniendo así una gran interoperatividad.
S/MIME puede ser utilizado por los agentes de correo tradicionales para añadir seguridad pero también puede ser usado en cualquier protocolo de transporte de datos con formato MIME, como puede ser el HTTP.
La estructura de un mail S/MIME amplia la del MIME con la aparición de ciertos tipos. Su estructura es básicamente la siguiente:
Una cabecera: From: direccion@de.correo
de quien lo envia
Subject: asunto de mail
To: direccion@de.correo a quien va
dirigido
MIME-Version: 1.0
Content-Type: {text/plain} (tipo y subtipo de lo que se envia)
Content-Transfer-Encoding: {quoted-printable} (como ha sido codificada la
información)
El cuerpo del mensaje: formado básicamente por lo que se desea transferir.
La opción multipart que suele ir a continuación de Content-Type nos da las siguientes opciones:
multipart/mixed: indicamos que el mail se compone de una serie de entradas MIME y cada una de ellas tendrá una estructura MIME con todos los campos necesarios. Para delimatar las partes se ha de añadir boundary={puede ser lo que quieras}. Cada una de las partes contenidas puede a su vez utilizar multipart/mixed y contener a varias partes más.
multipart/signed: indicamos que el mail es un mail firmado. Se le añade protocol= "application/x-pkcs7-signature" para indicar el protocolo utilizado en la firma y boundary= para delimitar campos. Para indicar que un tipo no está reconocido se indica mediante esta expresión x-{tipo}.
Para obtener un mail cifrado sólo hay que indicar Content-Type: application/x-pkcs7-mime. Al tratarlo, el mailer, descodifica el cuerpo, elimina la linea en blanco que hay entre la cabecera y el cuerpo, elimina los campos Content- y lo pega todo a la parte de arriba obteniendo así un mail normal.
El objeto PKCS7 contiene la firma electrónica del mail pero además puede contener:
data: datos
signed data: datos firmados {{+ certificado}+ todo firmado}
enveloped data: datos cifrados
signed and enveloped data: no recomendable
S/MIME puede garantizar la confidencialidad del tráfico de datos utilizando direcciones de correo anónimas, que deshacen la dirección original. Para evitar que una tercera persona pueda identificar la identidad del emisor mediante la firma digital, calcula primeramente dicha firma, la añade al mensaje original y lo cifra todo en bloque. Los certificados utilizados por S/MIME se basan en la norma X.509.