◇ OpenCyber Academy
Pesquisa doutoral · Capítulo 7 · Português

Capítulo 7 — Síntese da tese e arquivo de reprodutibilidade

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 7 — Síntese da tese e arquivo de reprodutibilidade

Mapa da aula

Aula 07 publicada. Mapa, exemplo, EX039.

flowchart TD
  N0["7.1 Estrutura da tese"]
  N1["7.2 O arquivo de reprodutibilidade"]
  N2["Laboratório — verificação do manifesto"]
  N3["7.3 Lendo o resultado"]
  N4["7.4 Por que manifestos de hash"]
  N5["7.5 Imagens ou gerador"]
  N6["7.6 Licenças"]
  N7["7.7 Teste de reprodução"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX039"]

Desenho lógico

flowchart LR
  N0["7.1 Estrutura da tese"]
  N1["7.2 O arquivo de reprodutibilidade"]
  N2["Laboratório — verificação do manifesto"]
  N3["7.3 Lendo o resultado"]
  N4["7.4 Por que manifestos de hash"]
  N5["7.5 Imagens ou gerador"]
  N6["7.6 Licenças"]
  N7["7.7 Teste de reprodução"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX039"]
[7.1 Estrutura da tese]
    |
    v
[7.2 O arquivo de reprodutibilidade]
    |
    v
[Laboratório — verificação do manifesto]
    |
    v
[7.3 Lendo o resultado]
    |
    v
[7.4 Por que manifestos de hash]
    |
    v
[7.5 Imagens ou gerador]
    |
    v
[7.6 Licenças]
    |
    v
[7.7 Teste de reprodução]
    |
    v
[Exemplo resolvido] --> [Exercício EX039]

Objetivos de aprendizagem

Você vai (1) estruturar uma tese de doutorado em perícia digital; (2) construir um arquivo de reprodutibilidade; (3) verificar a integridade do arquivo com hashes; (4) documentar o que outras pessoas precisam para refazer o trabalho.

7.1 Estrutura da tese

Introdução; fundamentação (sistemas de arquivos segundo Carrier, carving, normas de validação); projeto do gerador; piloto; estudo principal; validação por um segundo laboratório; discussão; limitações; conclusão; apêndices com manifestos e registros. A ordem espelha o raciocínio do estudo: o gerador precisa ser descrito antes que o piloto possa ser julgado, e o piloto antes do estudo principal. O capítulo de limitações lista a natureza sintética das imagens, a família única de arquivos e o método único executado no estudo principal. Os apêndices permitem que um examinador confira qualquer valor contra os registros brutos sem contatar Ines.

7.2 O arquivo de reprodutibilidade

Dados (as imagens ou o gerador mais as sementes), código (gerador, carvers, pontuador), ambiente (versões fixadas), resultados e um README que descreve como reproduzir cada tabela. Cada arquivo de resultado tem uma entrada SHA-256 num manifesto no topo do arquivo de reprodutibilidade. O README lista os comandos em ordem e a saída esperada de cada um, para que o leitor perceba imediatamente se sua execução reproduziu a tabela ou divergiu. Ines também informa o tamanho do próprio arquivo de reprodutibilidade e o tempo que uma execução completa leva num notebook comum.

Laboratório — verificação do manifesto

"""Lab (ch 07): SHA-256 manifest for a reproducibility archive, then verify a copy with one altered file."""
import hashlib
orig = {"data/img-contig.bin": b"synthetic-image-1", "data/img-frag10.bin": b"synthetic-image-2",
        "code/carve.py": b"print('carve')", "results/recall.csv": b"img,recall\ncontig,0.96\n"}
manifest = {p: hashlib.sha256(b).hexdigest() for p, b in orig.items()}
copy = dict(orig); copy["results/recall.csv"] = b"img,recall\ncontig,0.98\n"
for p in sorted(manifest):
    ok = hashlib.sha256(copy[p]).hexdigest() == manifest[p]
    print(p, "OK" if ok else "MISMATCH")
print("archive verified" if all(hashlib.sha256(copy[p]).hexdigest() == h for p, h in manifest.items()) else "archive FAILED verification")

Execute com python3 lab_manifest.py. Saída verificada:

code/carve.py OK
data/img-contig.bin OK
data/img-frag10.bin OK
results/recall.csv MISMATCH
archive FAILED verification

7.3 Lendo o resultado

Três dos quatro arquivos da cópia do arquivo de reprodutibilidade correspondem às suas entradas no manifesto SHA-256. results/recall.csv não corresponde: seu valor de revocação mudou de 0,96 para 0,98. A verificação falha, exatamente como deve falhar quando qualquer resultado é alterado após a publicação. O laboratório demonstra, portanto, a conferência de propósito: um único dígito alterado basta para quebrar o manifesto. Ines executa a mesma verificação em seu arquivo de reprodutibilidade real antes da submissão, e a tese declara que todas as entradas conferiam naquela data. Como a falha nomeia results/recall.csv, Ines sabe qual tabela regenerar.

7.4 Por que manifestos de hash

O mesmo princípio protege as evidências: a ISO/IEC 27037 enfatiza preservar a integridade desde a aquisição, o que costuma ser demonstrado registrando valores de hash. Aplicá-lo a arquivos de pesquisa permite que os examinadores confiem que os resultados publicados são os que a tese relata. O próprio manifesto faz parte do apêndice da tese, de modo que alterar ao mesmo tempo um resultado e seu hash exigiria mudar também a tese depositada. Ines também registra a data em que o manifesto foi produzido e a tag do código que produziu os resultados que ele lista.

7.5 Imagens ou gerador

Publicar o gerador e as sementes ocupa menos espaço do que publicar as imagens e permite que outros as regenerem exatamente; Ines também publica uma imagem de amostra para conferências rápidas. A imagem de amostra permite que o leitor confira o carver rapidamente sem executar o gerador, e seu hash está no manifesto. Se alguma vez uma imagem regenerada diferir da amostra publicada, a diferença mostra que alguma parte do ambiente mudou, como aconteceu com a versão do Python durante a nova execução do segundo laboratório. Um leitor que regenere todos os 150 arquivos-alvo precisa apenas da lista de sementes e do gerador.

7.6 Licenças

Código sob licença aberta; texto sob os termos da universidade; nenhum dado de terceiros com termos restritivos. Ines conferiu a licença de cada dependência antes da liberação. Como seus laboratórios usam apenas a biblioteca padrão do Python, nenhuma licença de pacote externo se aplica ao código. O README declara a licença de cada parte do arquivo de reprodutibilidade, para que um laboratório possa reutilizar o gerador em seu próprio trabalho de validação sem pedir permissão, e a tese cita o texto da licença com um link. O escritório do repositório da universidade confirmou que depositar o arquivo de reprodutibilidade não conflita com seus termos.

7.7 Teste de reprodução

Antes da submissão, um colega segue o README numa máquina limpa e regenera todas as tabelas. O colega nunca viu o código e é orientado a não contatar Ines a menos que fique bloqueado. Cada ponto em que precisou adivinhar é tratado como uma falha do README e corrigido, e o teste é repetido até passar sem nenhuma pergunta. O relatório dele, com a data e a tag do arquivo de reprodutibilidade testado, é arquivado com a tese. O erro de caminho do notebook encontrado durante esse teste é citado como exemplo de por que a etapa vale o tempo que custa.

Registros e cadernos

Os registros de análise anotam cada execução com data, semente, versão do código e hash da saída. Os examinadores podem rastrear qualquer valor da tese até a execução exata que o produziu.

Exemplo resolvido

O teste de reprodução falha numa tabela porque um script lia um caminho de arquivo específico do notebook de Ines. Ela o substitui por um caminho relativo, executa de novo, atualiza o manifesto e registra a correção.

Caso sintético. O arquivo de reprodutibilidade é inventado.

Erros e limites

Um hash prova integridade, não correção; um resultado errado pode ser preservado fielmente.

Exercícios

Síntese

Estruture a tese com clareza, arquive tudo o que é necessário para refazê-la, verifique com hashes e teste a reprodução numa máquina limpa.

Continue estudando — capítulo 07 de 08

← Capítulo 06 (rascunho) · Índice de capítulos do curso · Capítulo 08 (rascunho) →