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
-
EX001 — Pergunta de pesquisa. Enuncie numa frase a pergunta de pesquisa de Nadia.
Mostrar critérios de avaliação
Rubrica: 3 = se checklist mais lint reduz o uso indevido confirmado a cada dez mudanças integradas em relação à revisão habitual;; 2 = checklist versus habitual sem a medida;; 1 = "criptografia melhor" vago;; 0 = nenhuma. -
EX002 — Definir o uso indevido. Como o livro define o uso indevido de criptografia, e por que a regra do nonce do GCM é um exemplo?
Mostrar critérios de avaliação
Rubrica: 3 = primitiva correta usada de modo que sua garantia falha; reutilizar o nonce sob uma chave anula a segurança do GCM segundo o SP 800-38D;; 2 = só a definição;; 1 = "algoritmo fraco";; 0 = nenhuma. -
EX003 — Números da concordância. Informe a concordância observada, a concordância ao acaso e o kappa do laboratório.
Mostrar critérios de avaliação
Rubrica: 3 = 0,854, 0,263, 0,802;; 2 = só o kappa;; 1 = errado mas plausível;; 0 = nenhuma. -
EX004 — Padrão de deriva. Que categoria absorveu a maioria das discordâncias, e que regra Nadia acrescentou?
Mostrar critérios de avaliação
Rubrica: 3 = primitive-choice (5 de 7); derivação de chave é key-handling, a menos que o algoritmo esteja obsoleto;; 2 = só a categoria;; 1 = só a regra;; 0 = nenhuma. -
EX005 — Condição de compartilhamento. Sob que condição a Meridian pode compartilhar um achado com Nadia?
Mostrar critérios de avaliação
Rubrica: 3 = só depois que a correção for implantada ou o código desativado, com pseudônimos;; 2 = após a correção;; 1 = a qualquer momento;; 0 = nenhuma. -
EX006 — Dever de escalonamento. O que Nadia deve fazer se vir um uso indevido de alta severidade não corrigido?
Mostrar critérios de avaliação
Rubrica: 3 = avisar o líder de segurança da Meridian em até um dia útil, qualquer que seja o braço;; 2 = relatar;; 1 = anotar nos dados;; 0 = nenhuma. -
EX007 — Ameaça à validade interna. Cite a ameaça à validade interna e o remédio planejado.
Mostrar critérios de avaliação
Rubrica: 3 = a habilidade das equipes confunde o efeito; randomizar as equipes;; 2 = só a ameaça;; 1 = viés genérico;; 0 = nenhuma.
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.