27 septiembre 2010

Que levante la mano quien nunca se haya visto en la típica situación de 'Te he enviado un mail ¿no te ha llegado ...?' Es una situación frustrante en ambos lados, si te lo están diciendo a ti porque directamente piensas 'excusa excusa' y si lo estás diciendo tu porque piensas 'suena a excusa'

Vamos a tratar de poner remedio a esto con un nuevo servicio de SbD en fase EXPERIMENTAL. El servicio es sumamente fácil de usar y permite tener una certeza comprobable (incluso con validez legal) de que un correo ha sido enviado. Este servicio permite demostrar:

  1. Que un correo ha sido enviado en una determinada fecha
  2. Los destinatarios a los que iba dirigido ese correo
  3. El contenido del mensaje (su body)
  4. Los adjuntos que fueron enviados
Para conseguir eso vamos a usar tecnología PKI, en concreto vamos a hacer uso de una TSA (Time Stamping Authority) o lo que es lo mismo una autoridad de sellado de tiempo. Para el que no lo sepa, una TSA lo que hace es emitir un sello firmado digitalmente que prueba la existencia de un determinado dato en un determinado tiempo. Si además esta TSA está reconocida, (En España por la ley de firma digital) quiere decir que un sello de esa TSA tiene validez legal probatoria.

Entonces ¿Como funciona nuestro servicio? Muy fácil. Hemos creado una cuenta de correo mailsellado@securitybydefault.com y sobre ella hemos creado un servicio que periódicamente hace check sobre esa cuenta, extrae los correos que le llegan, pide un sello digital a ese correo y envía al emisor del correo una copia con el sello y el mail original.

De forma esquemática:
  • Creas un correo electrónico desde tu cliente de correo habitual
  • Añades como CC o CCO a mailsellado@securitybydefault.com
  • Envías tu correo
  • El correo llega a mailsellado@securitybydefault.com
  • Se extrae el correo en formato 'raw'
  • Se computa un hash SHA-1 de ese correo
  • Enviamos una petición de sello a una TSA sobre ese hash
  • Una vez obtenido el sello te enviamos un mail como acuse de recibo con tu mail original en formato raw y el sello de tiempo
¿Fácil verdad?

Unas capturas (click para agrandar) :


Correo enviado con CC a mailsellado@securitybydefault.com


Y Aquí la respuesta. Como se puede ver en el resaltado el mail contiene información sobre el sello (El TimeStamp en formato GMT) y la CA que lo ha emitido. Como adjuntos nos ha llegado nuestro mail original en formato 'raw' y el sello de tiempo emitido por la TSA.

Para comprobar el sello de forma manual hazte con una copia de OpenSSL reciente (versión 1.0) y realiza lo siguiente:

1.- Descarga los dos ficheros adjuntos del email

2.- Descarga del certificado raíz de la CA de accv (Organización que amablemente ofrece gratuitamente su servicio de sellado)

# wget http://www.accv.es/fileadmin/Archivos/certificados/rootca.crt

3.- Sobre los dos ficheros descargados + el certificado de la CA raíz ejecuta:

# openssl ts -verify -data 9550876624799.79.txt -in 9550876624799.79.tsr -CAfile rootca.crt

Y deberías obtener algo como:

Verification: OK


F.A.Q.

Y esto ¿Cuanto me va a costar?

-Nada, es totalmente gratuito

Esto significa que puedo abusar, hacer pruebas, enviar mails con adjuntos de varios cientos de megas ...

-Ciertamente no hemos implementado ninguna restricción al servicio y sería un poco triste tener que hacerlo porque alguien está abusando del sistema de forma irresponsable. Usa tu sentido común

¿Que garantías ofrecéis en este servicio?

-Ninguna, el servicio funciona 'tal cual', no garantizamos disponibilidad ni que siempre vaya a funcionar, es un servicio EXPERIMENTAL que depende de servicios de terceros que, pueden funcionar o no (incluso si el uso llega a ser masivo dejar de ofrecer gratuitamente el servicio)

¿Y no supone un riesgo a mi privacidad enviar copias de mis mails a una cuenta que no controlo?

