¿Estoy firmando lo que quiero firmar?

A raíz de un artículo de Kriptópolis, me gustaría arrojar una cuantas ideas sobre el tema de la firma digital electrónica.

Con la inminente llegada del DNI electrónico, impuesta por el gobierno sin suficientes premisas que permitan al usuario de a pie determinar si es un sistema seguro, eficiente y conveniente para él, se desprenden una serie de problemas.

Problema de la integridad de la clave de firma

Algunos de los sistemas actuales realizan la firma digital usando componentes software. En dichos sistemas, la clave de firma se almacena en algún medio de almacenamiento no volátil, que no tiene por qué ser seguro. El medio de almacenamiento más habitual es el disco duro de un ordenador, ya sea en un archivo desprotegido, un archivo cifrado, o una zona del disco duro que sólo sea accesible por el sistema operativo. En cualquier caso, en la mayoría de las ocasiones, la clave privada se almacena permanentemente en el disco duro.

Esto significa que:

  • La clave de firma carece de movilidad.

    La clave de firma se almacena en un único disco duro. Si éste no es accesible o queda inservible, el usuario pierde toda capacidad de firma futura. Si éste se extravía o es sustraído, la clave de firma queda comprometida, así como cualquier transacción que pudiera hacerse con ella a partir de ese momento.

    Una solución a este problema consiste en exportar la clave de firma a un dispositivo de almacenamiento extraíble, como una llave USB. De esta forma, el usuario puede utilizar dicha clave de firma en uno o varios equipos, y ésta viaja con el.

    El problema es que la llave USB puede ser extraviada y, si la clave de firma no está protegida con un mecanismo suficientemente resistente, resultaría posible recuperarla.

  • La clave de firma está permanentemente expuesta a ataques

    Al estar la clave de firma almacenada permanentemente en un ordenador común y corriente, ésta puede ser víctim de ataques, por parte de malware o un usuario, que intenten robar, comprometer, dañarla o alterarla.

    Igualmente que en el punto anterior, exportar la clave de firma a un dispositivo de almacenamiento extraíble, como una llave USB, permite que ésta no sea permanentemente vulnerable, reduciendo la ventana de exposición únicamente a aquellos momentos en los que la llave USB se halla conectada a un ordenador.

La idea, por tanto, es que la firma digital sea llevada a cabo por un sistema autónomo, sencillo, seguro, implementado correctamente, y que sea propiedad del usuario, tal como una tarjeta inteligente con un pequeño visor o pantalla LCD, más un teclado para que el usuario autorice las operaciones de firma digital mediante un PIN o contraseña. La clave privada nunca debe abandonar la tarjeta, a riesgo de ser expuesta, duplicada, comprometida, etc. La propia tarjeta deberá implementar un algoritmo seguro de firma, utilizando, como mínimo, SHA-256 para el resumen, y RSA de 1.024 bits para la firma digital.

Problema de la seguridad del mecanismo de firma

Con la firma tradicional, hecha de puño y letra, el usuario tiene la capacidad de determinar cuál es el documento que está firmando, pues es el propio usuario el que lo firma y el que puede leerlo antes de proceder a su firma. De esta forma se reduce la posibilidad de engaño ya que, normalmente, suele resultar complicado conseguir que un usuario firme un documento que no ha leído o bien lea un documento dado pero acabe firmando otro distinto.

Con la firma digital ya no es el usuario el que lleva a cabo la firma, sino un sistema digital, que custodia la clave de firma. Esto abre la puerta a la posibilidad de que el documento que el usuario lea (bien en pantalla, bien en otro medio) no sea el mismo documento que se entrega al sistema digital para ser firmado. El usuario únicamente concede autorización a dicho sistema digital para que éste realice una firma d un documento en su nombre, que no tiene por qué ser el documento que el usuario autorizó.

¿Cómo se puede, entonces, evitar aquella situación en la que el documento que se presenta al usuario, y que supuestamente será firmado por el sistema digital, no es realmente el documento que se entrega al sistema digital?

Si partimos de un sistema con tres participantes:

  • Usuario, U
  • Sistema de firma digital, S
  • Tercero que persigue la firma de un documento, T

y siguiendo el modelo de plena desconfianza, podemos aseverar que cada uno de los participantes desconfía plenamente de los demás.

Hagamos el siguiente supuesto: el sistema de firma digital consiste en una tarjeta, relativamente resistente a manipulaciones, que incluye un chip capaz de firmar digitalmente a través de una clave de firma implantada que pertenece a su propietario. El usuario, propietario de esta tarjeta, cuando desea firmar digitalmente un documento, consigue que éste sea transmitido a la tarjeta, y ésta devuelve la firma digital correspondiente a dicho documento. Para proteger del mal uso de este sistema de firma digital, el usuario debe autorizar la operación de firma mediante la introducción de un PIN o contraseña.

