Certificado DAT

1. Descripción general

El certificado DAT es la especificación que controla el permiso de emisión de DAT y gestiona los algoritmos de firma y de cifrado del token, así como la información de las claves (Key).

Cada certificado tiene un ID único (CID) y gestiona de forma segura el ciclo de vida del token imponiendo el período durante el cual se puede emitir el DAT y el período de validez (TTL) de los tokens generados.

En DAT la rotación de claves no es opcional. Como el período de emisión está grabado en el certificado a nivel de especificación, una vez transcurrido ese período ya no se pueden crear tokens nuevos con ese certificado.


2. Estructura del certificado

Formato de transmisión del certificado
cid
uint64 (hexadecimal)
.
start
uint64 (decimal)
.
duration
uint64 (decimal)
.
ttl
uint64 (decimal)
.
sig-alg
String
.
crypto-alg
String
.
sig-key
Base64Url
.
crypto-key
Base64Url
Pase el cursor sobre cada campo para ver su descripción.
cid . start . duration . ttl . sig-alg . crypto-alg . sig-key . crypto-key
Estructura
Ejemplorefresh

2.1. Especificación detallada por campo

CID : Hex (uint64)

  • Es el ID de certificado único que identifica al certificado. Se corresponde con el campo CID del DAT y determina qué certificado se usa durante la verificación.
  • El CID es un identificador inmutable. Al sustituir una clave no se reutiliza el mismo CID: se emite un certificado con un CID nuevo.

Hora de inicio de emisión del DAT : uint64 (Unix Time)

  • Indica, en unidades de segundos (Seconds), el momento de inicio a partir del cual se puede emitir un DAT con este certificado.

Duración de emisión del DAT : uint64 (Seconds)

  • Es el período de validez de emisión del certificado. Una vez transcurrido ese período (en segundos) desde Hora de inicio de emisión del DAT, ya no se pueden emitir nuevos DAT con este certificado.
  • Es una duración (duration), no un instante absoluto. El momento de finalización se calcula como start + duration.

DAT TTL (Tiempo de vida) : uint64 (Seconds)

  • Es el período de validez (Time To Live) de los DAT emitidos con este certificado. Al crear un DAT, el valor expire se establece sumando este valor al momento de emisión.

Algoritmo de firma : String / Enum

  • Es el algoritmo de firma que se utilizará para generar y verificar el campo signature del DAT.

Algoritmo de cifrado : String / Enum

  • Es el algoritmo de cifrado que se utilizará para cifrar y descifrar el campo secure del DAT.

Clave de firma : Base64Url (Binary)

  • Son los datos de la clave utilizada para firmar y verificar. (Según el algoritmo, puede ser la clave pública/privada de una clave asimétrica o una clave simétrica).

Clave de cifrado : Base64Url (Binary)

  • Son los datos de la clave de cifrado utilizada para cifrar y descifrar el campo secure.

2.2. Cálculo de tiempos

end    = start + duration        momento de fin de la emisión
expire = end + ttl               momento de expiración final del certificado
  • Todos los cálculos se realizan en uint64 y solo el desbordamiento se rechaza como error.
  • duration = 0 y ttl = 0 son valores legales. Permiten expresar un certificado cuya ventana de emisión se cierra de inmediato, o un certificado que produce tokens que quedan invalidados nada más expirar.
  • Como todos los campos son enteros sin signo, los valores negativos no existen desde el punto de vista del tipo.

2.3. Firma del constructor

Todas las implementaciones de los distintos lenguajes utilizan el siguiente orden de argumentos.

(cid, dat_issuance_start_seconds, dat_issuance_duration_seconds, dat_ttl_seconds,
 signature_key, crypto_key)

El tercer argumento no es el momento de fin, sino una duración

Si pasa el momento absoluto de finalización (end) como tercer argumento, no se produce ningún error, pero se crea un certificado con una ventana de validez equivocada, porque ese valor se usa tal cual en start + duration.


3. Ciclo de vida del certificado

