Cloudflare Workers adiciona ML-KEM e ML-DSA pós-quânticos ao Web Crypto

O Cloudflare Workers passou a oferecer cinco variantes de algoritmos pós-quânticos no Web Crypto: ML-KEM-768 e ML-KEM-1024 para encapsulamento de chaves, além de ML-DSA-44, ML-DSA-65 e ML-DSA-87 para assinaturas digitais. O suporte é opcional e depende da flag de compatibilidade webcrypto_modern_algorithms.
Segundo o anúncio da Cloudflare, o objetivo é permitir que aplicações testem essas primitivas sem incluir uma implementação criptográfica própria em JavaScript ou WebAssembly. A mudança reduz o código embarcado pelas bibliotecas, mas ainda não representa uma migração pós-quântica completa.
O que entrou no Web Crypto
Além dos cinco algoritmos, o runtime ganhou as operações encapsulateBits(), decapsulateBits(), encapsulateKey() e decapsulateKey(). Também há importação e exportação de chaves no formato JWK.
ML-KEM é um mecanismo de encapsulamento de chaves. Uma parte encapsula material secreto usando a chave pública; a parte que possui a chave privada decapsula o resultado e obtém o mesmo segredo compartilhado.
const keys = await crypto.subtle.generateKey(
"ML-KEM-768",
true,
["encapsulateBits", "decapsulateBits"],
);
const { sharedKey, ciphertext } =
await crypto.subtle.encapsulateBits(
"ML-KEM-768",
keys.publicKey,
);
const sameSharedKey =
await crypto.subtle.decapsulateBits(
"ML-KEM-768",
keys.privateKey,
ciphertext,
);
Esse fluxo ainda não cifra uma mensagem. ML-KEM produz material de chave compartilhado. Protocolos como Hybrid Public Key Encryption, ou HPKE, combinam esse material com uma derivação de chaves e um algoritmo AEAD, como AES-GCM, para formar uma construção de criptografia completa.
ML-DSA cobre outro caso: gerar um par de chaves, assinar bytes e verificar a assinatura. O modelo de uso é próximo ao de Ed25519 e ECDSA.
const data = new TextEncoder().encode("hello post-quantum");
const { publicKey, privateKey } =
await crypto.subtle.generateKey(
"ML-DSA-44",
false,
["sign", "verify"],
);
const signature =
await crypto.subtle.sign("ML-DSA-44", privateKey, data);
const valid =
await crypto.subtle.verify(
"ML-DSA-44",
publicKey,
signature,
data,
);
O que muda para aplicações e bibliotecas
Sem primitivas nativas, desenvolvedores de Workers precisavam empacotar uma implementação criptográfica separada. Isso aumentava a aplicação e transferia para cada projeto ou biblioteca a responsabilidade de selecionar e manter esse código.
Com o suporte no runtime, bibliotecas podem delegar as operações ao Web Crypto. A Cloudflare cita a panva/jose para JWTs assinados com ML-DSA e a panva/hpke para construções baseadas em ML-KEM. A integração pode escolher a implementação conforme os algoritmos disponíveis no ambiente.
Também foi adicionado o helper getPublicKey(), que obtém uma chave pública a partir de uma chave privada carregada:
const publicKey = await crypto.subtle.getPublicKey(
privateKey,
["verify"],
);
Para ML-KEM, a permissão associada à chave pública é encapsulateBits, enquanto a chave privada fica responsável pela decapsulação. Isso evita manter as duas chaves separadamente ou escrever lógica específica para cada formato.
A transição depende dos protocolos
As novas APIs são componentes de baixo nível, não protocolos prontos. A adoção exige que bibliotecas, serviços e ambientes de execução concordem sobre algoritmos, formatos e construção criptográfica.
Parte desse trabalho já aparece em outros componentes do ecossistema. O OpenSSH adicionou suporte a mlkem768x25519 em 2024. O IETF mantém um rascunho de HPKE para KEMs pós-quânticos e híbridos, publicou a RFC 9964 para ML-DSA em JOSE e adotou um rascunho de JWE baseado em HPKE pós-quântico e híbrido.
O suporte nativo em Workers fornece as primitivas necessárias para essas integrações. Conforme explica a publicação técnica, porém, bibliotecas ainda podem precisar de adaptações específicas para o runtime.
Limitações e onde faz sentido
A especificação Modern Algorithms in the Web Cryptography API ainda está em evolução. Por isso, o recurso permanece atrás da flag webcrypto_modern_algorithms e precisa ser habilitado explicitamente.
ML-KEM isoladamente não entrega criptografia de mensagens, e os exemplos de ML-KEM e ML-DSA não constituem protocolos completos. A própria Cloudflare apresenta as APIs como blocos para validar integrações, não como um caminho integral de migração.
O suporte faz sentido para equipes que precisam experimentar algoritmos pós-quânticos, adaptar bibliotecas ou testar protocolos sobre o Web Crypto sem carregar outra implementação criptográfica. Não é suficiente, por si só, para declarar uma aplicação migrada: interoperabilidade, construção do protocolo e integração específica de cada biblioteca continuam sendo responsabilidades separadas.
Leia também
- Desenvolvimento
Rust 1.99 estabiliza funções variádicas C e APIs de layout para ponteiros brutos
3 min de leitura - Desenvolvimento
Cloudflare lança Workers KV Instant com p99 abaixo de 2 ms e replicação em 250 ms
3 min de leitura - Desenvolvimento
Perplexity troca DynamoDB por CobbleDB em Rust e reduz latência em 5x
4 min de leitura
Fontes

Fundador da DEVDINIZ
Software em produção
51 ferramentas gratuitas, direto no navegador
Utilitários para CPF, CNPJ, JWT, JSON, regex, cores e mais. Processamento local, sem cadastro e sem conta — a mesma engenharia que sustenta o que escrevemos aqui.