heliofilho.devNewsletter
Cofre/Vídeos
Vídeo · 13 de out. de 2026

A senha combinada com o espião ouvindo (e a máquina que quebra isso)

A resposta do vídeo, o código Python linha por linha, por que o espião não consegue desmisturar a tinta e como o computador quântico ameaça a troca de chaves que protege as suas mensagens.

Você comentou CHAVE e aqui está a resposta: a máquina que desfaz a mistura é o computador quântico. Antes de chegar nela, esta página destrincha o código do vídeo linha por linha, mostra o espião tentando quebrar a senha em Python e conta como o WhatsApp e o Signal usam essa ideia hoje. Tudo que precisa pra rodar é o Python instalado.

Resumo pra quem tem pressa

O conceitoTroca de chaves Diffie-Hellman
O problema que resolveCombinar uma senha secreta conversando num canal que todo mundo escuta
Quem publicouWhitfield Diffie e Martin Hellman, publicado em 1976
Linguagem do vídeoPython, com a função pow
Onde você usaMensageiros como WhatsApp e Signal, e sites com cadeado no navegador
Por que o espião não quebraDesfazer a conta é o "logaritmo discreto", que nenhum computador comum resolve rápido com números grandes
A máquina que quebraUm computador quântico grande o bastante, rodando o algoritmo de Shor
A defesaCriptografia pós-quântica, padronizada pelo NIST em 2024 e já usada pelo Signal e pelo iMessage

A resposta: qual máquina desfaz a mistura

Um computador quântico. Em 1994, o matemático Peter Shor mostrou que um computador quântico consegue resolver dois problemas que seguram quase toda a criptografia de chave pública: fatorar números grandes e o logaritmo discreto. O segundo é exatamente a conta que o espião precisa desfazer no vídeo.

Lembra da lista de tentativas do espião? Ela tem um padrão escondido. As potências de 5 com resto por 23 andam em círculo e voltam pro começo depois de 22 passos:

5, 2, 10, 4, 20, 8, 17, 16, 11, 9, 22, 18, 21, 13, 19, 3, 15, 6, 7, 12, 14, 1, 5, 2, ...

Um computador comum só descobre esse ritmo testando posição por posição. O computador quântico encontra o ritmo por outro caminho, usando um efeito de interferência parecido com o de ondas que se somam e se cancelam. Com o ritmo em mãos, uma conta comum entrega o seu número secreto. O espião deixa de testar um por um e vai direto na resposta.

Então o WhatsApp já era?

Ainda não. O computador que faz isso precisa de muito mais qubits (a unidade de informação quântica) do que existe hoje:

Qubits físicos
Willow, o chip quântico que o Google apresentou em dezembro de 2024105
Estimativa do Google (março de 2026) pra quebrar criptografia de curva elíptica de 256 bits em poucos minutosmenos de 500 mil
Estimativa de Craig Gidney, do Google (maio de 2025), pra quebrar RSA de 2048 bits em menos de uma semanamenos de 1 milhão
O chip quântico Willow, do Google, com 105 qubits. Imagem do blog oficial do Google.
O chip quântico Willow, do Google, com 105 qubits. Imagem do blog oficial do Google.

A distância ainda é grande, mas ela vem caindo rápido. Em 2019 a estimativa pra RSA era de 20 milhões de qubits. Em 2025 passou pra menos de 1 milhão. E o Google publicou a estimativa de 2026 sem mostrar o circuito de ataque: soltou só uma prova matemática de que os números batem, pra ninguém usar o atalho antes da hora.

O medo real tem nome: colha agora, decifre depois. Quem grava hoje o tráfego criptografado de alguém pode guardar e abrir daqui a alguns anos, quando a máquina existir. Os números 8 e 19 do vídeo ficam gravados pra sempre. É por isso que a defesa começou antes do ataque.

O código do vídeo, linha por linha

