Skip to content

Conceitos: DIDs, passaportes e ações assinadas

Identidade (did:key)

Cada agente/operador é um par de chaves Ed25519 codificado como did:key. Como a chave pública está embebida no identificador, um verificador resolve-o offline — sem registo, sem rede. O compromisso é não haver rotação/revogação ao nível do DID; trata disso ao nível do passaporte (expiresIn curto) ou usa did:web para operadores de longa duração.

Passaporte (uma Verifiable Credential)

Um passaporte é uma VC W3C assinada pelo operador sobre o agente:

{
  "type": ["VerifiableCredential", "AgentPassport"],
  "issuer": "did:key:<operador>",
  "credentialSubject": {
    "id": "did:key:<agente>",
    "name": "support-bot",
    "model": "claude-fable-5",
    "scopes": ["email:send", "crm:read"],
    "operator": "did:key:<operador>"
  }
}

O verifyPassport valida a assinatura do operador e devolve este sujeito. Os scopes são strings livres que defines ("recurso:ação" funciona bem). "*" concede tudo.

Ações assinadas

Uma ação é um JWT EdDSA assinado pelo agente:

{ "iss": "did:key:<agente>", "act": { "type": "email:send", "target": "a@b.com" }, "iat": 1785600000 }

O verifyAction prova que o JWT foi assinado pela chave do agente. Guarda-os para construir um registo de auditoria à prova de adulteração: nem um servidor comprometido consegue forjar uma ação sem a chave privada do agente.

Cadeia de confiança

DID operador ──emite──▶ passaporte (VC) ──sobre──▶ DID agente ──assina──▶ ação (JWT)

Um verificador confia numa ação se: (1) a ação verifica para o DID do agente, (2) o passaporte verifica para um DID de operador confiável e nomeia esse mesmo agente, e (3) o passaporte concede o scope de que a ação precisa.