Vupt Docs

Verifique a cadeia de auditoria de custos externamente

A Vupt publica um verificador público em bash — scripts/verify-cost-chain.sh — que roda na sua máquina, offline, contra qualquer pacote NDJSON exportado. A chave pública Ed25519 da organização está embutida em cada linha, então nenhuma chamada de rede para a Vupt é necessária. Esta página é o guia do auditor.

Por que verificar externamente

Confiança sem verificação é inadequada para cargas de trabalho regulamentadas. Seguindo o framework verificar, depois confiar do Kyriba 2026 Operational Resilience Index, a Vupt entrega as primitivas criptográficas, as chaves públicas de verificação e um script executável por auditores — junto com os próprios dados de auditoria. O ADR-011 compromete a Vupt com cadeias de auditoria Ed25519 por organização; esta página fecha o ciclo dando a você a ferramenta para auditá-las de forma independente.

Pré-requisitos

O verificador é um único script bash com dependências portáveis. Sem runtime Node, sem SDK de linguagem, sem gerenciador de pacotes. A instalação é o que sua distribuição já oferece. OpenSSL 3.0+ é necessário porque a verificação Ed25519 via pkeyutl exige a flag -rawin adicionada no OpenSSL 3.0; o 1.1.1 mais antigo entrega as chaves Ed25519 mas não consegue verificá-las pelo comando pkeyutl.

  • bash 4.0+
  • jq 1.5+
  • openssl 3.0+ (necessário para verificação Ed25519 via pkeyutl -rawin)
  • sha256sum + base64 (GNU coreutils or BSD)

Início rápido

bash scripts/verify-cost-chain.sh <ndjson-file>

Para pipelines de integração contínua, --json emite um payload estruturado e independente de locale que você pode encadear com jq.

bash scripts/verify-cost-chain.sh --json <ndjson-file>

O verificador dispara a saída legível por humanos com base na variável LANG. Defina pt_BR.UTF-8 para Português do Brasil.

LANG=pt_BR.UTF-8 bash scripts/verify-cost-chain.sh <ndjson-file>

Exemplos de saída

Sucesso

OK: chain verified — 1432 rows — signature OK — chain-tip a4b2c8d1

Cadeia quebrada (saída 1)

VERIFICATION FAILED: row 1342 prev_hash mismatch (expected abc123..., got def456...)

Assinatura inválida (saída 2)

VERIFICATION FAILED: row 27 signature invalid (Ed25519 verify failed)

Entrada malformada (saída 3)

VERIFICATION FAILED: malformed NDJSON at line 813 (JSON parse failed)

Códigos de saída

  • 0Cadeia verificada — toda assinatura válida + todo prev_hash confere.
  • 1Cadeia quebrada — pelo menos um prev_hash não confere com o SHA-256 da linha anterior.
  • 2Assinatura inválida — pelo menos uma assinatura Ed25519 não verificou contra a chave pública embutida.
  • 3Entrada malformada — erro de parse do NDJSON, campo obrigatório ausente, arquivo de entrada ausente, ou ferramenta ausente.

Saída JSON (--json)

A flag --json emite um objeto JSON de linha única adequado para pipelines de CI. O formato é fixo; status é ok ou failed; reason é um dentre prev_hash_mismatch, signature_invalid, ou malformed.

{"status":"ok","rows":1432,"chain_tip":"a4b2c8d1e9f7..."}
{"status":"failed","reason":"prev_hash_mismatch","line":1342,"detail":"..."}

Esquema do envelope NDJSON

Cada linha do pacote de exportação é um objeto JSON. O contrato completo do envelope — o que o worker de exportação da Vupt escreve e o que o verificador consome:

{
  "id": "<ulid>",
  "prev_hash": "<64-char hex SHA-256>",
  "payload": { /* JCS-canonicalizable JSON */ },
  "signature": "<base64 Ed25519 signature>",
  "signing_key_pem": "<PEM SPKI Ed25519 public key>",
  "key_id": "<rotation history identifier>",
  "active_key_id": "<currently-active per-org key id>",
  "created_at": 1716285600000,
  "action": "cost.attribution_recorded",
  "jcs_canonical_bytes_b64": "<base64 of RFC 8785 JCS bytes>"
}

Verificação air-gapped

Como cada linha do NDJSON embute o signing_key_pem por organização, o verificador roda offline. Nenhum acesso de rede externo é necessário. Este é o mesmo script que você usaria numa sala de auditoria air-gapped, no notebook lacrado de um regulador, ou dentro da VPC do próprio cliente. A Vupt não precisa estar alcançável para validar sua cadeia de auditoria.

Código-fonte e leitura adicional

O verificador é licenciado MIT e vive no monorepo da Vupt. Todas as decisões de design são públicas.

O script verify-cost-chain.sh vai bundleado com o instalador desktop para inspeção offline — abra a partir do diretório de instalação em scripts/. Repositório-fonte privado durante a fase design-partner; re-publicação pública planejada junto com v1.4.