28 julio 2008

Gmail + DNI-E

Recientemente tuve que darme de baja en un servicio que me requería un correo electrónico para confirmar mi baja.

Enviando el correo electrónico, pensaba en que este tipo de procedimientos, en pleno 2008, deberían ser mucho mas fiables y que desde la llegada del DNI-e, no hay demasiadas excusas para no implantar mecanismos mas seguros. Al hilo de eso y dado que soy usuario habitual de Gmail, se me pasó por la cabeza que sería genial poder emplear mi Dni-e directamente en la interface web de Gmail (hasta ahora estaba usando Thunderbird para el firmado digital). Así que me puse a ver "el estado del arte" con respecto a firmado S/MIME en Gmail, al final di con esta extensión que hace justamente lo que yo buscaba.

La extensión aun está en etapas tempranas de desarrollo y no es plenamente funcional, en concreto Si puede hacer:
  • Firmar digitalmente un correo electrónico
  • Cifrar un correo electrónico
  • Descifrar un correo electrónico que nos haya llegado
Por contra, se echa y mucho de menos la verificación de firmas digitales, es decir, si alguien nos envía un correo firmado digitalmente no sera posible verificar la firma, ni a nivel certificado digital ni mucho menos comprobando CRLs.

Tal vez en este punto algún que otro lector este pensando en jubilar sus vetustas claves GPG y pasarse al apasionante mundo de los certificados digitales, antes de eliminar sus claves ha de saber que, el dni electrónico, provee dos certificados en el chip, Firma y Autenticación ¿que significa esto? básicamente que los certificados digitales NO están preparados par cifrar información, por tanto, con el estándar PKI en la mano, ningún certificado del DNI-e debería ser usado para cifrar correos electrónicos. Para el que se haya perdido y le resulte incongruente la situación, aclarar un par de puntos sobre certificados digitales, todos ellos contienen una clave publica y otra privada RSA plenamente funcional "para cualquier cosa" adicionalmente, cada certificado lleva inscritas sus extensiones que definen su propósito de uso y es ahí donde se define si un certificado sirve para firmar digitalmente, para autenticarse o para cifrar información (entre otras muchas opciones). En el caso del DNI-e, los certificados sirven para autenticación y firma. Obviamente tu eres libre de extraer las claves RSA de los certificados y usarlas "a pelo" para lo que te de la gana, pero estarías violando el estándar PKI

No obstante, si pretendes usar certificados digitales para cifrar y firmar correos electrónicos, Firefox tiene una extensión que te permite crear tus propios certificados a medida que deberían funcionar perfectamente con la extensión S/MIME.

Aclarado este punto, prosigo con un mini how-to usar el dni-e para firmar digitalmente correos en Gmail.

Dando por hecho que ya tienes configurado el dni-e en tu Firefox (existen ya muchos tutoriales escritos sobre el tema) esta guía debería funcionar tanto en Windows como en Linux.

La integración de Gmail S/MIME con Gmail es total, y el uso, de lo mas sencillo, una vez hayamos abierto el editor de correos para enviar un correo, podemos observar que aparece a la derecha, un símbolo de firmado (resaltado con el cuadrito en rojo), y un candado para cifrar. (las imagenes son 'clicables' para verlas completas)

Simplemente hemos de marcar esa opción para activar el firmado digital del correo, como consejo, es recomendable activar el uso de "solo texto" y de esa forma eliminar los tags HTML que pueden provocar warnings durante el procesado del correo. Una vez marcada esa casilla y escrito el texto, simplemente pulsamos enviar.

Al hacer esto, nos aparecerá una ventana indicando con cual de los dos certificados del DNI-e queremos firmar el correo, como hemos dicho antes, PKI en la mano, deberemos seleccionar el certificado de firma y no el de autenticación.

En esta ventana, habremos de introducir el PIN de nuestro DNI-e.

Si todo ha ido bien, nos aparecerá otra ventana que nos pedirá confirmación para el proceso de firmado

Una vez aceptada la ventana, se lanza el proceso de envío, que, en este caso, se hace mediante la interface SMTP de Gmail, por lo que nos pide que introduzcamos nuestra contraseña (la misma que para acceder via web a Gmail)


Si la petición de envío ha ido bien, veremos en la parte superior de Gmail un mensaje indicando que nuestro correo electrónico ha sido firmado y enviado