-Buena pregunta, permíteme recordarte una cosa: Cuando envías un mail, este no queda encapsulado mágicamente y viaja de tu PC al PC del destinatario, tu mail va pasando por diversos servicios gestionados por terceros hasta que es entregado. Nuestro servicio ha sido diseñado para NO guardar copias de los mails recibidos, según llegan son procesados y BORRADOS. No obstante la única garantía que ofrecemos es nuestra palabra, te puede parecer suficiente o no, eso queda a tu criterio.

Vuestra idea me ha parecido magnífica y como empresa me gustaría ofrecer este servicio internamente o a mis clientes

-Este servicio tiene multitud de aplicaciones profesionales, por ejemplo servicios de soporte técnico que necesitan acreditar el envío de mails, entidades bancarias, etc etc. Como puedes ver la tecnología 'ya está creada' y lo que haría falta para dar este servicio en modo profesional es inversión para poder ofrecer SLAs y poder usar un servicio de sellado profesional (que tiene un coste pero ofrece SLAs). contacto@securitybydefault.com para hablar de ello.

44 comments :

Diego dijo...

Y funciona con mails cifrados? supongo que sí, ¿no? Supongo que el sello validará el texto cifrado que después se podrá descifrar, ¿no? Porque no se modifica el contenido, ¿verdad?

Newlog dijo...

A mi vuestra palabra me sirve ;)

Anónimo dijo...

Hola,

Me gustaría saber como puedo hacer yo mismo para firmar el hash de un fichero? Me refiero a hacerlo con el TSA.

Muchas gracias.

Anónimo dijo...

como siempre, magníficos, ofreciendo servicios muy útiles by the face xD

sois "trusted resenders" jaja

Anónimo dijo...

Hola,

Qué TSA utilizáis?

Muchas gracias.

Yago Jesus dijo...

@Diego, ciertamente el contenido da igual, sea texto cifrado, en castellano o Inglés. No afecta

@Newlog muchas gracias :)

@Anónimo usamos la TSA de la Generalitat Valenciana http://www.accv.es/

Sucrot dijo...

Lo he probado y funciona a la perfección. Cada post sorprendéis con algo nuevo ;)

Pelines dijo...

No le veo la utilidad. Supongo que se me escapa algo.

Yo también puedo hacer eso mismo. Creo un MIME y lo sello con esa misma TSA. No he enviado nada pero tengo un "acuse de recibo" igual que el vuestro.

Yago Jesus dijo...

@Pelines, a ver, te respondo por partes. Evidentemente puedes implementarte tu propio sistema pero pierdes el sentido de imparcialidad que te ofrece el hecho de que sea un tercero quien realice la verificación. En futuras versiones la 'vuelta' irá firmada digitalmente por mailsellado@securitybydefault.com para 'cerrar el circulo'

Pelines dijo...

Si también lo vais a firmar, entonces retiro lo dicho.
Lo que no me cuadraba era que sólo tuviera el sello de tiempo.

Román Ramírez dijo...

Muy interesante.

Se me ocurren dos cosas, a priori:

1. Por motivos de anonimato: eliminar las cabeceras completamente y mandar a la TSA exclusivamente el To: From: Subject: y datos del mensaje.

2. La posibilidad de indicarle al Tercero de Confianza (vosotros), que guarde el correo durante un tiempo y haya una url de chequeo (en vez de mandarlo).

Una url en plan: https://validate.sbd.ru/fggErdd23A

Pero muy chulo, la verdad.

MessageLabs, Postini, etc. tienen algunos servicios similares, pero no iguales.

Anónimo dijo...

Este servicio proporciona cierta certeza de que el correo os llego a vosotros, pero, tambien al destinatario?

Juan David dijo...

Sería interesante crear una alternativa libre(OpenSource) a servicios como:
http://www.rpost.com/
http://www.comprova.com/servlet/public?action=cnt&page=email

A alguien le interesa?

Yago Jesus dijo...

@Sucrot Muchas gracias !

@Pelines, casi al 80 % lo haremos con una clave GPG, aunque esa solución es la que menos me convence, la idea es esperar un poco a ver si alguien tipo FNMT / cualquier prestador reconocido, se anima a colaborar y ofrece un certificado X.509. La próxima versión tendrá firmado por parte nuestra de una forma u otra.

