Una firma no es válida para siempre
Una firma electrónica no es válida para siempre. Es válida en una fecha. La fórmula sorprende a primera vista, pero se explica muy bien.
Un certificado de firma tiene una vida útil. Caduca, y puede ser revocado antes de término, por ejemplo si su clave privada se ve comprometida. ¿Qué ocurre entonces con un documento firmado con ese certificado? ¿Hay que considerarlo como no firmado?
No. Pero con una condición: poder demostrar cuándo fue firmado.
Firma manuscrita, firma electrónica
Una firma manuscrita vincula a una persona con un documento, pero no dice nada de su contenido: nada impide modificar una página a posteriori. Y la verificación exige una pericia que puede resultar delicada.
Una firma electrónica responde a estos límites porque se calcula a partir del propio documento. Aporta tres garantías:
- Integridad: la firma se aplica sobre la huella del documento. Basta con modificar un solo byte para que la verificación falle.
- Identidad: la clave de firma está asociada a un certificado emitido por una autoridad que ha verificado la identidad de su titular.
- No repudio: la clave privada permanece bajo el control exclusivo del firmante, en particular cuando nunca sale de una tarjeta inteligente o de un token.
A ello se añade una fecha verificable, siempre que la firma lleve un sello de tiempo. Es precisamente lo que más le falta a la firma manuscrita: una fecha escrita a mano no es más que una declaración.
Los formatos de firma
El reglamento eIDAS reconoce varios formatos de firma normalizados por el ETSI. Se distinguen en primer lugar por el tipo de archivo al que se aplican:
- XAdES para los documentos XML
- PAdES para los PDF, donde la firma se integra en el documento
- JAdES para el JSON, en particular los intercambios entre aplicaciones
- CAdES para cualquier tipo de archivo
CAdES es el formato generalista. Como no presupone nada de la estructura del archivo firmado, la firma no se inserta en él: lo acompaña. Se habla de firma separada. Eso es lo que le permite firmar una imagen, un archivo comprimido, un archivo cifrado o un formato propietario sin tocarlo nunca.
El nivel T, el que añade la fecha
Cada uno de estos formatos se declina a su vez en niveles:
- Nivel B (Basic): la firma sola, con los atributos indispensables
- Nivel T (Timestamp): un token de sellado de tiempo se añade a la firma
- Nivel LT (Long Term): los elementos necesarios para la verificación, cadena de certificados y pruebas de revocación, quedan incorporados a la firma
- Nivel LTA (Long Term Archive): se añaden sellos de tiempo de archivo, renovados después a lo largo del tiempo
La diferencia entre LT y LTA reside en lo que se busca proteger. El nivel LT responde a un problema de disponibilidad: dentro de diez años, el servicio de revocación de la autoridad quizá haya desaparecido, así que se conservan hoy mismo, dentro de la firma, las pruebas que permitirán verificarla. El nivel LTA responde además a un problema de caducidad de las claves y de los algoritmos: un algoritmo considerado seguro hoy no lo seguirá siendo indefinidamente, y lo mismo ocurre con las claves utilizadas. Por último, el certificado de la autoridad de sellado de tiempo también tiene un fin de vida. Un sello de tiempo de archivo viene por tanto a sellar periódicamente el conjunto, pruebas incluidas, y cada nuevo token prolonga la validez de la cadena antes de que el anterior se debilite.
Una firma CAdES-T incorpora por tanto un token de sellado de tiempo emitido por una autoridad de confianza que acredita que la firma existía en ese instante preciso.
Sellar un documento, sellar una firma
Son dos posibilidades distintas, y no prueban lo mismo.
Sellar un documento, es decir su huella, es demostrar la existencia del archivo en esa fecha. No dice nada de su autor: un sello de tiempo no es una firma.
Sellar una firma es demostrar que la firma del documento tuvo lugar antes de esa fecha, y por tanto que el certificado seguía siendo válido en el momento en que se realizó. (Y como el valor de firma ya cubre la huella del documento, ¡la prueba de fecha vale también para el documento!)
Sellar una firma es lo que hace el nivel T.
Verificar no es solo recalcular una huella
Verificar una firma no consiste solo en comparar dos huellas. Es responder a una cuestión de derecho: ¿era válido el certificado del firmante en la fecha acreditada por el token?
Esto supone tres controles distintos:
- ¿Cubría esa fecha el periodo de validez del certificado?
- ¿Estaba revocado el certificado en esa fecha? La pregunta vale para el certificado del firmante, pero también para el de la autoridad que lo emitió.
- ¿La cadena de certificación se remonta a una autoridad de confianza reconocida?
Este último punto merece que nos detengamos, porque no basta con que una cadena se remonte: hay que saber además hasta dónde. Cada Estado miembro publica una lista de confianza eIDAS, firmada, que enumera los prestadores cualificados de servicios de confianza y los certificados de sus autoridades. Estas listas nacionales están a su vez referenciadas por una lista de listas, publicada por la Comisión Europea, y cuyos certificados de firma aparecen en el Diario Oficial de la Unión Europea.
Es esta cadena de publicación la que da su sentido a la palabra cualificado. Una autoridad no es cualificada porque su certificado lo afirme, sino porque un Estado la ha inscrito en su lista, y porque esa inscripción es verificable por cualquiera. Estas listas conservan el historial de los estados, lo que permite responder a la única pregunta que cuenta aquí: ¿estaba cualificada esta autoridad en la fecha del token?
Porque estos controles se aprecian en la fecha del token, y no en el momento en que se abre el archivo. Un certificado caducado hace dos años puede perfectamente sostener una firma válida. A la inversa, un certificado todavía en vigor sostiene una firma que no prueba gran cosa si su cadena no se remonta a ninguna autoridad reconocida.
Sin fecha demostrable, la firma muere con su certificado
Es la consecuencia directa. Una firma de nivel B, sin token, no aporta ninguna prueba de su propia fecha: la fecha que contiene la declara el firmante, por lo que no es oponible. El día en que el certificado caduca o se revoca, ya nada permite establecer que la firma sea anterior.
Y en general nadie se da cuenta hasta que lo necesita. Y ya no se puede hacer nada.
CAdES-T en Sigalion Vault
Por todas estas razones hemos elegido el formato CAdES-T para la firma en Sigalion Vault, disponible en macOS, Windows y Linux:
- CAdES baseline-T (ETSI EN 319 122-1), firma CMS separada (RFC 5652) reunida con el documento en un contenedor ASiC-S
- Token RFC 3161 aplicado sobre el valor de la firma, a elegir entre sellado de tiempo Sigalion o sellado de tiempo cualificado eIDAS (recomendado)
- Certificado software, tarjeta inteligente o token (IDOpte, YubiKey), según el soporte del que disponga
- Autoridades de confianza y cualificación eIDAS procedentes de la Lista de confianza oficial, estado de revocación del firmante y de su emisor comprobado en la fecha acreditada por el sello de tiempo
El archivo producido es un sobre .asics que reúne el documento y su firma en un formato normalizado, verificable con las herramientas conformes a las normas ETSI.
Firmar, sellar, cifrar: tres necesidades distintas
Más ampliamente, Vault responde a tres necesidades distintas, complementarias, pero a menudo confundidas:
- Firmar, para garantizar la integridad del documento, la identidad de su autor y expresar su acuerdo
- Sellar, para acreditar que existía en una fecha determinada
- Cifrar, para garantizar la confidencialidad y reservar la lectura a los destinatarios designados
Las tres se combinan: un documento puede firmarse y sellarse y luego cifrarse para su destinatario, y el conjunto puede a su vez llevar un sello de tiempo.