Espero que el tutorial os haya resultado útil y, si sois usuarios de Gmail, no tenéis excusa para no agregar a nuestro bot

11 comments :

rodri dijo...

Solo quería anotar que no se si el término "extraer las claves RSA" es muy acertado. Como sabes, la clave privada nunca puede salir del chip, con lo que hacer una copia de la misma es "imposible". Desde luego que el DNIe se puede utilizar para cifrar, pero no del modo que creo que se entiende en el artículo.

Un saludo, y enhorabuena por el articulo

Unknown dijo...

Efectivamente Rodri como bien comentas el dnie es un SSCD, o dispositivo seguro de creación de firma, que no permite la extracción de la clave privada.

Lo del cifrado pues posible es técnicamente es posible con cualquiera de los dos, pero su "key usage" (extensión con el uso que se le da al certificado ) no lo tiene como permitido en ninguno de los dos ni en la Declaración de Prácticas de Certificación se contempla ese uso.
Así pues el uso esperado de los certificados en principio no contempla el cifrado .

El certificado de firma si se quisiera usar de una manera ortodoxa para firmar correos estaría bien que contuviera la extensión (1.3.6.1.5.5.7.3.4).

Aún así la DPC del dnie (http://www.dnie.es/dpc) habla de documentos firmados en genericos así que aunque no es perfecto podría usarse (el cert de firma) para firmar mails.

Tu articulo es bueno, claro y cubre un requerimiento muy potente, muchas gracias por él.

Yago Jesus dijo...

Ciertamente debí haber aclarado que tu puedes extraer la clave RSA publica de los certificados y usarla 'como quieras'. Pensé que se sobre-entendia. Gracias por los comentarios

JAMM dijo...

Hola Yago,

Felicidades por tu sitio, me encanta.

Una pregunta tonta.... puede aplicarse al certificado digital o solo es aplicable al dni-e?

Muchas gracias...

Yago Jesus dijo...

Hola ==Mangurrian==, Si, la extensión es genérica para cualquier certificado digital (que permita firma y/o cifrado), de hecho, yo la empleo con certificados propios. También es indistinto que el certificado esté o no en una smartcard. Gracias por el comentario

Anónimo dijo...

Enhorabuena por el post, pero me ha chocado leer alguna cosa que seguramente se deba a mi falta de conocimiento ...

No entiendo bien qué indicas al hablar de firmar con el certificado. Según yo entiendo, lo único con lo que tiene sentido firmar es con la clave privada y, como dice Rodri, el SO del chip no permite descargarla (ni metiendo el PIN). Según tengo entendido, en el certificado lo que va es una firma (por una CA) de tus datos y de tu clave pública, de ahí mi pregunta de qué es eso de firmar con el certificado?

Saludos!

Yago Jesus dijo...

@Akrog, tienes toda la razon, firmas y descifras con la clave privada que no se encuentra en el certificado sino *asociada* a el y que como bien apuntaban, se encuentra anclada en el chip y no se puede extraer. A ver si con tiempo remasterizo el post con todo lo apuntado. Saludos y feliz año

jaimecuesta dijo...

Curioso descubrimiento, pero tengo otra duda, el dni no tiene el correo como un atributo, por lo que la firma del correo sería inservible desde el punto de vista de funcionalidad ya que no vincula tu cuenta de gmail al certificado utilizado para firmar el correo.

Yago Jesus dijo...

Te confirmo que la vinculación legal es absoluta ya que en el certificado está tu nombre y tu DNI y para realizar el firmado, has tenido que utilizar la clave privada asociada al certificado, por tanto, los datos que firmes están asociados univocamente a la persona que los firma. El correo es únicamente 'la vía' por la que circulan

Anónimo dijo...

Todo lo que se dice en este hilo es correcto, más o menos. Sólo una observación: con la clave pública del certificado de autenticación (módulo+exponente) podemos cifrar un mensaje usando, por ejemplo, OpenSSL. El problema es que el destinatario (el titular del certificado) no podrá descifrarlo porque, efectivamente, no va a tener nunca acceso a la clave privada congruente con la pública que aparece en el certificado.

anonimo dijo...

La extension que se indica en el articulo parace que ya no funciona en gmail