Sistema de Identidad Descentralizada (DID)
Prerrequisitos: Se recomienda haber leído los Componentes Core para entender cómo se integran los roles con los DIDs.
Público: Para quienes necesiten integrar identidad y permisos.
Contexto de uso: Al implementar lógica de negocio que requiera verificación de identidad institucional.
ISBE usa identidades descentralizadas (DIDs) basadas en el estándar W3C, adaptadas para entornos permisionados con verificación institucional.
Qué es un DID
Un DID es un identificador único que representa una organización verificada en ISBE. Permite que múltiples wallets (empleados, dispositivos) operen bajo una misma identidad corporativa.
did:isbe:0x1234567890abcdef...
Ventajas vs Solo Direcciones
| Direcciones Ethereum | DIDs en ISBE |
|---|---|
| Una dirección = una cuenta | Un DID = múltiples wallets de una organización |
| Cambiar wallet = perder historial | Rotar wallets manteniendo identidad |
| Sin metadata verificada | Información corporativa verificada |
| Sin gestión delegada | Controladores autorizados |
Creación de DIDs (Onboarding)
Importante: Los DIDs NO se auto-registran. ISBE los crea tras verificar la identidad corporativa.
Flujo de Onboarding:
- Organización solicita acceso a ISBE
- Verificación institucional (certificados cualificados, documentación legal)
- Firma de acuerdos contractuales
- ISBE admin crea el DID con rol
ISBE_ROLE - Se designan controladores autorizados (representantes legales)
// Solo ISBE admin
function insertFirstDidDocument(
bytes32 did,
string memory baseDocument,
bytes memory signature
) external onlyRole(ISBE_ROLE);
Componentes del DID
1. Controladores
Quién puede modificar el DID: Representantes legales autorizados de la organización.
// Añadir controlador
function addController(bytes32 did, bytes32 newController) external;
// Revocar controlador
function revokeController(bytes32 did, bytes32 controller) external;
// Consultar control
function checkController(bytes32 did, address account) external view returns (bool);
2. Verification Methods (Claves/Wallets)
Wallets de empleados asociadas al DID corporativo.
// Añadir wallet de empleado
function addVerificationMethod(
bytes32 did,
bytes32 vMethodId,
bytes memory publicKey
) external;
// Revocar wallet
function revokeVerificationMethod(bytes32 did, bytes32 vMethodId) external;
// Rotar wallet (cambiar antigua por nueva)
function rollVerificationMethod(
bytes32 did,
bytes32 oldVMethodId,
bytes32 newVMethodId,
bytes memory newPublicKey
) external;
3. Verification Relationships (Propósitos)
Define para qué sirve cada clave:
authentication: Login/autenticaciónassertionMethod: Firma de documentoskeyAgreement: CifradocapabilityInvocation: Invocar permisos
// Asignar propósito a una clave
function addVerificationRelationship(
bytes32 did,
bytes32 vMethodId,
string memory relationship,
uint256 notBefore,
uint256 notAfter
) external;
Consultas
// ¿Está registrada esta dirección?
function isKnownDid(address account) external view returns (bool);
// ¿Qué DID tiene esta dirección?
function didOf(address account) external view returns (bytes32);
// Obtener DID Document actual
function getDidDocument(bytes32 did) external view returns (DidDocument memory);
// Obtener DID Document histórico
function getDidDocumentByTimestamp(bytes32 did, uint256 timestamp) external view
returns (DidDocument memory);
// Listar todos los DIDs (paginado)
function getDids(uint256 page, uint256 pageSize) external view
returns (bytes32[] memory);
Integración con Control de Acceso
ISBE integra DIDs con RBAC, permitiendo asignar roles a identidades (no solo direcciones).
Fallback Automático:
Cuando se verifica un rol:
- ¿La dirección tiene el rol? → Permitir
- Si no, obtener DID de esa dirección
- ¿El DID tiene el rol? → Permitir
- Si ninguno → Denegar
function hasRole(bytes32 role, address account) public view returns (bool) {
// 1. Verificar por dirección
if (_hasRoleByAddress(role, account)) return true;
// 2. Obtener DID
bytes32 did = didRegistry.didOf(account);
if (did == bytes32(0)) return false;
// 3. Verificar por DID
return _hasRoleByDid(role, did);
}
Ventajas:
- Multiwallet: Un DID, múltiples empleados con acceso
- Rotación de claves: Cambiar wallet sin perder roles
- Recuperación: Añadir nueva wallet si se pierde una
Ejemplo: Un DID, Tres Wallets
DID Corporativo: did:isbe:empresa-abc
├─ Wallet CEO: 0x123...
├─ Wallet CFO: 0x456...
└─ Wallet Manager: 0x789...
Rol OPERATOR asignado al DID
→ Las 3 wallets tienen el rol automáticamente
Resumen Sistema de Identidad
| Componente | Descripción |
|---|---|
| DID | Identidad corporativa única y verificada |
| Onboarding | ISBE crea DIDs tras verificación institucional |
| Controladores | Representantes legales que gestionan el DID |
| Verification Methods | Wallets de empleados asociadas al DID |
| Verification Relationships | Propósitos de cada wallet (auth, firma, etc.) |
| Consultas | Resolución dirección → DID |
| Integración RBAC | Roles asignados a identidades, no solo direcciones |
El sistema DID de ISBE combina la flexibilidad de identidades descentralizadas con la verificación institucional requerida en entornos regulados.
Otros temas de la referencia técnica: