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
| Rol | Quién puede emitir | Capacidad |
|---|---|---|
| RTAO | Solo ISBE | Genera la raíz de un dominio. |
| TAO | Entidad acreditada por ISBE | Acredita TIs o subTAOs dentro del dominio. |
| TI | Entidad acreditada por una TAO | Emite 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>"
}
kidEl 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ámetro | Descripción |
|---|---|
sub | DID del sujeto de la acreditación (puede ser tu propio DID o un tercero). |
domain | Dominio al que se asocia la acreditación. |
type | tao o ti. |
attribute | 64 caracteres hex aleatorios. Identificador único del recurso en el TIR. |
accreditedFor | Tipos de VC que la acreditación habilita (separados por espacios). |
accreditedSchemas | URLs de los esquemas correspondientes (1:1 con accreditedFor). |
accreditedBy | URL 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:
- Envía el JWT generado al equipo de ISBE.
- Indica el dominio, la entidad sujeto y los tipos de credenciales que va a emitir.
- 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:
- Accede al admin del Connector:
https://<tu-instancia>/admin/login/. - En el apartado Accreditation, rellena la URL de la acreditación publicada en el TIR. Importante: usa la URL, NO el JSON.
- En el apartado de Framework / Metadata, introduce el DID correspondiente.
- Registra el
kidy la clave privada P-256 en la sección Keys.
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:
- Genera una credencial verificable de prueba con el Connector.
- Llama al endpoint de verificación del Trusted Issuer Service.
- Comprueba que la cadena se resuelve correctamente hasta la RTAO de ISBE.
Si la verificación falla, revisa:
- Que las URLs en
accreditedByapuntan 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.