@Roman Ramirez: Lo cierto es que la TSA únicamente ve el hash SHA-1 del mail, no el mail completo. Lo que dices de almacenar los mails, da un poco de miedo por lo sensible de los datos, pero si, como idea es genial

@Anónimo No, garantizar 'la entrega' es complejo, habría que implementar algo basado en web, enviar un enlace y verificar que es pinchado. Técnicamente posible pero es otro concepto diferente

@Juan David, creo (no conocía los servicios y solo he ojeado las descripciones) que vamos por la misma linea. Respecto a lo de OpenSource, si realmente el proyecto va hacia delante, liberamos el código sin problema

Juan David dijo...

@Yago Jesus cuenten con mi ayuda si deciden liberar el proyecto.

Alex Millà dijo...

Genial, realmente me ha parecido una idea genial.

Me interesaría super interesante poder montar algo igual en mi entorno de forma local.

Enlaces donde poder documentarme un poco mejor?

Saludos. :-D

Yago Jesus dijo...

@Juan David: Muchas gracias ! contamos contigo

@Alex: Cuando terminemos la parte de firma digital, si quieres ponte en contacto y lo vemos

Alex Millà dijo...

Ok, gracias. :D

Anónimo dijo...

joder sois unos cracks! siempre sacando alguna cosilla nueva para ayudar a los demás, se agradecen siempre estas cosas.

Bumiga dijo...

Que excelente servicio, desde ya me apunto para colaborarles y desde ahora en la empresa cualquier correo sensible lo pasaré por su servicio para tener la certeza del envio.

Yessica dijo...

Hola buenas tardes.
He enviado un correo para probar el servicio, recibí su acuse de correo con el estampado. Ahora bien, compile el openssl en ubuntu 10.10 para realizar la verficación, sin embargo entre los comandos disponibles de openssl no dispongo del ts. A qué se debe? busco información en la web y no consigo. Y según la documentación de openssl dicho comando existe. Tendrás alguna idea de que podría estar pasando? Agradecería muchisimo tu respuesta. Gracias!
Muy bueno el servicio =)

Yago Jesus dijo...

@Yessica Si no recuerdo mal, el soporte TS llegó a OpenSSL en las últimas versiones. Asegúrate de haber bajado la última (que no tiene porque ser la que esté en Ubuntu) y lo vuelves a probar. Si sigues teniendo problemas, escribe un mail a contacto@securitybydefault.com
y lo vemos en detalle

Yessica dijo...

Hola otra vez!
Sigo teniendo dificultades, envié un correo a la dirección que me proporcionaste indicando mi problema y lo que he hecho para intentar solventarlo. Espero puedan ayudarme.
Saludos!

Yessica dijo...

(va sin acentos)Hola!
Ya solvente el problema con la instalcion del openssl con soporte tsa. Ahora bien, cuando hago la verificacion me arroja este error:
Verification: FAILED
15379176:error:2F064067:time stamp routines:TS_CHECK_IMPRINTS:message imprint mismatch:ts_rsp_verify.c:659:
root@ubuntu:/usr/local/ssl/bin# ./openssl ts -verify -data 1966449908207.86.txt -in 1966449908207.86.tsr -CAfile rootca.crt
Verification: FAILED
10525416:error:2F064067:time stamp routines:TS_CHECK_IMPRINTS:message imprint mismatch:ts_rsp_verify.c:659:

A que se refiere?
Gracias!

Yago Jesus dijo...

@Yessica interesante apunte, desde hace relativamente poco tiempo hemos cambiado el esquema sobre como funciona mailsellado (os debo un post explicándolo) ahora hay un nuevo elemento, y es la firma GPG previa a los datos, y sobre esta, el sello de tiempo. La clave pública empleada es http://www.security-projects.com/mailsellado.key

y los pasos a seguir son:

wget www.security-projects.com/mailsellado.key

gpg --import mailsellado.key

gpg --verify 2390495814521.39.txt.asc 2390495814521.39.txt

