◇ OpenCyber Academy
Tecnólogo · Capítulo 10 · Português

Capítulo 10 — Segurança quântica e pós-quântica: orientação

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 10 — Segurança quântica e pós-quântica: orientação

Mapa da aula

Aula 10 publicada. Mapa, exemplo, EX019.

flowchart TD
  N0["10.1 Normas"]
  N1["10.2 A ideia por baixo do ML-KEM"]
  N2["10.3 Interface e parâmetros"]
  N3["10.4 Regras para implementadores"]
  N4["10.5 Caso resolvido"]
  N5["10.7 Assinaturas em um parágrafo"]
  N6["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
  N6 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX019"]

Desenho lógico

flowchart LR
  N0["10.1 Normas"]
  N1["10.2 A ideia por baixo do ML-KEM"]
  N2["10.3 Interface e parâmetros"]
  N3["10.4 Regras para implementadores"]
  N4["10.5 Caso resolvido"]
  N5["10.7 Assinaturas em um parágrafo"]
  N6["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX019"]
[10.1 Normas]
    |
    v
[10.2 A ideia por baixo do ML-KEM]
    |
    v
[10.3 Interface e parâmetros]
    |
    v
[10.4 Regras para implementadores]
    |
    v
[10.5 Caso resolvido]
    |
    v
[10.7 Assinaturas em um parágrafo]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX019]

Objetivos de aprendizagem

Você vai (1) resumir as normas pós-quânticas do NIST e a sua situação; (2) explicar o LWE com um laboratório de brinquedo; (3) descrever a interface e os conjuntos de parâmetros do ML-KEM; e (4) dizer o que os implementadores devem e não devem fazer com a PQC.

10.1 Normas

O NIST publicou a FIPS 203 (ML-KEM), a FIPS 204 (ML-DSA) e a FIPS 205 (SLH-DSA) em agosto de 2024; a SP 800-208 trata do LMS e do XMSS; a SP 800-227 dá recomendações sobre KEMs. O rascunho IR 8547 do NIST propõe tornar obsoletos os algoritmos vulneráveis ao quântico após 2030 e proibi-los após 2035. O FN-DSA e um KEM baseado no HQC estavam em desenvolvimento.

Para os implementadores da KLS, a leitura prática é: ML-KEM para o estabelecimento de chaves desde já, ML-DSA para as assinaturas conforme as ferramentas permitirem, assinaturas baseadas em hash para o firmware, e as datas do rascunho IR 8547 como premissas de planejamento até a versão final.

10.2 A ideia por baixo do ML-KEM

O Learning With Errors (Regev, 2009) esconde um segredo em equações lineares com ruído.

