0Pricing
Cryptology Academy · Aula

A Estrutura do Protocolo Noise

Explore o Noise — uma estrutura para criar handshakes criptográficos personalizados usados no WireGuard, no WhatsApp e no Lightning.

A Estrutura do Protocolo Noise é uma aula grátis de Cryptology Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cryptology Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cryptology Academy inclui 4 aulas no total.

O que é a estrutura Noise

A estrutura de protocolos Noise (Trevor Perrin, 2016; revisão atual de 2018) é uma estrutura para criar protocolos de canal seguro usando um pequeno conjunto de primitivas e uma linguagem de padrões. Em vez de especificar um único protocolo, o Noise define um vocabulário de padrões de negociação que descrevem a sequência das operações DH e sua ordem. Qualquer padrão Noise válido pode ser instanciado com funções concretas de DH (Curve25519 ou Curve448), de cifra (AESGCM ou ChaChaPoly) e de hash (SHA-256, SHA-512, BLAKE2). O Noise é usado no WireGuard, no WhatsApp, no Signal (como base do X3DH), na Lightning Network e no I2P.

Funções e chaves do Noise

Toda negociação do Noise tem um iniciador (I) e um respondente (R). Cada parte pode ter dois tipos de chaves: estática (chave de identidade de longo prazo, indicada por s/S) e efêmera (gerada de novo para cada sessão, indicada por e/E). As letras minúsculas indicam a chave da parte local; as maiúsculas indicam a chave pública da parte remota. Um padrão Noise especifica quais chaves são enviadas (em texto simples ou criptografadas) e quais operações DH são realizadas. Por exemplo, "e" significa "enviar minha chave pública efêmera"; "es" significa "executar DH(minha chave efêmera, chave estática remota)". Cada saída DH é misturada ao estado de hash da negociação em andamento.

Estado simétrico do Noise

O núcleo do Noise é o SymmetricState, que mantém três valores: ck (chave de encadeamento, inicializada com um hash do nome do protocolo), h (hash da negociação, o hash da transcrição em andamento) e k (chave de criptografia atual). MixKey(input) executa HKDF(ck, input) para atualizar ck e k. MixHash(data) aplica um hash aos dados e os incorpora a h. EncryptAndHash(plaintext) criptografa com k e mistura o texto cifrado em h. DecryptAndHash(ciphertext) descriptografa e mistura o texto cifrado em h. O hash da negociação h fornece vinculação à transcrição — qualquer modificação adversária em qualquer mensagem altera h, fazendo a descriptografia falhar. Ao final da negociação, Split() produz dois CipherStates separados para envio e recebimento.

O padrão Noise_XX

Noise_XX é o padrão de autenticação mútua mais usado. Ele fornece autenticação mútua por chaves estáticas, com as chaves estáticas de ambas as partes transmitidas durante a negociação. Padrão: (1) -> e (o iniciador envia a chave pública efêmera). (2) <- e, ee, s, es (o respondente envia sua chave efêmera, executa DH(e,e) e DH(e,s_resp) e envia a chave estática criptografada). (3) -> s, se (o iniciador envia a chave estática criptografada e executa DH(s_init, e_resp)). Após a etapa 3, ambas as partes misturaram três saídas DH à chave da sessão: ee (sigilo de encaminhamento), es (autenticação do servidor) e se (autenticação do cliente). A chave da sessão permanece independente do comprometimento de qualquer chave de longo prazo após o encerramento da sessão.

O padrão Noise_IK (WireGuard)

O WireGuard usa um padrão derivado do Noise_IK, no qual o iniciador conhece antecipadamente a chave estática do respondente. (1) -> e, es, s, ss (o iniciador envia sua chave efêmera, executa DH(e, S_resp), envia sua chave estática criptografada e executa DH(s_init, S_resp)). (2) <- e, ee, se (o respondente envia sua chave efêmera, executa DH(e_resp, e_init) e DH(e_resp, S_init)). O padrão IK fornece ocultação da identidade do iniciador (sua chave estática é criptografada com a chave estática do respondente na etapa 1) e conclusão em um RTT. O WireGuard adiciona um carimbo de data e hora dentro da carga útil criptografada do iniciador para impedir repetições. Isso proporciona ao WireGuard sua simplicidade característica: uma negociação completa de VPN em dois pacotes UDP.

Hash da negociação do Noise e vinculação de canal

O hash da negociação h ao final de uma negociação do Noise é um hash da transcrição que abrange todas as mensagens enviadas. Ele funciona como um valor de vinculação de canal — ambas as partes calculam o mesmo h, e qualquer protocolo de terceiros que queira se vincular à sessão do Noise pode incluir h como um valor de uso único ou um ID de canal. Isso permite a autenticação composta: uma etapa de autenticação por certificado ao estilo do TLS pode ser executada após a negociação do Noise, vinculando o certificado a essa sessão específica por meio de h. A vinculação de canal impede ataques de encaminhamento de credenciais, nos quais credenciais de autenticação de uma sessão são repetidas contra outra. Split() fornece h ao aplicativo junto com as chaves da sessão.

Padrões postergados e alternativa do Noise

O Noise oferece padrões postergados para situações em que o iniciador não conhece antecipadamente a chave estática do respondente. Noise_NX (o iniciador não tem uma chave estática; o respondente transmite a sua) é semelhante ao TLS unidirecional. Noise_XX trata do caso em que ambos precisam trocar chaves. Noise_IK pode usar Noise_XXfallback como alternativa se a suposição do iniciador sobre a chave estática do respondente estiver errada (por exemplo, após uma rotação de chave). O padrão alternativo permite que o respondente sinalize "você usou a chave errada; esta é minha nova chave pública" sem revelar a observadores externos que a alternativa foi usada — mantendo a opacidade do protocolo.

Noise no WhatsApp e no Signal

O WhatsApp e o Signal usam Noise_XX para estabelecer canais seguros entre clientes e servidores. O protocolo binário do WhatsApp usa Noise_XX com Curve25519, ChaChaPoly e SHA-256. A chave estática do cliente é sua chave de identidade de longo prazo. Após a negociação do Noise, a camada de aplicativo executa autenticação adicional (registro no Signal, verificação do número de telefone). O acordo de chaves X3DH (Extended Triple Diffie-Hellman) executa quatro operações DH para estabelecer um segredo compartilhado entre dois usuários por meio de uma troca assíncrona de mensagens — não se trata de um padrão Noise convencional, mas ele usa conceitos semelhantes de mistura de DH. Em seguida, o Double Ratchet assume o controle da criptografia contínua das mensagens.

Noise e TLS

Noise e TLS 1.3 tratam do mesmo problema (troca autenticada de chaves) com filosofias diferentes. O TLS 1.3 é um protocolo único com conjuntos de cifras definidos, formatos de certificados (X.509) e extensões. Ele foi projetado para navegadores e servidores da Web — um protocolo único para a maioria dos casos. Noise é uma estrutura: não especifica formato de certificado, PKI nem vinculação ao transporte. Isso torna o Noise menor (toda a implementação do Noise no WireGuard tem menos de 400 linhas de código) e facilita sua análise formal, mas exige que o aplicativo cuide do gerenciamento de identidades separadamente. O Noise é preferível para sistemas fechados (aplicativo-servidor, VPN), nos quais a PKI seria desnecessária; o TLS é preferível para sistemas abertos (Web), nos quais é necessária a interoperabilidade de certificados.

Segurança formal do Noise

Os padrões Noise foram analisados formalmente no modelo de segurança eCK (Canetti-Krawczyk estendido). Kobeissi, Bhargavan e Blanchet analisaram o Noise usando o Proverif e encontraram provas de autenticação e confidencialidade das chaves para todos os 12 padrões fundamentais do Noise. As provas pressupõem a hipótese padrão da dificuldade de DH (Curve25519) e a segurança das funções AEAD e de hash subjacentes. A natureza composicional do Noise (cada DH é misturado de forma incremental) facilita o raciocínio sobre ele em comparação com protocolos complexos semelhantes ao TLS, com muitas transições de estado. A verificação criptográfica do Noise proporcionou ao WireGuard e ao WhatsApp alta confiança na segurança de seus protocolos antes da implantação.

Implementação correta do Noise

Armadilhas comuns na implementação do Noise: (1) Confusão de padrões — usar Noise_IK quando a chave estática do respondente não foi distribuída de maneira confiável antecipadamente causa incompatibilidade de identidade (o iniciador pode criptografar silenciosamente para a chave errada). (2) Proteção contra repetição — o Noise fornece autenticação, mas não proteção contra repetição das mensagens da fase de transporte; valores de uso único (contadores de 64 bits) devem ser controlados, e o transbordamento (após 2^64 mensagens) deve acionar uma troca de chaves. (3) Integridade do prólogo — o prólogo do Noise (uma cadeia de bytes misturada em h antes do início da negociação) deve incluir todo o contexto do protocolo (versão, escolhas de algoritmos) para impedir ataques de rebaixamento. (4) Uso incorreto de PSK — o Noise oferece extensões de PSK para misturar chaves pré-compartilhadas; as PSKs devem ter alta entropia, não ser senhas de usuário.

Questionário sobre a estrutura Noise

O que significa a notação de padrão "es" do Noise em um padrão de negociação?

Recapitulação da estrutura Noise

Noise é uma estrutura para criar protocolos de troca autenticada de chaves usando uma linguagem de padrões de operações DH. SymmetricState mantém a chave de encadeamento (ck), o hash da transcrição (h) e a chave de cifra (k), atualizados por MixKey/MixHash. Noise_XX fornece autenticação mútua em 1,5 RTT; Noise_IK (WireGuard) é concluído em 1 RTT quando a chave do respondente é conhecida. O hash da negociação h funciona como vinculação de canal. O Noise foi verificado formalmente para todos os padrões fundamentais por meio do Proverif. Ele é preferível ao TLS em protocolos de sistemas fechados (WireGuard, WhatsApp), nos quais a PKI é desnecessária. A implementação correta exige proteção contra repetição, integridade do prólogo e PSKs de alta entropia.

Perguntas Frequentes

A aula “A Estrutura do Protocolo Noise” é grátis?

Sim — o texto completo de “A Estrutura do Protocolo Noise” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cryptology Academy, atualize para CoddyKit PRO. O curso de Cryptology Academy inclui 4 aulas no total.

O que vou aprender em “A Estrutura do Protocolo Noise”?

Explore o Noise — uma estrutura para criar handshakes criptográficos personalizados usados no WireGuard, no WhatsApp e no Lightning. Você pratica Cryptology Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Cryptology Academy?

Nenhuma experiência prévia é necessária. Cryptology Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “A Estrutura do Protocolo Noise”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Cryptology Academy?

Sim. Cada aula de Cryptology Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. O Protocolo Needham-Schroeder e Ataques
  2. Protocolo Station-to-Station (STS)
  3. A Estrutura do Protocolo Noise
  4. Princípios de Design de Protocolos Seguros
← Voltar para Cryptology Academy