Puesto que el sistema de firma digital, es decir, la tarjeta, es propiedad del usuario, suponemos que existe una cierta confianza por parte de éste en aquél. Sólo resta analizar la relación de confianza entre el usuario y el tercero, y la relación de confianza entre el tercero y el sistema de firma digital.

Relación de confianza entre el usuario y el tercero

El tercero T, trata de que el usuario U, firme digitalmente, mediante un sistema de firma digital S propiedad de U, un documento M. Al final de la operación, ¿cómo puede estar seguro el usuario U de que el mensaje firmado es realmente el mensaje M y no otro mensaje M'?

Una posible solución es que sea el propio usuario U, en lugar de ser el tercero T, el que entrege el mensaje M al sistema de firma digital S, a fin de evitar que el tercero intente suplantar dicho mensaje M con otro mensaje M'. El usuario U está en disposición de leer el mensaje M antes de entregarlo a S para ser firmado.

Esta primera solución no siempre es factible, ya que, habitualmente, el mensaje M debe ser entregado directamente por el tercero T al sistema de firma S, directamente. Tal es el caso de un cliente de correo electrónico que solicita firmar digitalmente un mensaje, una página Web que solicita firmar digitalmente una transacción de correo electrónico, o un procesador de textos. Suele ser inviable e ineficiente que sea el propio usuario U el que entregue el mensaje M al sistema de firma digital S. Lo más habitual es que sea el propio tercero T el que entregue el mensaje M al sistema S para que éste lo firme. Lo deseable es que el sistema S solicite autorización al usuario U antes de proceder a firmar el mensaje.

El sistema de firma digital S propuesto, con gran probabilidad, no tendrá la capacidad de mostrar ad-hoc el documento M antes de que éste sea firmado, ya que estos dispositivos suelen implementarse como una tarjeta o token, sin una pantalla, o con un visor LCD de dimensiones muy reducidas. Una posible solución sería que el sistema S mostrase en su visor un resumen digital del documento M que le ha sido entregado para ser firmado.

Por ejemplo, sea M el mensaje que se entrega a S para ser firmado, y M' el mensaje que un tercero T, como una aplicación Web, presenta al usuario como supuesto mensaje a firmar. Para que el usuario acepte la transacción debería cumplirse que M = M', es decir, que el mensaje presentado al usuario U y el mensaje entregado a S fueran el mismo. Si se cumple que SHA-256(M) = SHA-256(M'), existe una alta probabilidad de que se cumpla M = M'. El sistema de firma digital S no puede presentar en su pantalla LCD la totalidad del mensaje M, pero sí SHA-256(M), lo que permitiría al usuario determinar si el tercero T está intentado que el usuario firme un documento falso, M'.

Relación de confianza entre el tercero y el sistema de firma digital

El tercero T puede comprobar la validez y la autenticidad de la firma, obtenida del documento entregado, utilizando los mecanismos de comprobación de firma digital cualesquiera que sean aplicables para el sistema S.

Para los sistemas de criptografía de clave pública, el tercero T tiene que tener acceso al certificado de clave pública correspondiente al propietario de S, que es el usuario U, ya que S realiza la firma digital en nombre del usuario U. Ésto ya es un problema en sí mismo, y concierne a cualquier infraestructura de clave pública (PKI).

Conclusión

Por supuesto, las ideas expuestas aquí no están exentas de problemas, como la automatización de sistemas transaccionales que tienen que firmar grandes volúmenes de datos, la revocación de claves, los ataques side-channel contra las tarjetas inteligentes, etc., pero puede suponer una reducción del riesgo que supone dejar en manos de un sistema digital la firma de documentos, en nombre de un usuario, que pierde prácticamente todo el control del proceso de firma.

Advertisements

6 thoughts on “¿Estoy firmando lo que quiero firmar?

  1. Muy buen artículo, Felipe.

    Aprovecho para recomendaros el siguiente articulo, donde se habla un poquito más del DNI electrónico (del que apenas se han dado detalles y que este mes de Marzo entra en funcionamiento en Burgos)

    http://www.kriptopolis.org/node/1953

  2. Sin quitar que Fraskito sea un poco pelota, el artículo está bien. Quizás resultan un poco largos estos artículos, o poco sintéticos… pero están bien.

  3. ¿Tengo que asegurarme de que el SHA que me muestra mi procesador de texto es el mismo que el que me muestra mi lector de tarjetas? … y cómo sé que mi procesador de texto me está enseñando el SHA de mi documento realmente?
    Creo que sólo se está desplazando el punto de desconfianza, no solucionándolo…

  4. Pingback: DNI Electrónico | Ventana Virtu@l

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