Volver a Explorar
ConceptoInstitucionalIdentidad y CVBásico

¿Cómo se revoca una credencial?

5 minVerificado · 2026-05-18

Una credencial verificable, una vez emitida, vive en la wallet del ciudadano. El emisor no la controla más físicamente. Pero a veces, después de emitir, hay que invalidar la credencial: licencia suspendida, diploma anulado por fraude académico, credencial profesional retirada por mala praxis.

¿Cómo se hace esto sin pedirle al ciudadano que devuelva su credencial? La respuesta: mecanismos de revocación.

El problema en una frase

Una vez firmada criptográficamente, la credencial es válida criptográficamente para siempre. El verifier necesita un mecanismo adicional para saber si la credencial sigue vigente.

Sin revocación, el emisor solo podría emitir credenciales con vida corta y reemitirlas constantemente — caro operativamente.

Las 3 estrategias de revocación

Tres aproximaciones que coexisten en SSI moderno:

Status list

El emisor mantiene una lista pública de credenciales revocadas. El verifier consulta antes de aceptar.

Credenciales de vida corta

Las credenciales vencen rápido (días). Si hay que revocar, se deja de re-emitir. Sin mecanismo adicional.

Revocación con ZKP

Más avanzado: la credencial prueba "no estoy revocada" con ZKP, sin revelar identidad.

Para gov masivo, status list es el default. Las otras dos son complementarias para casos específicos.

BitstringStatusList — el estándar W3C

El estándar más adoptado: BitstringStatusList (W3C VC Status List 2021 + 2024).

Modelo:

  • Emisor mantiene una lista de bits (típicamente 128 KB para 1M credenciales).
  • Cada bit representa una credencial: 0 = vigente, 1 = revocada.
  • La lista es pública, accesible por URL.
  • Cuando emite una credencial, el emisor le asigna un índice (posición en la lista) y lo incluye en la credencial.

Cuando hay que revocar:

  • El emisor cambia el bit del índice correspondiente de 0 a 1.
  • La lista se republica con el cambio.

Cuando un verifier verifica:

  1. Descarga la lista (o usa caché reciente).
  2. Lee el índice de la credencial.
  3. Si bit = 0, vigente. Si bit = 1, revocada.

La estructura en la credencial

{
  "credentialSubject": {
    "name": "Juan Pérez",
    "license": "B1"
  },
  "credentialStatus": {
    "id": "https://salta.gob.ar/status/list-2026#94567",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "revocation",
    "statusListIndex": "94567",
    "statusListCredential": "https://salta.gob.ar/status/list-2026"
  }
}

La credencial incluye un credentialStatus que apunta a la lista + el índice.

La estructura de la lista

{
  "id": "https://salta.gob.ar/status/list-2026",
  "type": ["VerifiableCredential", "BitstringStatusListCredential"],
  "issuer": "did:web:salta.gob.ar",
  "validFrom": "2026-01-01T00:00:00Z",
  "credentialSubject": {
    "id": "https://salta.gob.ar/status/list-2026#list",
    "type": "BitstringStatusList",
    "statusPurpose": "revocation",
    "encodedList": "H4sIAAAAAAAAA-3BMQ0AAAACAJ..."
  },
  "proof": { ... }
}

La lista misma es una VerifiableCredential — firmada por el emisor, verificable por el verifier.

La compresión

128 KB para 1M credenciales suena mucho, pero con gzip + sparse data (la mayoría son 0), la lista comprime a ~10-20 KB típicamente. Y al ser cacheable + descargable infrecuentemente, el costo de red es bajo.

Ventajas y desventajas

AspectoBitstringStatusListVida cortaZKP-based
Privacy del holderVerifier ve qué índice consultóNinguna infoMejor
Carga emisorUna lista para todosRe-emisión constanteCompleja
Tiempo a revocación visibleInmediatoHasta vencimientoInmediato
Verificación offlineNo (requiere lista)Sí (no requiere check)Posible
EstandarizaciónW3C BitstringStatusListN/AEn desarrollo

Cuándo usar cada estrategia

CasoEstrategia
Licencia de conducir, diplomasBitstringStatusList
Constancias temporales (domicilio, certificados)Vida corta (renovación periódica)
Casos con privacy crítica (votos, beneficios sociales)ZKP-based o BitstringStatusList con cuidado
Identidad ciudadana baseBitstringStatusList

El issue de privacy

BitstringStatusList tiene una limitación: cuando un verifier consulta la lista, el emisor (que la sirve) sabe que alguien está verificando la credencial índice N. No sabe quién, pero sabe cuándo.

Esto crea un canal de tracking limitado. Variantes mejoradas:

  • Status List con CDN distribuido: el emisor no tiene visibilidad directa de qué índice se consulta.
  • Status List bundled con la presentación: el holder envía la sección relevante de la lista junto con la credencial.

Para casos gov típicos, el tracking residual es aceptable. Para casos críticos, alternativas con ZKP son recomendables.

Implementación

// Issuer revoca una credencial
async function revokeCredential(credentialIndex: number) {
  const bitstringList = await loadCurrentBitstringList();
  bitstringList.setBit(credentialIndex, 1);
  await publishUpdatedList(bitstringList);
}

// Verifier verifica el estado
async function checkCredentialStatus(credential: VerifiableCredential) {
  const statusInfo = credential.credentialStatus;
  const list = await fetchBitstringList(statusInfo.statusListCredential);
  await verifyListSignature(list);
  
  const bit = list.getBit(parseInt(statusInfo.statusListIndex));
  return bit === 0 ? "vigente" : "revocada";
}

Referencias

Relacionados

Tagsrevocaciongovconceptos