Saltar al contenido principal

Cadena de confianza

Si tu entidad va a emitir credenciales verificables, además de tener un DID y una clave P-256 registrada con assertionMethod, necesitas formar parte de una cadena de confianza. Este paso solo es necesario para emisores.

Roles

RolQuién puede emitirCapacidad
RTAOSolo ISBEGenera la raíz de un dominio.
TAOEntidad acreditada por ISBEAcredita TIs o subTAOs dentro del dominio.
TIEntidad acreditada por una TAOEmite credenciales verificables de los tipos autorizados.

Requisitos previos

  • Tener un DID registrado y una clave P-256 con la relación assertionMethod.
  • Tener instalado el CLI isbe-identity-accreditation-cli.
  • Tener una RTAO previamente solicitada a ISBE para tu dominio. ISBE es la única entidad con capacidad de emitir RTAOs.

Configuración del CLI

La primera vez que ejecutes cualquier comando, el CLI generará la configuración por defecto. Para forzarlo:

./isbe-accreditation-cli.sh config --show

Esto crea el directorio isbe-data/ con un fichero isbe-config.json. Edítalo para que tenga la siguiente estructura:

{
"issuerDid": "did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV",
"jwkPrivateKeyPath": "./config/key.json",
"logging": { "debug": false },
"accreditationSchema": "https://raw.githubusercontent.com/alastria/isbe-identity-schemas-repository/main/commons/isbe-accreditation-schema.json",
"authorizationSchema": "https://raw.githubusercontent.com/alastria/isbe-identity-schemas-repository/main/commons/isbe-authorization-schema.json",
"credentialSchema": "https://...",
"tirUrl": "https://tir.portal.redisbe.com/trusted-issuers-registry/v1",
"trustAnchors": ["did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV"]
}

Ajusta tirUrl, trustAnchors y los esquemas al entorno en el que vayas a operar.

A continuación, crea isbe-data/config/key.json con la clave P-256 que registraste en el DID:

{
"kid": "did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV#WqpsDjTHnYVNvX8qx4a1FER8NgnEBS6DjLbDVrX-Fg4",
"kty": "EC",
"crv": "P-256",
"alg": "ES256",
"x": "<X>",
"y": "<Y>",
"d": "<D>"
}
Formato del kid

El kid se construye como <DID> + "#" + <thumbprint JWK>. Debe coincidir exactamente con el verificationMethod registrado en el DID. Si no, las firmas serán rechazadas en la verificación.

Generar una acreditación RTAO

Esta operación la realiza ISBE, pero conviene conocer el comando para contexto:

pnpm run cli generate \
--sub did:isbe:uc:<DID_ENTIDAD> \
--domain ISBE \
--type rtao \
--attribute "<64 CARACTERES HEX ALEATORIOS>" \
--exp 2090222442

La salida es un JWT firmado que representa la acreditación. ISBE registra esta acreditación en el TIR.

Generar una acreditación TAO

./isbe-accreditation-cli.sh generate \
--sub <DID Sujeto Acreditación> \
--domain <DOMINIO> \
--type tao \
--attribute "<64 CARACTERES HEX ALEATORIOS>" \
--accreditedFor <TIPO_CREDENCIAL> \
--accreditedSchemas <ESQUEMA_CREDENCIAL> \
--accreditedBy <URL_ACREDITACION_PADRE>

Significado:

ParámetroDescripción
subDID del sujeto de la acreditación (puede ser tu propio DID o un tercero).
domainDominio al que se asocia la acreditación.
typetao o ti.
attribute64 caracteres hex aleatorios. Identificador único del recurso en el TIR.
accreditedForTipos de VC que la acreditación habilita (separados por espacios).
accreditedSchemasURLs de los esquemas correspondientes (1:1 con accreditedFor).
accreditedByURL pública (TIR) de la acreditación padre que valida esta. Para una TAO debe apuntar a una RTAO o a otra TAO con superconjunto de tipos.

Ejemplo

pnpm run cli generate \
--sub did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV \
--domain ISBE \
--type tao \
--attribute "abfc5a265e1b3aa60718619c0041e3c051686fd05d0f0954679eaa756136b343" \
--accreditedFor IsbePortalLearCredential \
--accreditedSchemas https://raw.githubusercontent.com/alastria/isbe-identity-schemas-repository/main/use-cases/isbe/portal/lear/portalLear-schema.json \
--accreditedBy "https://tir.portal.redisbe.com/trusted-issuers-registry/v1/issuers/did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV/attributes/fad7068b8f890f20b86554be9f9d66d6b0ce08ec3b057a937e21f8a30ec545c7" \
--exp 2090222442

La salida es un JWT (eyJ...) que representa la acreditación.

Generar una acreditación TI

./isbe-accreditation-cli.sh generate \
--sub <DID Sujeto Acreditación> \
--domain <DOMINIO> \
--type ti \
--attribute "<64 CARACTERES HEX ALEATORIOS>" \
--accreditedFor <TIPO_CREDENCIAL> \
--accreditedSchemas <ESQUEMA_CREDENCIAL> \
--accreditedBy <URL_ACREDITACION_TAO_PADRE>

Aplican las mismas reglas que para TAO con dos restricciones:

  • El dominio debe coincidir con el de la TAO padre.
  • Los tipos / esquemas deben ser subconjunto de los acreditados por la TAO padre.

Registro de la acreditación en el TIR

Actualmente este paso debe realizarlo un operador de ISBE. Está en desarrollo la posibilidad de que el propietario de la acreditación la registre directamente.

Para solicitar el registro:

  1. Envía el JWT generado al equipo de ISBE.
  2. Indica el dominio, la entidad sujeto y los tipos de credenciales que va a emitir.
  3. ISBE publicará la acreditación en el TIR del entorno correspondiente.

Una vez publicada, la URL del TIR será la que utilicen los verificadores para validar credenciales emitidas por tu entidad.

Configuración del Connector

Tras registrar las acreditaciones en el TIR, configura el Connector de tu instancia para que use los nuevos identificadores y claves:

  1. Accede al admin del Connector: https://<tu-instancia>/admin/login/.
  2. En el apartado Accreditation, rellena la URL de la acreditación publicada en el TIR. Importante: usa la URL, NO el JSON.
  3. En el apartado de Framework / Metadata, introduce el DID correspondiente.
  4. Registra el kid y la clave privada P-256 en la sección Keys.
Claves en producción

Nunca uses las claves de ejemplo del repositorio en producción. Por motivos de seguridad, las claves del Connector deben ser únicas por entidad y entorno.

Validar la cadena

Para verificar que tu cadena de confianza funciona:

  1. Genera una credencial verificable de prueba con el Connector.
  2. Llama al endpoint de verificación del Trusted Issuer Service.
  3. Comprueba que la cadena se resuelve correctamente hasta la RTAO de ISBE.

Si la verificación falla, revisa:

  • Que las URLs en accreditedBy apuntan al TIR correcto.
  • Que los esquemas son subconjunto de los acreditados.
  • Que la clave de firma del Connector coincide con la registrada en el DID.