ANEXO II Reglamento Dele...scapacidad

ANEXO II. Reglamento Delegado (UE) 2026/1436, de 1 de julio de 2026, DOUE, se completa la Directiva 2024/2841, Tarjeta Europea de Discapacidad

Ver Indice
»

ANEXO II. ESPECIFICACIONES DEL CÓDIGO QR PARA LA VERSIÓN FÍSICA DE LA TARJETA EUROPEA DE ESTACIONAMIENTO PARA PERSONAS CON DISCAPACIDAD

Vacatio legis

1. Formato del código QR de la versión física de la Tarjeta Europea de Estacionamiento para personas con discapacidad

a) Código QR Modelo 2, de conformidad con las especificaciones internacionales para los códigos QR ISO/IEC 18004: 2024 o equivalentes.

b) Nivel M de corrección de errores (redundancia del 15 %), que garantiza la resiliencia frente a arañazos o daños parciales de un código QR impreso.

c) Modo de codificación: La carga útil del QR consistirá en la estructura combinada issuerSigned Concise Binary Object Representation (CBOR, representación concisa de objetos binarios) y el correspondiente objeto de firma issuerAuth COSE_Sign1, tal como se define en CBOR Object Signing and Encryption (COSE, firma y cifrado de objetos CBOR, RFC 9052 secciones 3.1, 4.2 y 4.4), y seguirá el modelo de datos mDOC para elementos issuerSigned, pero adaptándolo al uso estático de tarjetas físicas. El issuerAuth será un objeto COSE_Sign1 con alg = ES256 y un encabezado protegido que contenga x5t (el parámetro de encabezado hash del certificado COSE X.509, tal y como se define en RFC 9360, sección 2; a efectos de la interoperabilidad, el algoritmo de hash utilizado en x5t será SHA-256).

d) Antes de que se codifique el código QR, el objeto CBOR/COSE combinado se comprimirá utilizando el formato zlib (RFC 1950, sección 2.2) con el algoritmo de deflación (RFC 1951, secciones 3.2 y 4). La matriz de bytes comprimida resultante se codificará en el modo byte para códigos QR, garantizando el pleno apoyo a las cargas útiles binarias CBOR/COSE y la interoperabilidad del escáner.

Para todos los campos de texto incluidos en la carga útil del QR, los expedidores codificarán los caracteres como Unicode UTF-8 en las cadenas de texto CBOR. No se aplicará la transliteración a los datos de carga útil firmados. A efectos de la interoperabilidad, los expedidores aplicarán el formato de normalización C (NFC) de la norma Unicode a todos los campos de texto antes de firmar.

e) Prefijo: La cadena QR de la Tarjeta Europea de Estacionamiento para personas con discapacidad comenzará por «EP1:MDOC:», que identifica el tipo de tarjeta y el perfil de codificación. Los prefijos tienen en cuenta el uso de mayúsculas o minúsculas y deben estar presentes. Se rechazarán los prefijos desconocidos o no compatibles. El prefijo y la carga útil comprimida se codificarán en el código QR como un único segmento de datos en modo byte.

f) Tamaño de módulo mínimo de ≥ 0,35 mm para garantizar la legibilidad en las tarjetas impresas.

g) Versión máxima 20; con un máximo de 97 × 97 módulos en cada lado.

2. Especificaciones de la generación de firmas para la Tarjeta Europea de Estacionamiento para personas con discapacidad

El sello electrónico cualificado (QSeal) empleado para sellar los códigos QR de la Tarjeta Europea de Estacionamiento para personas con discapacidad garantiza que los datos codificados proceden de la autoridad expedidora autorizada y no han sido alterados.

a) Algoritmo de firma: El algoritmo de firma será ES256 (ECDSA, con SHA-256 y utilizando la curva P-256), tal como se define en RFC 9053 (sección 2.1); en COSE, el algoritmo se identifica mediante el parámetro de encabezado alg de RFC 9052 (sección 3.1).

b) Clave de firma: La carga útil del QR se firmará empleando la clave privada correspondiente a un certificado cualificado de sello electrónico (QSealC).

c) Estructura COSE: El contenedor de firmas será un objeto COSE_Sign1. El encabezado protegido incluirá alg (ES256) y x5t (el parámetro de encabezado hash del certificado COSE X.509, tal y como se define en RFC 9360, sección 2; a efectos de la interoperabilidad, el algoritmo de hash utilizado en x5t será SHA-256). La verificación se basará en el uso del valor x5t para localizar el certificado correspondiente en el almacén de confianza en caché local del verificador creado a partir de la información de la lista de confianza y, a continuación, validará la cadena de certificados y el estado del certificado de conformidad con el marco de confianza eIDAS.

