OpenCyber Academy
Pesquisa doutoral · Capítulo 1 · Português
Código do curso: OCA-192Capítulo 01: OCA-192-C001

Capítulo 1 — Integridade e métodos avançados de pesquisa

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

Mapa da aula

Aula 01 publicada. Mapa, exemplo, EX001.

flowchart TD
  N0["1.1 O caso"]
  N1["1.2 O que conta como uso indevido"]
  N2["Laboratório — Concordância entre codificadores"]
  N3["1.3 Ler a concordância"]
  N4["1.4 Integridade e divulgação"]
  N5["1.5 Validade desde o início"]
  N6["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
  N6 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX001"]

Desenho lógico

flowchart LR
  N0["1.1 O caso"]
  N1["1.2 O que conta como uso indevido"]
  N2["Laboratório — Concordância entre codificadores"]
  N3["1.3 Ler a concordância"]
  N4["1.4 Integridade e divulgação"]
  N5["1.5 Validade desde o início"]
  N6["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX001"]
[1.1 O caso]
    |
    v
[1.2 O que conta como uso indevido]
    |
    v
[Laboratório — Concordância entre codificadores]
    |
    v
[1.3 Ler a concordância]
    |
    v
[1.4 Integridade e divulgação]
    |
    v
[1.5 Validade desde o início]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX001]

Objetivos de aprendizagem

Você vai (1) enquadrar uma questão de doutorado sobre o uso indevido de criptografia na revisão de código; (2) construir e testar um esquema de codificação confiável para os achados de uso indevido; (3) definir regras de integridade e de divulgação para lidar com fraquezas em sistemas de pagamento em produção.

1.1 O caso

Nadia Haddad é doutoranda na fictícia Larkspur University, sob orientação do Prof. Oskar Brandt. Sua parceira, a fictícia Meridian Payments Cooperative, tem 24 equipes de engenharia que chamam bibliotecas criptográficas avaliadas para a tokenização de cartões, a assinatura de webhooks e a cifração de dados em repouso. Todas as equipes, mudanças e números deste livro são sintéticos. A pergunta de Nadia é se acrescentar um checklist de uso indevido de criptografia e uma etapa automatizada de lint à revisão de código reduz o número de achados confirmados de uso indevido a cada dez mudanças integradas, em comparação com a revisão habitual da Meridian. A unidade de interesse é o uso indevido de bibliotecas corretas, e não algoritmos quebrados, o que corresponde ao que os profissionais mais erram.

1.2 O que conta como uso indevido

Uso indevido significa uma primitiva correta usada de um modo que anula sua garantia de segurança. Katz e Lindell mostram que a cifração autenticada só é segura sob condições declaradas, e o SP 800-38D torna uma delas explícita: um nonce do GCM nunca pode se repetir sob a mesma chave. O livro de códigos de Nadia tem quatro categorias. Nonce-iv cobre nonces e vetores de inicialização repetidos, previsíveis ou truncados. Key-handling cobre chaves embutidas no código, registradas em log, compartilhadas em excesso ou nunca rotacionadas. Primitive-choice cobre algoritmos obsoletos ou inadequados, como hashes rápidos sem salt para senhas. Other captura os problemas residuais. Cada categoria traz uma definição, dois exemplos, dois quase acertos e uma regra de sobreposição.

Laboratório — Concordância entre codificadores

"""Cohen's kappa for two coders labelling synthetic cryptographic-misuse findings (read-only)."""
from collections import Counter
CATS = ["nonce-iv", "key-handling", "primitive-choice", "other"]
# 48 synthetic findings: (coder A label, coder B label)
PAIRS = ([("nonce-iv", "nonce-iv")] * 12 + [("key-handling", "key-handling")] * 13 +
         [("primitive-choice", "primitive-choice")] * 10 + [("other", "other")] * 6 +
         [("key-handling", "primitive-choice")] * 3 + [("nonce-iv", "primitive-choice")] * 2 +
         [("other", "key-handling")] * 2)

def kappa(pairs):
    n = len(pairs)
    po = sum(a == b for a, b in pairs) / n
    ca, cb = Counter(a for a, _ in pairs), Counter(b for _, b in pairs)
    pe = sum(ca[c] * cb[c] for c in CATS) / n ** 2
    return po, pe, (po - pe) / (1 - pe)

def main():
    po, pe, k = kappa(PAIRS)
    print(f"items {len(PAIRS)}, agreed {sum(a == b for a, b in PAIRS)}")
    print(f"observed {po:.3f}, chance {pe:.3f}, kappa {k:.3f}")
    for (a, b), n in sorted(Counter(p for p in PAIRS if p[0] != p[1]).items()):
        print(f"disagree {a} -> {b}: {n}")

