Saltar la navegación

Firma digital

Autenticación

Identificar fehacientemente a las partes es un requerimiento ineludible no ya para el comercio electrónico, sino para cualquier actividad desarrollada a través de un medio virtual, en el que las partes no tengan contacto personal directo y no se puedan emplear documentos convencionales.

Autenticación con un sistema de clave pública

Autenticar al usuario es relativamente sencillo: basta con exigirle que nos envíe el documento cifrado con su la clave privada. Si el destinatario puede descifrarlo con la clave pública del remitente, quedará demostrado que el autor es quien dice ser, porque solo él conoce su clave privada. Observe que las dos claves de cada par son complementarias: lo que cifra una (pública o privada) lo descifra la otra (privada o pública respectivamente).

Carlos Piñeiro Sánchez. Autenticación con una clave doble (CC BY-NC-SA)

Pero este sistema no es del todo satisfactorio. Por una parte, es evidente que el documento no está protegido: está cifrado, en efecto, pero puede descifrarse con la clave pública del remitente, que por definición es conocida por todos. Pero lo realmente importante es que en puridad no hemos autenticado al remitente: únicamente hemos comprobado que el documento ha sido cifrado con una clave privada que al parecer es propiedad del remitente.

Observe que un usuario puede crear tantos pares de claves como quiera. Puede asignarles nombres arbitrarios y distribuirlas con total libertad, de manera que podría suplantar la identidad de cualquiera. Es como si cualquiera de nosotros pudiese imprimir DNI asignando cualquier nombre y cualquier secuencia de dígitos. Claramente, se precisan garantías adicionales

Los certificados

Un certificado vincula unívocamente a una persona o entidad con una clave pública. Una forma de garantizar que esa clave pertenece a una persona en particular es avalarla con una declaración emitida por una entidad de confianza, de forma similar a como probamos que somos quienes decimos ser empleando un documento generalmente aceptado: por ejemplo el DNI o la tarjeta de estudiante.

Los certificados son emitidos y administrados por Autoridades de Certificación.

Observe que el DNI tiene validez legal mientras que la tarjeta de estudiante tiene un reconocimiento limitado a determinados lugares y circunstancias; de la misma forma algunos certificados tienen validez universal (en particular, los emitidos por la Administración Pública) pero otros dependen solo de un reconocimiento de facto basado en la confianza (por ejemplo, Verisign). Puede comprobar en su propio navegador qué certificadores reconoce, y cuál es su naturaleza; la imagen inferior muestra algunas autoridades reconocidas por defecto por Mozilla Firefox.

Algunas autoridades de certificación reconocidas por Mozilla

De esta forma, cuando el usuario distribuye su clave pública debe incluir también el certificado que la avala. En realidad cuando hablamos de certificados nos estamos refiriendo al conjunto formado por la clave pública del usuario y esa certificación.

El certificado nos proporciona la seguridad que antes no teníamos: si podemos usar la clave pública del usuario X para descifrar un documento, y esa clave pública está además avalada por un certificado emitido por una autoridad reconocida, tendremos que asumir que X es el remitente, salvo prueba en contra.

El contenido de un certificado es esencialmente el siguiente:

  • Nombre del propietario del certificado
  • Clave pública que se está certificando
  • Fecha en la que se emite el certificado, y fecha en la que éste caduca
  • Nombre de la autoridad certificadora
  • Firma digital de la autoridad certificadora

La jerarquía de confianza

El funcionamiento del sistema de certificados depende críticamente de la confianza que las partes depositen en las autoridades certificadoras.

En sentido estricto, que el certificado esté avalado por una entidad certificadora puede significar relativamente poco, dependiendo de la confianza que merezca esa autoridad; y dicha confianza se ha construido mediante una jerarquía: las entidades están avaladas por otras de mayor nivel, las cuales a su vez cuentan con el respaldo de certificadoras de segundo y sucesivos niveles. Se construye así una cadena de certificación en cuyo extremo está la autoridad certificadora raíz, cuyo certificado es autofirmado (se certifica a sí misma, de forma similar a como la Administración autocertifica la validez de los documentos de identidad).