p, g = 23, 5                            # público
seu = 6                                 # segredo seu
amigo = 15                              # segredo do amigo

voce_envia = pow(g, seu, p)             # 8
amigo_envia = pow(g, amigo, p)          # 19

senha = pow(amigo_envia, seu, p)        # 2
senha_dele = pow(voce_envia, amigo, p)  # 2
LinhaO que fazNa tinta do vídeo
p, g = 23, 5Dois números públicos, que o espião também conheceO amarelo combinado em voz alta
seu = 6Seu número secreto. Nunca sai do seu celularO seu vermelho
amigo = 15O número secreto do seu amigo. Nunca sai do celular deleO azul dele
voce_envia = pow(g, seu, p)5 elevado a 6, resto da divisão por 23. Dá 8O laranja que você manda
amigo_envia = pow(g, amigo, p)5 elevado a 15, resto por 23. Dá 19O verde que ele manda
senha = pow(amigo_envia, seu, p)Você pega o 19 dele e eleva ao seu 6. Dá 2Você põe o seu vermelho no verde
senha_dele = pow(voce_envia, amigo, p)Ele pega o seu 8 e eleva ao 15 dele. Dá 2Ele põe o azul no laranja

Por que os dois chegam no mesmo 2? Porque os dois calcularam, por caminhos diferentes, 5 elevado a 6 vezes 15. Você fez (5^15)^6 e ele fez (5^6)^15. A ordem da mistura não muda a cor final.

O detalhe da função pow

Em Python, pow(5, 6) é 5 elevado a 6. O terceiro número muda tudo: pow(5, 6, 23) já devolve o resto da divisão por 23. A documentação do Python diz que essa forma é calculada de um jeito mais eficiente do que pow(5, 6) % 23, porque nunca monta o número gigante no meio do caminho. Com números de centenas de dígitos, essa diferença é a diferença entre um piscar de olhos e nunca terminar.

Dica: desde o Python 3.8, pow aceita expoente negativo com módulo. pow(38, -1, 97) devolve o número que multiplicado por 38 dá resto 1 na divisão por 97. Isso se chama inverso modular e aparece em muito código de criptografia.

Rode você mesmo

Salve como segredo.py e rode com python segredo.py no terminal:

p, g = 23, 5
seu = 6
amigo = 15

voce_envia = pow(g, seu, p)
amigo_envia = pow(g, amigo, p)

senha = pow(amigo_envia, seu, p)
senha_dele = pow(voce_envia, amigo, p)

print("pela internet passaram:", voce_envia, "e", amigo_envia)
print("sua senha:", senha, "| senha do seu amigo:", senha_dele)

Troque o 6 e o 15 por outros números entre 1 e 22 e rode de novo. As duas senhas continuam iguais, qualquer que seja a escolha.

Agora seja o espião

O espião viu o 8 passar. Ele sabe que 8 veio de 5 elevado a algum número, mas não sabe qual. O único jeito que ele tem é testar:

p, g = 23, 5
voce_envia = 8          # o espião viu passar

for k in range(1, p):
    if pow(g, k, p) == voce_envia:
        print("achei o seu segredo:", k)
        break

Resposta: achei o seu segredo: 6, na sexta tentativa. Com 23 é fácil. O problema do espião é o tamanho.

O mesmo código com um número grande

import secrets

p = 2**127 - 1          # um número primo de 39 dígitos
g = 3
seu = secrets.randbelow(p - 2) + 1
amigo = secrets.randbelow(p - 2) + 1

voce_envia = pow(g, seu, p)
amigo_envia = pow(g, amigo, p)

print(pow(amigo_envia, seu, p) == pow(voce_envia, amigo, p))   # True

Isso roda na hora. Já o espião, testando 1 bilhão de números por segundo, levaria uns 5 sextilhões de anos pra percorrer todas as possibilidades. E a versão de verdade usa números ainda maiores: um primo de 2048 bits tem 617 dígitos, o bloco de números que aparece no vídeo.

