Saltar al contenido principal

Sistema de Identidad Descentralizada (DID)

nota

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 EthereumDIDs en ISBE
Una dirección = una cuentaUn DID = múltiples wallets de una organización
Cambiar wallet = perder historialRotar wallets manteniendo identidad
Sin metadata verificadaInformación corporativa verificada
Sin gestión delegadaControladores autorizados

Creación de DIDs (Onboarding)

Importante: Los DIDs NO se auto-registran. ISBE los crea tras verificar la identidad corporativa.

Flujo de Onboarding:

  1. Organización solicita acceso a ISBE
  2. Verificación institucional (certificados cualificados, documentación legal)
  3. Firma de acuerdos contractuales
  4. ISBE admin crea el DID con rol ISBE_ROLE
  5. 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ón
  • assertionMethod: Firma de documentos
  • keyAgreement: Cifrado
  • capabilityInvocation: 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:

  1. ¿La dirección tiene el rol? → Permitir
  2. Si no, obtener DID de esa dirección
  3. ¿El DID tiene el rol? → Permitir
  4. 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

ComponenteDescripción
DIDIdentidad corporativa única y verificada
OnboardingISBE crea DIDs tras verificación institucional
ControladoresRepresentantes legales que gestionan el DID
Verification MethodsWallets de empleados asociadas al DID
Verification RelationshipsPropósitos de cada wallet (auth, firma, etc.)
ConsultasResolución dirección → DID
Integración RBACRoles 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: