UnB 2026.1 · Tópicos em Engenharia

Cadeia de custódia verificável para vídeos CFTV usando OpenTimestamps e Bitcoin

Este projeto demonstra como preservar a integridade de vídeos de monitoramento sem armazenar o vídeo, nem seus metadados sensíveis, diretamente em uma blockchain.

Ideia central Bitcoin é usado como camada pública de anterioridade temporal.
Escopo O vídeo permanece off-chain; somente o compromisso criptográfico é carimbado.
Status MVP local com verificação íntegra e quatro casos adulterados detectados.

Resumo

Prova pública de existência temporal para evidências privadas

Sistemas de CFTV são usados como fonte de evidência em auditorias, disputas, investigações e processos de conformidade. O problema é que um arquivo de vídeo armazenado em ambiente centralizado pode ser contestado: ele pode ter sido alterado, ter trechos removidos, ter segmentos reordenados ou ter sido substituído depois da captura.

A solução proposta segmenta o vídeo, calcula hashes SHA-256, gera um manifesto, assina esse manifesto com a chave do dispositivo de borda e usa OpenTimestamps para produzir uma prova de existência temporal ancorada em Bitcoin. Assim, um verificador independente pode comparar o pacote apresentado com os compromissos criptográficos registrados anteriormente.

Problema

Armazenar o vídeo não basta para provar cadeia de custódia

Em um sistema tradicional, a confiança fica concentrada no operador do DVR, NVR, servidor ou banco de vídeos. Mesmo que o arquivo exista, ainda falta uma prova externa de que aquele conteúdo já existia naquele estado em um instante anterior.

Com ferramentas modernas de edição e geração por inteligência artificial, a contestação fica mais plausível. Por isso, o projeto separa três perguntas:

  • O pacote apresentado está íntegro?
  • O manifesto foi produzido por uma chave autorizada?
  • Esse manifesto existia antes de uma determinada data?

Relevância

Bitcoin como infraestrutura de verificação, não como banco de dados

O projeto não tenta gravar vídeos em Bitcoin. Isso seria caro, lento e inadequado. A contribuição está em usar Bitcoin apenas como uma camada pública, resistente a adulteração retroativa, para provar anterioridade temporal de um manifesto assinado.

Privacidade

O vídeo e os metadados operacionais permanecem fora da blockchain.

Auditabilidade

Terceiros podem verificar integridade sem confiar no operador do armazenamento.

Baixo acoplamento

A solução pode complementar CFTV existente, storages, DVRs e NVRs.

Fundamentos

Conceitos da disciplina aplicados ao projeto

A proposta combina primitivas estudadas em Bitcoin para resolver um problema de cadeia de custódia: transformar um vídeo privado em evidência verificável sem colocar o conteúdo do vídeo na blockchain.

Hash SHA-256
Cada segmento e o manifesto recebem um digest determinístico. Qualquer alteração de bytes muda o hash esperado e torna a adulteração detectável.
Merkle tree
A agregação por árvore de Merkle permite representar muitos compromissos por uma raiz verificável, reduzindo custo e evitando publicar cada segmento separadamente.
Assinatura digital
A assinatura vincula o manifesto a uma chave do dispositivo ou custodiante. Sem ela, o timestamp prova existência; com ela, há também autoria criptográfica.
UTXO e OP_RETURN
Em Bitcoin, transações consomem UTXOs e criam novas saídas. Uma saída OP_RETURN é um caso no-one-can-spend: registra dados arbitrários de forma comprovadamente não gastável.
OpenTimestamps
O protocolo agrega compromissos criptográficos e ancora uma raiz em Bitcoin, produzindo uma prova verificável de anterioridade temporal.

Arquitetura

Fluxo do pacote verificável

O manifesto funciona como o centro do pacote. Ele referencia os segmentos, declara a câmera/dispositivo, guarda os hashes e recebe a assinatura. A prova .ots é preservada junto ao pacote para verificação posterior.

Prova Bitcoin

Como o manifesto é vinculado a uma transação confirmada

O hash do manifesto não precisa aparecer diretamente como uma transação exclusiva. No OpenTimestamps, esse hash entra em uma prova composta por operações criptográficas como concatenação e SHA-256, até chegar a um compromisso agregado ancorado em Bitcoin.

Caminho lógico da prova

manifesto assinado
  -> SHA-256 do manifesto
  -> prova .ots
  -> operações append/prepend + SHA-256
  -> compromisso agregado
  -> transação Bitcoin
  -> bloco confirmado

Verificação independente

O verificador recalcula o hash do manifesto, valida a assinatura e usa a prova .ots para reconstruir o caminho até a atestação Bitcoin. A evidência não depende de confiar no servidor que armazenou o vídeo.

Implementação

MVP em Python com empacotamento, assinatura e verificação

O MVP usa um arquivo local como entrada e simula o dispositivo de borda no próprio ambiente de execução. O foco da implementação é reproduzir o fluxo essencial de custódia: segmentar o vídeo, calcular hashes, gerar um manifesto assinado, produzir a prova OpenTimestamps e permitir verificação posterior por terceiro independente. O código-fonte do MVP está disponível no repositório cftv-vilarins.

Arquivos principais

  • src/segmenter/segment_video.py
  • src/packager/create_package.py
  • src/gateway/validate_package.py
  • src/anchor/stamp_manifest.py
  • src/verifier/verify_package.py

Execução local

python3 src/segmenter/segment_video.py
python3 src/packager/create_package.py
python3 src/gateway/validate_package.py
python3 src/anchor/stamp_manifest.py
python3 src/verifier/verify_package.py

Experimentos

Resultado esperado: pacote íntegro passa, adulterações falham

ÍNTEGRO

Pacote original

O pacote camera-001-20260615T210000Z foi validado com checksums, sequência temporal, assinatura e prova OpenTimestamps presentes.

INVÁLIDO

Segmento alterado

O verificador detectou divergência de checksum e hash no segmento adulterado.

INVÁLIDO

Segmento removido

O verificador detectou arquivo ausente, lacuna temporal e quebra de encadeamento.

INVÁLIDO

Manifesto alterado

A modificação invalidou checksum e assinatura digital.

INVÁLIDO

Segmentos reordenados

O verificador detectou sequência inesperada, lacunas e assinatura inválida.

Discussão

O que a prova resolve e o que ela não resolve

O timestamp prova que um determinado compromisso criptográfico existia antes de certo momento. A assinatura digital ajuda a atribuir o manifesto a uma chave. Os hashes detectam alterações no conteúdo. Em conjunto, esses mecanismos fortalecem a cadeia de custódia.

Ainda assim, o modelo não prova sozinho que a câmera estava apontada para o local correto, que o relógio local estava certo ou que a chave privada nunca foi comprometida. Esses pontos dependem de governança operacional, proteção da chave e controles físicos do dispositivo.

Conclusão

Uma camada de confiança mínima para evidências de vídeo

A proposta mostra que é possível construir uma cadeia de custódia leve para vídeos CFTV usando ferramentas abertas e verificáveis. O vídeo permanece privado e off-chain; o Bitcoin entra apenas como infraestrutura pública de timestamp para o manifesto assinado.

Para a disciplina, o resultado principal é demonstrar uma arquitetura coerente e um MVP que identifica adulterações práticas: alteração de bytes, remoção de segmentos, modificação do manifesto e reordenação temporal.

Referências

Materiais base