d) Norma de firma: La carga útil del código QR se firmará como objeto COSE_Sign1 de conformidad con RFC 9052 (sección 4), firma y cifrado de objetos CBOR. El issuerAuth contendrá el objeto COSE_Sign1, que se codificará sin la etiqueta CBOR para COSE_Sign1. El campo de la carga útil del objeto COSE_Sign1 se separará y codificará como CBOR nulo. Para la generación y verificación de firmas, la carga útil externa será la estructura CBOR codificada en CBOR determinista que contenga el valor docType y el valor issuerSigned del mapa CBOR de nivel superior.

e) Algoritmo de hash: Se utilizará SHA-256 como parte de ES256 para la generación de firmas y la verificación de la integridad.

f) Codificación: La carga útil se codificará mediante CBOR (RFC 8949, sección 4.2), tal como exigen las especificaciones COSE y mDOC, garantizando así la codificación y reproducibilidad de los datos firmados.

3. Especificaciones de impresión

a) Zona de silencio: El código QR estará rodeado por un margen claro de 4 módulos, sin ningún tipo de impresión, motivo o fondo.

b) Contraste: El código QR se imprimirá sobre un fondo blanco, con una relación de contraste mínima de 4:1, para garantizar una alta legibilidad en condiciones de iluminación variables.

c) El código QR se imprimirá utilizando el color definido en el anexo II de la Directiva (UE) 2024/2841, que garantiza el máximo contraste.

d) Colocación y tamaño: El código QR, incluida la zona de silencio, tendrá un tamaño de 37 mm × 37 mm y se situará en el anverso de la tarjeta, ligeramente a la derecha del centro, hacia el borde inferior. El código QR será como máximo de versión 20 (97 × 97 módulos), con un tamaño de módulo de al menos 0,35 mm.

El código QR, incluida su zona de silencio, se situará a una distancia mínima de 5 mm del borde inferior de la tarjeta.

4. Datos del código QR de la Tarjeta Europea de Estacionamiento para personas con discapacidad

El código QR contendrá un conjunto de datos mínimo y verificable fuera de línea, de conformidad con el principio de minimización de datos establecido en el artículo 5, apartado 1, letra c), del Reglamento (UE) 2016/679. La estructura de la carga útil será la siguiente:

a) Los atributos de la tarjeta se codificarán en CBOR dentro de un objeto issuerSigned.

b) La estructura estará rodeada y firmada por el QSeal de la autoridad expedidora en calidad de issuerAuth (COSE_Sign1, ES256, incluido x5t, el parámetro de encabezado hash del certificado COSE X.509).

c) El objeto CBOR/COSE resultante se comprimirá de conformidad con el punto 1, letra d), del presente anexo. La carga útil del código QR consistirá en el prefijo «EP1:MDOC:» seguido de la matriz de bytes comprimida resultante, y la carga útil completa se codificará utilizando el modo byte como un único segmento de datos de código QR.

El contenido de los datos consistirá en un subconjunto de datos visibles de los campos del anverso de la tarjeta enumerados en el anexo II de la Directiva (UE) 2024/2841 (fecha de caducidad, número de serie de la tarjeta), junto con el identificador de revocación, la firma electrónica y la información de esquema.

La firma electrónica contendrá:

i) issuerAuth: un objeto COSE_Sign1 firmado con la clave privada QSealC de la autoridad expedidora.

ii) encabezado protegido que incluye alg = ES256 (algoritmo de firma) y x5t (el parámetro de encabezado hash del certificado COSE X.509).

5. Datos opcionales

No se incluirán datos opcionales en el código QR.

6. Identificador de revocación (RID)

El identificador de revocación de la Tarjeta Europea de Estacionamiento para personas con discapacidad cumplirá lo dispuesto en el punto 6 del anexo I.

Las listas de revocación para las Tarjetas Europeas de Estacionamiento para personas con discapacidad revocadas solo harán referencia al RID. Los números de serie de las tarjetas no se publicarán en las listas de revocación.

7. Carga útil CBOR (dentro del QR) de la Tarjeta Europea de Estacionamiento para personas con discapacidad

Dentro de la carga útil del QR solo se incluirán los siguientes datos, que serán coherentes con los campos visibles de la Tarjeta Europea de Estacionamiento para personas con discapacidad establecidos en el anexo II de la Directiva (UE) 2024/2841:

Campo

Ruta mDOC

Tipo/Formato

Versión del esquema de datos

issuerSigned.nameSpaces."eu.epc".ver