openssl ts -verify -data 2390495814521.39.txt.asc -in 2390495814521.39.tsr -CAfile rootca.crt

De esa forma, tal y como comentaba @Pelines se añade la parte de firma aparte de sellado. Todo esto lo explicaré mas detenidamente en un nuevo post

PkiCol dijo...

Para las pruebas pueden montar su propia autoridad de estampado cronológico usando http://www.opentsa.org/.

Pronto estaré publicando info al respecto.

Yessica dijo...

@PkiCol Hola, una pregunta, logré instalar la versión openssl 1.0.0c que ofrece soporte para la tsa, sin embargo al intentar verificar el estampado de tiempo que recibí de security by default, me sigue dando error y me di cuenta que no contiene todo el soporte tsa, pues śolo dispongo del comando ts, sin embargo el proyecto opentsa ofrece ts y tsget. Se puede conseguir el servicio de estampado de tiempo sólo con el sistema que logré compilar? el 1.0.0c?
Agradecería tu ayuda, saludos!

PkiCol dijo...

Estoy realizando la misma prueba que comentas para ver cual es el problema que se puede esta presentando entre el Estampado Firmado por SBD y la verificación usando los módulos de TSA de OpenTSA. Perdona la tardanza en responder.

Yago Jesus dijo...

Os garantizo que con esta versión http://www.openssl.org/source/openssl-1.0.0c.tar.gz funcionan todos los comandos TS sin problema

openredes dijo...

Confirmo lo que dice Yesica:

En lenny instalé la versión 1.0.0d de OpenSSL y en Squeeze la versión 1.0.0c y en ambos solo puedo acceder al comando ts:

root@opentsa-squeeze:/usr/local/ssl/bin# ./openssl ts
usage:
ts -query [-rand file:file:...] [-config configfile] [-data file_to_hash] [-digest digest_bytes][-md2|-md4|-md5|-sha|-sha1|-mdc2|-ripemd160] [-policy object_id] [-no_nonce] [-cert] [-in request.tsq] [-out request.tsq] [-text]
or
ts -reply [-config configfile] [-section tsa_section] [-queryfile request.tsq] [-passin password] [-signer tsa_cert.pem] [-inkey private_key.pem] [-chain certs_file.pem] [-policy object_id] [-in response.tsr] [-token_in] [-out response.tsr] [-token_out] [-text] [-engine id]
or
ts -verify [-data file_to_hash] [-digest digest_bytes] [-queryfile request.tsq] -in response.tsr [-token_in] -CApath ca_path -CAfile ca_file.pem -untrusted cert_file.pem


root@opentsa-squeeze:/usr/local/ssl/bin# ./openssl tsget
openssl:Error: 'tsget' is an invalid command.

Standard commands
asn1parse ca ciphers cms
crl crl2pkcs7 dgst dh
dhparam dsa dsaparam ec
ecparam enc engine errstr
gendh gendsa genpkey genrsa
nseq ocsp passwd pkcs12
pkcs7 pkcs8 pkey pkeyparam
pkeyutl prime rand req
rsa rsautl s_client s_server
s_time sess_id smime speed
spkac ts verify version
x509