Dica: esse primo de 39 dígitos serve pra brincar, não pra proteger nada. Ele tem atalhos matemáticos conhecidos que um espião esperto usaria no lugar do teste um por um. Sistemas reais usam parâmetros padronizados e testados por criptógrafos. Nunca invente os seus.

O que ninguém te conta

O Diffie-Hellman sozinho não sabe com quem você está falando. Ele protege contra o espião que só escuta. Se o espião se colocar no meio e trocar números com cada um de vocês fingindo ser o outro, cada lado combina uma senha com ele. Por isso os mensageiros têm uma tela pra conferir a identidade: no Signal é o número de segurança, que você confere escaneando o QR code da outra pessoa, de preferência ao vivo. No WhatsApp, a mesma ideia aparece como código de segurança, na tela de criptografia do contato.

A senha combinada não é usada direto. O número que sai da troca passa antes por uma função de derivação de chave (KDF). A documentação da biblioteca cryptography explica o motivo: ela mistura informação extra, permite tirar várias chaves de uma só e apaga qualquer padrão que o número tenha.

O mundo real troca os números por pontos de uma curva. Em vez de potência com resto, os sistemas modernos usam curvas elípticas. Uma das mais usadas é a X25519, a mesma do Protocolo Signal: chaves de só 32 bytes, rápidas e com a mesma lógica da tinta. Elevar vira "andar" na curva, e desfazer continua sendo o problema difícil.

É uma senha nova por conversa, não uma pra sempre. Os protocolos modernos geram números secretos novos o tempo todo e jogam os velhos fora. Se alguém roubar o seu celular amanhã, não consegue abrir as mensagens antigas que gravou. Isso se chama sigilo futuro (forward secrecy).

Como o WhatsApp usa isso

O WhatsApp terminou de adotar o Protocolo Signal em abril de 2016, o mesmo do aplicativo Signal. A troca de chaves desse protocolo se chama X3DH, sigla em inglês pra "Diffie-Hellman Triplo Estendido". Em vez de uma troca como a do vídeo, ele faz três ou quatro de uma vez, com chaves diferentes, e junta os resultados numa KDF. Duas dessas trocas provam quem é quem, as outras garantem o sigilo futuro. E funciona mesmo com o seu amigo offline, porque o celular dele deixa chaves públicas guardadas no servidor com antecedência.

Depois de combinada a senha, entra o Double Ratchet, que deriva uma chave nova pra cada mensagem. Uma chave roubada hoje não abre as mensagens de antes.

A versão de verdade em Python, com a curva X25519 e a biblioteca cryptography (pip install cryptography):

from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey
from cryptography.hazmat.primitives.kdf.hkdf import HKDF

voce = X25519PrivateKey.generate()      # seu segredo
amigo = X25519PrivateKey.generate()     # segredo do amigo

# só as chaves públicas passam pela internet
senha = voce.exchange(amigo.public_key())
senha_dele = amigo.exchange(voce.public_key())
print(senha == senha_dele)              # True

# a senha passa por uma KDF antes de ser usada
chave = HKDF(algorithm=hashes.SHA256(), length=32,
             salt=None, info=b"conversa").derive(senha)

É a mesma ideia do código do vídeo, só que com números do tamanho certo e a biblioteca cuidando das armadilhas.

A defesa contra a máquina

A resposta da criptografia ao computador quântico é trocar o problema difícil por outro, que nem ele sabe resolver rápido. É a criptografia pós-quântica.