Las cuatro fases del certificado
Creación
Inicio de emisión
Fin de emisión
Expiración final
Retraso de emisión (delay)
Emisión disponible (duration)
DAT TTL
Tiempo para que todos los nodos recojan el certificado
Se puede emitir y verificar DAT
No se puede emitir, solo verificar
El certificado solo expira definitivamente tras recorrer las fases de retraso de emisión, emisión disponible y TTL restante del DAT.
FaseEmisiónVerificaciónDeterminación
Retraso de emisiónissuable() == false
Emisión disponibleissuable() == true
TTL restante del DATLa ventana de emisión está cerrada, pero aún no ha expirado
Después de la expiración finalexpired() == true
  • La posibilidad de emitir se determina con signable() && start <= now <= end, e incluye ambos extremos.
  • Aunque la ventana de emisión se cierre, el certificado sigue vivo durante ttl más. Esto es así para que un token emitido justo antes de que se cierre la ventana pueda agotar su propia vida.
  • La fase de retraso de emisión (delay) existe para dar tiempo a que todos los nodos del clúster recojan el nuevo certificado. Para más detalles, consulte el documento Sincronización CMS.

4. Algoritmos

4.1. Algoritmos de firma

Lista de algoritmos de firma para evitar la falsificación y la alteración del DAT. Se admiten métodos de clave simétrica y de clave asimétrica.

NombreMétodoNotas
ECDSA-P256AsimétricoFirma digital de curva elíptica (NIST secp256r1)
ECDSA-P384AsimétricoFirma digital de curva elíptica (NIST secp384r1)
ECDSA-P521AsimétricoFirma digital de curva elíptica (NIST secp521r1)
HMAC-SHA256-MFSSimétricoKeyed-Hashing basado en una clave secreta de tamaño fijo de 256 bits
HMAC-SHA384-MFSSimétricoKeyed-Hashing basado en una clave secreta de tamaño fijo de 384 bits
HMAC-SHA512-MFSSimétricoKeyed-Hashing basado en una clave secreta de tamaño fijo de 512 bits

MFS (Maximum Fixed Secret): método que utiliza una clave secreta de tamaño fijo con el mismo número de bits que el tamaño de salida (Output) del algoritmo de hash.

4.2. Algoritmos de cifrado

Lista de algoritmos de cifrado autenticado (Authenticated Encryption) para proteger los datos confidenciales del interior del DAT (campo secure).

NombreLongitud de claveEstructura
IV-AES128-GCM128 bitsIV(96bit) + resultado del cifrado
IV-AES256-GCM256 bitsIV(96bit) + resultado del cifrado

Incorporación del IV (Initialization Vector): un NONCE (IV) único de 96 bits, generado en cada operación de cifrado, se combina como prefijo (Prefix) delante del resultado del cifrado. Durante el descifrado, los primeros 96 bits se separan como IV para realizar el descifrado.

4.3. Validación de la longitud de la clave

Al importar un certificado se comprueba que el número de bits del algoritmo declarado coincide con la longitud real de la clave.

Por ejemplo, si un certificado declara IV-AES256-GCM pero contiene una clave de 16 bytes, la importación se rechaza sin más. Sin esta comprobación se creería estar usando AES-256 mientras que en realidad se estaría operando con AES-128.


5. Exportación verify-only

A los servidores que solo verifican no hace falta darles la clave privada de firma. Por eso el certificado DAT ofrece la exportación verify-only.

Rutas de distribución del certificado completo y del certificado verify-only
DAT CMS
Servidor emisor
Servidor solo de verificación
GET /v1/certs
Certificado completo (incluye la clave privada de firma)
GET /v1/certs/verify-only
Certificado verify-only
SolicitudDistribución del certificado
Algoritmo de firmasupport_verify_only()Resultado de la exportación verify-only
Familia ECDSAtrueDe la clave de firma sale solo la clave pública (de 130 a 87 caracteres Base64)
Familia HMACfalseSe produce un error explícito

HMAC es una clave simétrica, por lo que no existe eso de una "clave que solo sirve para verificar". Por eso, cuando se intenta una exportación verify-only, no se omite en silencio, sino que se avisa de inmediato con un error. Si se deja mezclado un certificado HMAC, la exportación verify-only falla, así que quien opere nodos exclusivos de verificación debe usar la familia ECDSA.

La clave de cifrado sale completa incluso en verify-only

La clave AES del campo secure es simétrica, por lo que siempre se exporta completa, sea o no una exportación verify-only. Para descifrar hace falta la misma clave con la que se cifró.

Es decir, un servidor que recibe un certificado verify-only:

  • No puede falsificar firmas — al no tener la clave privada, no puede crear nuevos DAT.
  • Sí puede descifrar la carga útil secure — frente a él no se ofrece confidencialidad.

verify-only es un mecanismo para repartir el permiso de emisión, no para repartir la confidencialidad. Si un valor debe permanecer oculto a los nodos de verificación, no debe colocarse en secure.