Hace un rato ha venido alguien para pedirme prestado mi lector de tarjetas inteligentes. Lo necesitaba para poder pagar sus impuestos (no está mal, lo hace bastante pronto, una semana antes de que acabe el plazo) usando su DNI electrónico para identificarse. Cuando le expliqué cómo instalar los controladores y utilizar el cacharro noté que no tenía muy claro cómo funcionaba la cosa, así que he decidido escribir una explicación aquí.
Lo que se utiliza hoy en día para comunicarse de forma segura a través de Internet es la criptografía de clave pública. Esto es un sistema por el que puedo generar dos claves para cifrar y descifrar mensajes, de forma que lo que se cifra con una de las claves sólo se puede descifrar con la otra, y viceversa.
Una de las claves me la guardo bien guardada y no se la comunico a nadie (clave privada) y la otra la disemino libremente, y se la doy a todos los que quiero que se puedan comunicar de forma segura conmigo (clave pública). Todo lo que alguien cifre con mi clave pública sólo se puede descifrar con mi clave privada (por lo que se puede asegurar de que sólo yo lo puedo leer) y sólo lo que yo cifre con mi clave privada se puede descifrar con mi clave pública (por lo que puedo dar garantías de que un mensaje procede de mi).
Los sitios web seguros también utilizan criptografía de clave pública; a las claves públicas les llaman “certificados”, y los certificados van a su vez firmados por otras organizaciones (llamadas “autoridades certificadoras”) que garantizan que los certificados pertenecen a quien dicen pertenecer.
Por ejemplo, si accedo a https://www.tarrio.org, el servidor firma su respuesta utilizando su clave privada, y yo puedo descifrar la firma usando el certificado de www.tarrio.org, y puedo verificar que el certificado es válido porque va firmado por una autoridad certificadora en la que confío, entonces puedo estar seguro de que he accedido realmente a www.tarrio.org.
Esto también puede funcionar al revés: si yo accedo a la web de Hacienda diciendo que soy Jacobo Tarrío y firmo la conexión con mi clave privada, y el servidor web de Hacienda puede descifrar la firma con mi clave pública que dice que soy Jacobo Tarrío, y esta clave pública va firmada por una autoridad certificadora en la que Hacienda confía, entonces el servidor web de Hacienda puede estar seguro de que yo soy Jacobo Tarrío.
Normalmente, la lista de autoridades certificadoras en las que confío está almacenada en el navegador. También puedo obtener uno o más certificados de usuario, y guardarlos en el navegador para poder usarlos para identificarme cuando navego. Por ejemplo, con el certificado digital emitido por la FNMT puedo pagar mis impuestos o acceder a mis datos de la Seguridad Social, ya que los servidores web de Hacienda y de la Seguridad Social confían en los certificados firmados por la FNMT.
El DNI electrónico es una “tarjeta inteligente” (o “Smart Card” para los anglófilos). Las tarjetas inteligentes tienen un chip que puede servir para muchas cosas; el chip del DNI electrónico contiene un certificado de usuario y su correspondiente clave privada. Mi navegador puede utilizarlos para identificarme ante los servidores web igual que en el caso anterior.
Para evitar que alguien pueda, simplemente, hacerse con mi DNI, copiar el certificado y clave privada a su navegador, y luego hacerse pasar por mi, las tarjetas criptográficas están diseñadas de forma que es imposible acceder a la clave privada. Se puede acceder libremente al certificado de usuario, pero la clave privada es totalmente inaccesible desde fuera de la tarjeta.
Así que, si no se puede acceder a la clave privada, ¿cómo puede el navegador usar el DNI electrónico para garantizar mi identidad?
La solución es muy simple. El chip del DNI electrónico no sólo contiene mi clave pública y mi clave privada. Este chip también contiene un microordenador especializado en cifrar y descifrar datos. Este microordenador sí tiene acceso a mi clave privada, así que puede firmar y descifrar datos en mi nombre. Por lo tanto, cuando el navegador necesita firmar o descifrar algo, lo envía al microordenador del DNI electrónico en lugar de hacerlo él mismo.
Para aumentar la seguridad, la clave privada también está cifrada dentro del chip utilizando una contraseña que sólo yo conozco. Para poder firmar o descifrar datos utilizando esta clave privada, primero es necesario descifrarla, y para eso he de introducir mi contraseña. Si alguien me roba el DNI e intenta usarlo para acceder a la web de mi banco, no podrá hacerlo sin conocer la contraseña de mi DNI.
Al final, todo esto significa que, cuando me identifico ante un servidor web utilizando el certificado de usuario del DNI electrónico, el servidor web puede estar seguro de que, realmente, mi DNI está conectado al ordenador que yo estoy usando.