QuandoO que aconteceu
Setembro de 2023O Signal lança o PQXDH: a troca X25519 de sempre mais o CRYSTALS-Kyber, um algoritmo pós-quântico. O espião precisa quebrar os dois
Fevereiro de 2024A Apple lança o PQ3 no iMessage, juntando Kyber com a curva P-256, na troca inicial e ao longo da conversa
Agosto de 2024O NIST, órgão de padrões dos Estados Unidos, publica os três primeiros padrões pós-quânticos. O FIPS 203 (ML-KEM) é o Kyber com nome oficial
Outubro de 2025O Signal adiciona o SPQR e passa a girar chaves pós-quânticas durante toda a conversa, no que chama de Triple Ratchet
Escala da Apple de segurança quântica em mensageiros: do nível 0, sem criptografia de ponta a ponta, ao nível 3, com proteção pós-quântica na troca inicial e ao longo da conversa. Imagem da Apple Security Research, fevereiro de 2024.
Escala da Apple de segurança quântica em mensageiros: do nível 0, sem criptografia de ponta a ponta, ao nível 3, com proteção pós-quântica na troca inicial e ao longo da conversa. Imagem da Apple Security Research, fevereiro de 2024.

A escala é da Apple, então coloca o iMessage no topo. Ela é de fevereiro de 2024 e mostra o Signal com o PQXDH. O SPQR veio depois.

E o WhatsApp? Quando este texto foi escrito (13/10/2026), não encontrei documentação técnica do WhatsApp confirmando a camada pós-quântica nas conversas. Ele usa o Protocolo Signal, mas adotar cada atualização do protocolo é decisão da Meta. Se você achar o anúncio, me manda.

Dica: você provavelmente já usa criptografia pós-quântica sem saber. O Chrome no computador combina X25519 com um algoritmo pós-quântico na conexão com sites que suportam, e desde a versão 131, do fim de 2024, esse algoritmo é o ML-KEM. É a mesma ideia do PQXDH: o espião tem que quebrar as duas.

A história por trás

Até os anos 1970, pra duas pessoas trocarem mensagens secretas, elas precisavam se encontrar antes pra combinar a chave, ou mandar a chave por um mensageiro de confiança. Em novembro de 1976, Whitfield Diffie e Martin Hellman, da Universidade Stanford, publicaram "New Directions in Cryptography", que começa assim: "We stand today on the brink of a revolution in cryptography". Estamos à beira de uma revolução.

O artigo mostrou que duas pessoas podem combinar um segredo conversando em público, com a mesma conta do vídeo. Os autores citam Ralph Merkle, que estudava o mesmo problema de forma independente, e por isso muita gente chama de troca Diffie-Hellman-Merkle. Diffie e Hellman ganharam o Prêmio Turing de 2015, o equivalente ao Nobel da computação.

A reviravolta veio em 1997. O GCHQ, o serviço de inteligência britânico, revelou que três dos seus matemáticos (James Ellis, Clifford Cocks e Malcolm Williamson) tinham chegado à criptografia de chave pública antes, entre 1969 e 1975. Williamson descobriu praticamente a mesma troca de chaves. Ficou tudo em segredo por mais de 20 anos.

Pra ir mais fundo

Artigos originais

Documentação

Pós-quântico

História

No Cofre

Glossário rápido

TermoEm português claro
Diffie-HellmanO jeito de duas pessoas combinarem uma senha conversando em público
Resto da divisão (mod)O que sobra numa divisão. 32 dividido por 23 dá 1 e sobra 9
Logaritmo discretoO problema de achar o expoente secreto a partir do resultado. É o que o espião tenta
Curva elípticaUma estrutura matemática que faz o papel da potência com chaves bem menores
X25519Uma curva elíptica muito usada em troca de chaves, inclusive no Protocolo Signal
KDFFunção que transforma a senha combinada numa chave pronta pra uso
Sigilo futuroSe uma chave vazar hoje, as mensagens antigas continuam protegidas
QubitA unidade de informação de um computador quântico
Algoritmo de ShorO método que deixa um computador quântico desfazer a mistura
Pós-quânticaCriptografia feita pra resistir a computadores quânticos

Tem mais conceito explicado assim no Cofre, e todo dia sai vídeo novo de tecnologia no @heliofilhou.