Los usuarios también podemos crear certificados autofirmados, usando una aplicación de cifrado y firma (por ejemplo, GnuPG); muchas aplicaciones de usuario, como Adobe Acrobat, incluyen funcionalidades para generar certificados personales.

Firmas digitales

El certificado incluye la firma digital de la autoridad certificadora pero, ¿qué es realmente eso?

La inclusión de una firma digital es una necesidad derivada del riesgo de fraude o suplantación. Ya hemos visto que el sistema de clave pública, unido al certificado, permite autenticar a quien remite un mensaje o un documento; pero no ofrece garantía alguna en cuanto al documento en sí: el fichero podría haber haber sufrido alteraciones por errores de comunicación o problemas técnicos de cualquier otra índole, o en el peor de los casos, haber sido manipulado intencionadamente. Se precisa un procedimiento que garantice no solo la identidad de las partes, sino también la integridad del mensaje. Ésta es precisamente la finalidad de la firma digital.

Garantizando la integridad de un mensaje: las funciones hash

Un hash es un algoritmo matemático que genera un resumen (huella, o hash) un conjunto de datos de tamaño fijo e independiente y que está asociado de forma unívoca con los datos originales: es una función one way, lo que significa que dos mensajes diferentes tendrán también resúmenes diferentes. Matemáticamente, es posible que dos mensajes diferentes tengan el mismo hash (esto se denomina colisión de hash), pero la probabilidad de este evento es despreciable.

En noviembre de 2007 se comunicaron las primeras vulnerabilidades en una de las funciones hash más comunes, MD5 (que empleamos, por ejemplo, para comprobar la integridad de los ficheros una vez éstos han sido copiados o movidos de un lugar a otro). Se logró, mediante métodos de fuerza bruta, que dos imágenes tuviesen el mismo MD5 y que los equipos diesen por correcta una transferencia intencionadamente manipulada; este procedimiento, que originalmente requeriría menos de 10 horas de cómputo y unos 5 céntimos, puede ahora realizarse en unos minutos con solo un teléfono. Otra función común, SHA-1 fue rota en Febrero de 2017 por ataques de colisión diseñados por investigadores de Google y el CWI de Amsterdam. Esto no significa que las funciones hash sean inseguras, sino que algunos de estos algoritmos son vulnerables a ataques malintencionados y por tanto no deberían emplearse en procesos sensibles (replicar el ataque a SHA-1 requeriría más de 100 años de cómputo continuo de un ordenador, o un año con un centenar de tarjetas gráficas trabajando en parelelo).

Una firma digital: documento + hash + cifrado

Ahora ya tenemos todos los elementos que necesitamos para generar una firma:

  1. El emisor genera un resumen del mensaje y lo cifra con su clave privada (la huella cifrada es la firma propiamente dicha)
  2. La firma y el mensaje se cifran con la clave pública del destinatario
  3. El destinatario descifra el envío con su clave privada. Solo él puede hacerlo, y de esta manera se garantiza la confidencialidad
  4. A continuación intenta descifrar la firma con la clave pública del remitente. Si la operación se completa,
    • Tiene la garantía de que la firma ha sido realizada con la clave privada del emisor, que solo él debería conocer.
    • Recupera el hash original generado por el remitente
  5. Finalmente genera un segundo resumen del mensaje y lo compara con el hash original que le envió el remitente (por supuesto, ha de emplear el mismo algoritmo). Si el mensaje no ha sido manipulado estas dos huellas deben ser idénticas.

La firma digital así realizada proporciona...

  • Confidencialidad: solo el destinataro puede acceder al texto en claro del mensaje
  • Autenticación de las partes: como el hash incorporado está cifrado con la clave privada del remitente, solo él puede haberlo enviado; de forma similar, solo el destinatario puede obtener el texto en claro. Ambas partes están identificadas.
  • Integridad: el mensaje no puede modificarse (o más propiamente, ninguna modificación puede pasar inadvertida cuando el destinatario calcula el hash de verificación)
  • No repudio en origen: como el remitente están identificado y el mensaje está protegido, debe presumirse que la operación es legítima y jurídicamente eficaz, salvo prueba en contra.