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.
bash4.0+jq1.5+openssl3.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 a4b2c8d1Cadeia 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
- 0 — Cadeia verificada — toda assinatura válida + todo prev_hash confere.
- 1 — Cadeia quebrada — pelo menos um prev_hash não confere com o SHA-256 da linha anterior.
- 2 — Assinatura inválida — pelo menos uma assinatura Ed25519 não verificou contra a chave pública embutida.
- 3 — Entrada 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.