◇ 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 Um argumento, não cinco artigos"]
  N1["7.2 O que entra no arquivo"]
  N2["7.3 Detectar edições silenciosas"]
  N3["Laboratório — Manifesto de hashes"]
  N4["7.4 Ler o manifesto"]
  N5["7.5 Decisões de divulgação"]
  N6["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
  N6 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX039"]

Desenho lógico

flowchart LR
  N0["7.1 Um argumento, não cinco artigos"]
  N1["7.2 O que entra no arquivo"]
  N2["7.3 Detectar edições silenciosas"]
  N3["Laboratório — Manifesto de hashes"]
  N4["7.4 Ler o manifesto"]
  N5["7.5 Decisões de divulgação"]
  N6["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX039"]
[7.1 Um argumento, não cinco artigos]
    |
    v
[7.2 O que entra no arquivo]
    |
    v
[7.3 Detectar edições silenciosas]
    |
    v
[Laboratório — Manifesto de hashes]
    |
    v
[7.4 Ler o manifesto]
    |
    v
[7.5 Decisões de divulgação]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX039]

Objetivos de aprendizagem

Você vai (1) sintetizar os capítulos numa única tese argumentada; (2) construir um arquivo de reprodutibilidade com hashes que detecte edições silenciosas; (3) decidir o que pode e o que não pode ser divulgado num estudo de segurança.

7.1 Um argumento, não cinco artigos

A tese de Nadia precisa ser lida como um único argumento. A introdução enuncia a afirmação: numa organização de pagamentos, um checklist de uso indevido de criptografia com lint reduziu o uso indevido confirmado a cada dez mudanças que tocam criptografia ao longo de um trimestre, com um custo de tempo modesto e com o efeito concentrado em key-handling. Cada capítulo responde então a uma pergunta de que a afirmação depende: se o uso indevido pode ser codificado com confiabilidade, por que ele importa segundo os limites das próprias normas, se a linha de base justificava a intervenção, se o experimento apoia o efeito e se ele sobrevive à crítica. O material que não responde a nenhuma dessas perguntas vai para um apêndice.

7.2 O que entra no arquivo

O arquivo permite que um examinador rode de novo cada número sem contatar Nadia. Ele contém o livro de códigos com histórico de versões, o registro e o adendo, as contagens pseudonimizadas por equipe, os scripts de randomização e de análise com as sementes, os programas de laboratório deste livro, a carta de resposta e um README que explica como rodar tudo apenas com uma instalação padrão do Python. Ele exclui os diffs, os nomes de repositórios e qualquer coisa que possa identificar um sistema da Meridian, como exige o acordo de dados. O README declara abertamente essa exclusão, para que os leitores saibam quais afirmações se apoiam em dados que eles não podem ver.

7.3 Detectar edições silenciosas

Um arquivo só é útil se os leitores conseguirem saber se ele mudou desde que a tese foi examinada. Nadia registra um digest SHA-256, definido no FIPS 180-4, de cada arquivo e um único digest raiz calculado sobre os digests dos arquivos ordenados, e imprime a raiz na própria tese. O laboratório constrói um manifesto desses para três arquivos de brinquedo e mostra que mudar uma palavra no arquivo de achados muda a raiz por completo. Um manifesto de hashes prova a integridade contra edições acidentais ou não anunciadas; ele não prova quem produziu o arquivo, o que exigiria uma assinatura digital como o Ed25519 da RFC 8032.

Laboratório — Manifesto de hashes

"""SHA-256 manifest for a synthetic reproducibility archive (hashlib only)."""
import hashlib
FILES = {"codebook.md": b"nonce-iv | key-handling | primitive-choice | other\n",
         "findings.csv": b"id,team,arm,category\nF001,T03,check,nonce-iv\n",
         "analysis.py": b"# permutation test, seed 2026\n"}

def main():
    for name, data in sorted(FILES.items()):
        print(f"{hashlib.sha256(data).hexdigest()[:16]}...  {name}")
    whole = hashlib.sha256(b"".join(hashlib.sha256(FILES[k]).digest() for k in sorted(FILES))).hexdigest()
    print(f"manifest root {whole[:16]}...")
    tampered = dict(FILES, **{"findings.csv": FILES["findings.csv"].replace(b"check", b"usual")})
    root2 = hashlib.sha256(b"".join(hashlib.sha256(tampered[k]).digest() for k in sorted(tampered))).hexdigest()
    print(f"after one-word edit root {root2[:16]}... match={root2 == whole}")

if __name__ == "__main__":
    main()

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

74b6ee0a6c357d2b...  analysis.py
dd8ff4efed0b0971...  codebook.md
8fb59a60f3904a37...  findings.csv
manifest root 4ed0159418d1b231...
after one-word edit root 1fcc81b868bef821... match=False

7.4 Ler o manifesto

Cada digest de arquivo aparece truncado em dezesseis caracteres hexadecimais para facilitar a leitura, enquanto o arquivo guarda todos os sessenta e quatro. A raiz sobre os digests ordenados é 4ed0159418d1b231, e, depois de uma edição de uma palavra que troca o braço de um achado, a raiz passa a ser 1fcc81b868bef821 e a verificação de correspondência imprime False. Como o SHA-256 é projetado para ser resistente a colisões, um leitor que recalcula a raiz e encontra o valor publicado pode confiar que os arquivos são os examinados. Nadia alerta que a ordenação precisa ser documentada; outra ordem de arquivos produziria uma raiz diferente para um conteúdo idêntico.

7.5 Decisões de divulgação

Algum material não pode ser divulgado nem com pseudônimos. Nadia aplica um teste de divulgação a cada item: ele poderia ajudar alguém a encontrar ou explorar uma fraqueza num sistema da Meridian que talvez ainda exista? As contagens por equipe e o livro de códigos passam. Os achados de exemplo só passam como paráfrases inventadas. As regras de lint passam, porque detectam padrões já descritos em orientações públicas. As anotações dos auditores não passam, porque mencionam nomes de serviços internos. O líder de segurança da Meridian assina a lista final de divulgação, e o README do arquivo aponta para ela, para que os leitores entendam por que algumas evidências são descritas em vez de mostradas.

Exemplo resolvido

Nadia escreve a afirmação da tese em um parágrafo, monta o arquivo com um manifesto cuja raiz é impressa na tese e registra uma lista de divulgação assinada que explica cada exclusão.

Caso sintético. Os três arquivos do arquivo e seus digests são dados didáticos inventados; o SHA-256 em si é real (FIPS 180-4).

Erros e limites

Um digest detecta mudanças, mas não consegue dizer se o conteúdo original era honesto. Nunca publique identificadores reais de chaves, nem mesmo com hash, porque identificadores de baixa entropia podem ser adivinhados e comparados.

Exercícios

Síntese

Uma tese é uma única afirmação defendida capítulo por capítulo; um arquivo com hashes, documentado e cuidadosamente expurgado permite que outros a verifiquem sem expor o parceiro.

Continue estudando — aula 07 (capítulo 07 de 08)

← Capítulo 06 · Índice das aulas · Capítulo 08 →

Continue para a próxima aula já escrita.