Message Digest commands (see the `dgst' command for more details)
md4 md5 mdc2 rmd160
sha sha1

Cipher commands (see the `enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
aes-256-cbc aes-256-ecb base64 bf
bf-cbc bf-cfb bf-ecb bf-ofb
camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb
camellia-256-cbc camellia-256-ecb cast cast-cbc
cast5-cbc cast5-cfb cast5-ecb cast5-ofb
des des-cbc des-cfb des-ecb
des-ede des-ede-cbc des-ede-cfb des-ede-ofb
des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb
des-ofb des3 desx idea
idea-cbc idea-cfb idea-ecb idea-ofb
rc2 rc2-40-cbc rc2-64-cbc rc2-cbc
rc2-cfb rc2-ecb rc2-ofb rc4
rc4-40 seed seed-cbc seed-cfb
seed-ecb seed-ofb


Otro problema en Debian es que viene con la versión 0.9.8g y o para lenny y squeeze respectivamente, sin soporte para OpenTSA y con muchos paquetes que dependen de OpenSSL y el tema de actualizar a las nuevas versiones es bastante complicado...

¿Que distribución habéis usado Yago?

Saludos y buen trabajo!

Yago Jesus dijo...

@openredes Hemos usado una CentOS cuya versión de OpenSSL tampoco tenía soporte TSA, así que hemos bajado la versión http://www.openssl.org/source/openssl-1.0.0c.tar.gz la hemos compilado y hemos obtenido un binario 'openssl' que ya tiene soporte, de esa forma no es necesario instalar o upgradear nada en concreto. Con tener ese binario compilado ya lo puedes usar

openredes dijo...

Que rápido!

Pues en el binario obtenido de la compilación tampoco tiene el comando tsget... y otro dato raro es que opentsa.org desde esta mañana no carga :S

Yago Jesus dijo...

@openredes Yo creo que os estáis haciendo un lio entre un parche exogeno a OpenSSL y el soporte nativo para TS, en el caso de mailsellado, toda la funcionalidad necesaria 'openssl ts -verify' si está soportado

openredes dijo...

En teoría el soporte nativo de openssl para ts y tsget es desde la versión 0.9.8n

http://www.openssl.org/docs/apps/tsget.html

aunque bien es cierto que esto es un offtopic al tema tratado y estoy introduciendo confusión al no haberlo dejado claro al principio ya que mi intención es crear un TSA local y por eso llegué a esta entrada de SBD.

PkiCol dijo...

Si al parecer algo pasa con el site de opentsa.org.

@Yago muchas gracias por toda la info.

openredes dijo...

Permitidme un último apunte y mis disculpas por el offtopic.

Para trabajar con tsget hay que instalar la librería libwww-curl-perl y trabajar directamente sobre el binario tsget (mi error fue pensar que se introducía a openssl como comando del mismo igual que ts) si lo hemos instalado en la ubicación por defecto lo tendremos en /usr/local/ssl/misc/tsget y si solo lo hemos compilado lo tendremos en .../openssl-1.0.0d/apps/tsget

# tsget -h http://...

Yessica dijo...

Muchas gracias a todos por los comentarios. verifiqué el estampado de tiempo recibido sin ningún inconveniente. Gracias!

Ahora una pregunta, alguien ha logrado instalar el servicio de openTSA sobre apache con mod_tsa?

Gracias!

Anónimo dijo...

genial. muchisimas gracias. lo usaré

Pelines dijo...

No le veo la utilidad. Supongo que se me escapa algo.

Yo también puedo hacer eso mismo. Creo un MIME y lo sello con esa misma TSA. No he enviado nada pero tengo un "acuse de recibo" igual que el vuestro.

Sucrot dijo...

Lo he probado y funciona a la perfección. Cada post sorprendéis con algo nuevo ;)

Anonymous dijo...

Hola,

Qué TSA utilizáis?

Muchas gracias.

Josalvezro dijo...

si es un servicio gratis lo veo muy bien que haya esos proyectos en gente con talento y demas. Por tanto animo y que no se abuse de eso como mas arriba se cito

ENO dijo...

Esa "solución" no soluciona ningun problema:

1. El emitente no firma su mail y aunque lo hace no validéis ese firma. Entonces, el timestamp no funciona para validar a nivel legal el contenido del mail. Sin firma digital del emtiente no se puede validar que el origin del mail. Un timestamp no sirve para nada.

2. Confirmación del envio no es lo mismo como confirmación de recibo. El recipiente todavía puede decir: No, no he recibido tu mail.

3. No establecéis un PKI, evidentemente ni sabéis que es, basando la solución en GPG. PKI no es RSA. PKI es una estructura arbol de confianza. GPG se basa en cadena de confianza.

4. No solucionéis un problema: Lo ultimo que se requiere es un servicio timestamp. Timestamp se usa para dar validez de una firma digital por un tiempo prolongado, para poder validar una firma aunque el certificado es caducado o ha sido revocado posteriormente.

Yago Jesus dijo...

Venga, ahora a ver si eres capaz de escribir el mismo comentario empleando correctamente el castellano y los tiempos verbales, después igual te ilustro sobre PKI :=)