Cadena (por ejemplo, "1.0")

Tipo de tarjeta: Tarjeta Europea de Estacionamiento para personas con discapacidad

docType

Enum ("eu.epc")

Número de serie de la tarjeta

issuerSigned.nameSpaces."eu.epc".sub

Cadena

Identificador de revocación

issuerSigned.nameSpaces."eu.epc".rid

CBOR bstr (16 bytes)

Fecha de caducidad de la tarjeta

issuerSigned.nameSpaces."eu.epc".exp

Etiqueta CBOR 1004, tal como se define en RFC 8943

(sección 2.1), con una cadena de texto UTF-8 que representa una fecha completa de RFC 3339 en formato AAAA-MM-DD.

La firma electrónica se encontrará en issuerAuth (un objeto COSE_Sign1). La cadena de certificados no estará integrada en la carga útil del código QR; en su lugar, el encabezado protegido COSE incluirá x5t, una huella digital de certificado empleada para localizar el QSealC correspondiente en el almacén de confianza en caché del verificador.

8. Ejemplo de carga útil del código QR de la Tarjeta Europea de Estacionamiento para personas con discapacidad: representación lógica en el estilo de la notación de objetos en JavaScript con comentarios

El siguiente ejemplo es una representación legible por personas de la vista lógica de la Tarjeta Europea de Estacionamiento para personas con discapacidad en el estilo de la notación de objetos en JavaScript (JSON). En la práctica, esta estructura no será legible por personas, ya que:

a) se codificará en CBOR (RFC 8949, sección 3);

b) se firmará utilizando una estructura COSE_Sign1 sin etiquetar con una carga útil separada (RFC 9052, sección 4.);

c) incluirá la fecha de caducidad como etiqueta CBOR 1004 con valor de fecha completa de conformidad con RFC 8943 (sección 2.1);

d) incluirá el parámetro de encabezado protegido x5t de conformidad con RFC 9360, utilizando SHA-256 en el QSealC de la entidad final codificado en DER, y

e) se comprimirá y prefijará con la cadena EP1:MDOC: antes de ser codificada en el código QR.

{

// Solo vista lógica de la Tarjeta Europea de Estacionamiento para personas con discapacidad en estilo JSON legible por el ser humano.

// La carga útil real del QR es CBOR determinista, no JSON.

"docType": "eu.epc", // credencial de la Tarjeta Europea de Estacionamiento para personas con discapacidad. Se incluye el valor docType, junto con

//issuerSigned en la carga útil externa COSE_Sign1.

"issuerSigned": {

// Datos protegidos por issuerAuth; se utilizan como carga útil separada.

// Para la generación y verificación de firmas, la carga útil externa separada cubre al mismo tiempo:

// docType e issuerSigned.

"nameSpaces": {

"eu.epc": {

"ver": "1.0", // Perfil QR / versión del esquema

// Número de serie de la tarjeta; definido por el expedidor, máximo 24 caracteres.

"sub": "EF12345678901234567890GH",

// Identificador de revocación: CBOR bstr real, 16 bytes/128 bits.

// Representados aquí como 32 caracteres hexadecimales para facilitar su lectura.

"rid": "4a8d9c112233445566778899aabbccdd",

// La codificación CBOR real utiliza la etiqueta 1004 para la fecha completa de conformidad con RFC 3339.

"exp": "2030-12-31"

}

}

},

"issuerAuth": {

// Forma real: COSE_Sign1 sin etiquetar, no un objeto JSON.

"type": "COSE_Sign1",

"tagged": false, // codificado sin la etiqueta CBOR COSE_Sign1

"payload": "detached", // el campo de carga útil COSE es CBOR nulo

"protectedHeader": {

// alg: ES256; parámetro de encabezado COSE equivalente 1 = -7.

"alg": "ES256",

// x5t: huella digital del certificado; parámetro de encabezado COSE 34.

"x5t": {

"hashAlg": "SHA-256", // valor hash COSE equivalente -16

// hash SHA-256 del QSealC de la entidad final codificado en DER.

// 32 bytes representados como 64 caracteres hexadecimales.

"hashValue":

"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"

}

},

"unprotectedHeader": {}, // vacío en este ejemplo

// firma COSE ES256: 64 bytes = 128 caracteres hexadecimales.

"signature":

"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"

}

}

9. Uso de mecanismos criptográficos

El uso de mecanismos criptográficos en el contexto del presente anexo será conforme con los mecanismos criptográficos acordados aprobados por el Grupo Europeo de Certificación de la Ciberseguridad y publicados por la Agencia de la Unión Europea para la Ciberseguridad (ENISA).