# Lab W (ch 10): a TOY Regev-style LWE encryption of one bit. Deliberately insecure parameters.
import random
rng = random.Random(5)
n, q, m = 16, 3329, 64
def small(): return rng.choice([-2, -1, 0, 1, 2])
s = [rng.randrange(q) for _ in range(n)]
A = [[rng.randrange(q) for _ in range(n)] for _ in range(m)]
b = [(sum(A[i][j] * s[j] for j in range(n)) + small()) % q for i in range(m)]   # b = A s + e
def enc(bit):
    r = [rng.randrange(2) for _ in range(m)]                                        # random subset
    u = [sum(r[i] * A[i][j] for i in range(m)) % q for j in range(n)]
    v = (sum(r[i] * b[i] for i in range(m)) + bit * (q // 2)) % q
    return u, v
def dec(u, v):
    d = (v - sum(u[j] * s[j] for j in range(n))) % q                                 # = bit*q/2 + small noise
    return 1 if q // 4 < d < 3 * q // 4 else 0
ok = sum(dec(*enc(bit)) == bit for bit in [rng.randrange(2) for _ in range(2000)])
print(f"toy LWE: {ok}/2000 bits decrypted correctly (noise stays below q/4)")

Saída esperada:

toy LWE: 2000/2000 bits decrypted correctly (noise stays below q/4)

O brinquedo usa 16 dimensões e é trivialmente quebrável; o ML-KEM usa reticulados de módulo estruturados, com polinômios de 256 coeficientes, e uma transformação que protege contra ataques de texto cifrado escolhido.

O desenho do laboratório torna visível a regra de decifragem. O valor v do texto cifrado transporta o bit como 0 ou q/2, cerca de 1.664, mais o ruído acumulado da soma de até 64 pequenos erros escolhidos em {−2,…,2}. A decifragem subtrai u·s e pergunta se o resto está mais perto de 0 ou de q/2. Como o ruído fica muito abaixo de q/4, todos os 2.000 bits são decifrados corretamente. Faixas de erro maiores ou mais linhas somadas empurrariam o ruído para além desse limite e a decifragem começaria a falhar, o mesmo compromisso que os parâmetros do ML-KEM são escolhidos para administrar.

10.3 Interface e parâmetros

O ML-KEM é um KEM: KeyGen → (chave de encapsulamento, chave de desencapsulamento); Encaps(ek) → (texto cifrado, segredo compartilhado de 32 bytes); Decaps(dk, ct) → segredo compartilhado. O ML-KEM-512/768/1024 visa as categorias 1/3/5 do NIST, com chaves de encapsulamento de 800/1.184/1.568 bytes e textos cifrados de 768/1.088/1.568 bytes. O X25519MLKEM768 no TLS usa o ML-KEM-768.

Para os implementadores, a interface importa mais do que a matemática. O cliente gera um par de chaves e envia a chave de encapsulamento; o servidor encapsula e devolve o texto cifrado; os dois obtêm o mesmo segredo de 32 bytes. Não há etapa de cifragem de mensagens, então o ML-KEM é sempre combinado com uma cifra simétrica.

10.4 Regras para implementadores

Use bibliotecas verificadas e provedores da plataforma; nunca escreva a sua própria. Mantenha as bibliotecas atualizadas (o KyberSlash mostrou vazamentos de tempo em algumas implementações; Bernstein et al., 2024). Prefira híbridos durante a transição. Verifique os comprimentos e trate os erros sem vazar detalhes. Registre o algoritmo e as versões das bibliotecas no inventário.

Na KLS, essas regras viram perguntas de revisão em todo pull request que mexe com criptografia: qual biblioteca e versão, se ela está na lista aprovada, se o conjunto de parâmetros é explícito e o que acontece com entradas malformadas. Um pull request que responde "nós mesmos escrevemos" é fechado sem mais revisão.

10.5 Caso resolvido

Um desenvolvedor da KLS propõe um ML-KEM caseiro em Python "para os leitores". Resposta: rejeitado — a biblioteca padrão não tem o ML-KEM, o código de brinquedo é inseguro, e a imagem do fornecedor ou uma biblioteca verificada é o único caminho aceitável; enquanto isso, os fluxos de dados dos leitores são minimizados.

A etapa de minimização é concreta: os leitores enviam os manifestos num único lote diário, em vez de a cada leitura, o que reduz o volume de sessões que podem ser colhidas enquanto a imagem do fornecedor está pendente. A rejeição e o controle provisório são ambos registrados na linha do leitor no inventário, com o número do chamado do fornecedor.

10.6 Erros comuns e limites

Cada erro tem um sintoma reconhecível. Alguém que cola o código de 16 dimensões do Laboratório W num serviço, acreditando que é "criptografia de reticulados", entregou algo que se quebra em segundos. Alguém que chama o ML-KEM para "cifrar o manifesto" leu errado a interface: ele só produz um segredo compartilhado para uma cifra simétrica. E uma equipe que ignora avisos como o KyberSlash mantém um vazamento de tempo que uma atualização de biblioteca teria removido. A orientação aqui é propositalmente rasa; a autoridade são as próprias normas.

10.7 Assinaturas em um parágrafo

O ML-DSA (FIPS 204) é a assinatura de reticulados de uso geral, com assinaturas ML-DSA-44/65/87 de 2.420/3.309/4.627 bytes. O SLH-DSA (FIPS 205) depende apenas de funções de hash; as suas chaves públicas são minúsculas, mas as suas assinaturas vão de 7.856 a 49.856 bytes. O LMS e o XMSS (SP 800-208) são assinaturas compactas baseadas em hash que exigem que o signatário acompanhe o estado e nunca reutilize um índice. Os implementadores vão encontrar o ML-DSA primeiro nos certificados e na assinatura de código, e os esquemas baseados em hash na assinatura de firmware.

Para a KLS, isso significa ML-DSA para a AC interna e a assinatura de versões, e LMS para o firmware dos leitores somente se o HSM do fornecedor gerenciar o estado.

Exercícios

Síntese

As normas do NIST definem as substituições; o ML-KEM é um KEM sobre reticulados de módulo, com três conjuntos de parâmetros. Os implementadores configuram implementações verificadas, nunca constroem as suas próprias.

Continue estudando — capítulo 10 de 30

← Capítulo 09 · Índice de capítulos do curso · Capítulo 11 →

Siga para a próxima lição escrita.