General

Estampillado de tiempo según RFC 3161 con software libre

Media_httpimg97images_cdkxj

Desde hace un año he estado trabajando con OpenTSA, un conjunto de parches a OpenSSL para incorporar soporte al estampillado de tiempo en la popular suite de criptografía de llave pública.

Muy a grandes rasgos, el estampillado de tiempo llena una necesidad corporativa e individual de certificar que una data existía a partir de cierto momento en el tiempo. Adicionalmente, al estar involucrado en una infraestructura de llave pública, nos trae las ventajas de la autenticidad y la integridad. Lamentablemente, hoy en día organizaciones en todo el Mundo hacen inversiones de varios cientos de miles de dólares en tecnología para estampillado de tiempo.

Hace un año OpenTSA tenía muchos problemas, ya que se necesitaba bastante OpenSSL-fu para parchar la popular y sobre todo ubicua suite de criptografía. En distribuciones mainstream como Debian tenemos gran cantidad de software que se enlaza con OpenSSL y con muchas otras cosas (p.ej., Apache con MySQL y Postgres… out of the box) y eso dificulta mucho la accesibilidad de las tecnologías que van saliendo.

En Noviembre 2009, OpenSSL publicó la beta4 de OpenSSL 1.0.0, que absorbe el valioso trabajo de Zoltan Glozik y sus colaboradores. Junto a mod_tsa del proyecto OpenTSA original, hoy en día es más que feasible poner a operar un servicio de estampillado de tiempo bajo HTTP(S) POST que le permita a un/a usuario/a relativamente lego en cuanto a criptografía poder hacer estampillados de su data.

A la fecha, no existe en Debian un paquete disponible de OpenSSL 1.0.0. Un paquete de este tipo no puede entrar en una distribución no autocontenida como experimental ya que hay demasiados paquetes compilados contra la versión 0.9.8. Así que en principio hay dos formas de hacer esto: con chroots o máquinas virtuales o esperar que el paquete entre en unstable. Yo utilizo equivs para crear los paquetes de openssl, libssl0.9.8 y libssl0.9.8-dev y no romper el sistema de paquetes. Espere que paquetes como wget o curl que hacen uso extensivo desde su arranque de SSL no funcionen o tenga que recompilarlos.

No es necesario aplicar parches en OpenSSL. Ya OpenSSL 1.0.0-beta4 tiene soporte para timestamping. Lo único que se necesita compilar es mod_tsa para Apache, y como Apache y sus dependencias también dependen extensivamente de SSL, lo mejor es compilar directo httpd 2.2 desde los repositorios fuente. Finalmente se compila mod_tsa, que necesita una DB para guardar las estampillas: MySQL, PostgreSQL o Firebird. Sólo se necesita una tabla sin funciones complejas: MySQL es lo más NoSQL que es accesible colocar.

¿Cómo se usa? Cuando se tiene un archivo o una data, se aplica openssl ts para obtener el timestamping request y luego se manda a firmar el request en la autoridad de estampillado de tiempo. El emisor distribuye la estampilla junto con la data, y el/la interesado/a puede verificar la integridad y existencia de la data teniendo la data, la estampilla y el certificado de la autoridad de estampillado.

Una reflexión final: sigo abogando por el uso de GnuPG para garantizar autenticidad, integridad y cifrado en todas las comunicaciones vía electrónica. Sin embargo, GnuPG carece de mecanismos pulidos para estampillado de tiempo y aunque la mayor parte de nuestras comunicaciones las hacemos vía correo electrónico, ni siquiera allí podemos contar con las estampas de los servidores de correo intermedio. Por esto considero que enfocar el uso de OpenSSL sólo para TSA puede ser una muy buena idea, complementada con GnuPG.

Standard

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s