if __name__ == "__main__":
    main()

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

items 48, agreed 41
observed 0.854, chance 0.263, kappa 0.802
disagree key-handling -> primitive-choice: 3
disagree nonce-iv -> primitive-choice: 2
disagree other -> key-handling: 2

1.3 Ler a concordância

Dois codificadores treinados rotulam de forma independente 48 achados sintéticos e concordam em 41, uma concordância observada de 0,854. A concordância ao acaso, calculada a partir das frequências de categoria de cada codificador, é 0,263, então o kappa de Cohen é 0,802; Landis e Koch chamariam isso de substancial a quase perfeito, mas Nadia trata esses rótulos como orientação aproximada. As discordâncias são informativas. Cinco das sete levam um achado para primitive-choice, três vindas de key-handling e duas de nonce-iv. O codificador B lê "uma chave derivada com um hash rápido" como uma escolha de algoritmo, enquanto o codificador A a lê como manuseio de chave. Nadia acrescenta uma regra de sobreposição: a derivação de uma chave é key-handling, a menos que o próprio algoritmo esteja obsoleto (deprecated).

1.4 Integridade e divulgação

Os achados sobre código de pagamento em produção são perigosos, porque a descrição de uma fraqueza não corrigida poderia ajudar um atacante a forjar webhooks ou a decifrar tokens armazenados. O acordo de dados de Nadia diz que a Meridian só compartilha um achado depois que a correção foi implantada ou o código foi desativado, que os nomes de repositórios e os identificadores de chaves são substituídos por pseudônimos e que nenhum material de chave, amostra de texto cifrado ou procedimento de exploração jamais sai da Meridian. Os achados ficam num servidor cifrado da universidade, com os acessos registrados. O comitê de ética também exige uma regra de escalonamento: qualquer uso indevido de alta severidade não corrigido que Nadia perceber durante o estudo vai para o líder de segurança da Meridian em até um dia útil, qualquer que seja o braço do estudo.

1.5 Validade desde o início

Nadia separa três questões de validade antes de coletar dados reais. A validade de construto pergunta se "uso indevido confirmado a cada dez mudanças integradas" captura o que os criptógrafos entendem por segurança enfraquecida; ela confere o livro de códigos com dois engenheiros de segurança da Meridian e contra os modos de falha listados no SP 800-57 Part 1 para o gerenciamento de chaves. A validade interna pergunta se qualquer diferença vem do checklist, e não da habilidade das equipes, o que motiva a atribuição aleatória das equipes mais adiante. A validade externa pergunta se os resultados de uma empresa de pagamentos com bibliotecas maduras se transferem para pequenas startups, o que ela vai argumentar com cautela, em vez de pressupor.

Exemplo resolvido

Nadia escreve a pergunta, o livro de códigos com quatro categorias e o acordo de divulgação e depois executa o exercício de concordância com 48 itens. Um kappa de 0,802 e uma deriva clara para primitive-choice levam a uma nova regra de sobreposição antes da codificação real.

Caso sintético. A Larkspur, a Meridian e todos os achados são inventados; o SP 800-38D, o SP 800-57 e Landis e Koch são reais.

Erros e limites

O kappa resume a concordância, mas esconde onde está a discordância; sempre tabule as células fora da diagonal. Uma concordância alta também não prova que as categorias são as certas, apenas que duas pessoas as aplicam da mesma forma.

Exercícios

Síntese

Um estudo defensável sobre uso indevido de criptografia começa com um livro de códigos preciso, concordância medida entre os codificadores, regras explícitas de sobreposição e um tratamento rigoroso, aprovado pela ética, das fraquezas em sistemas em produção.

Respostas comentadas

EX001. Acrescentar um checklist de uso indevido de criptografia e lint automatizado à revisão reduz os achados confirmados de uso indevido a cada dez mudanças integradas, em comparação com a revisão habitual da Meridian?

EX002. Uso indevido é uma primitiva correta usada de modo que sua garantia deixa de valer; reutilizar um nonce do GCM sob uma mesma chave quebra a confidencialidade e a autenticidade que o SP 800-38D promete.

EX003. Observada 0,854 (41 de 48), ao acaso 0,263, kappa 0,802.

EX004. Primitive-choice recebeu cinco das sete discordâncias; a nova regra codifica a derivação de chave como key-handling, a menos que o próprio algoritmo esteja obsoleto.

EX005. Só depois que a correção for implantada ou o código desativado, e com os nomes de repositórios e os identificadores de chaves pseudonimizados.

EX006. Escalá-lo ao líder de segurança da Meridian em até um dia útil, independentemente do braço do estudo em que a equipe está.

EX007. Diferenças de habilidade entre as equipes poderiam explicar os resultados; a atribuição aleatória das equipes aos braços controla isso.