Materiais do vídeo
New Directions in Cryptography, o artigo de 1976Artigo · PDF · inglês↗pow() na documentação do PythonDocs · Python↗X3DH, a troca de chaves do Protocolo SignalDocs · inglês↗Signal e a resistência quântica (PQXDH)Blog · inglês↗O algoritmo de Shor, artigo originalarXiv · PDF · inglês↗NIST publica os padrões pós-quânticosSite · inglês↗X25519 na biblioteca cryptographyDocs · Python↗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 conceito | Troca de chaves Diffie-Hellman |
| O problema que resolve | Combinar uma senha secreta conversando num canal que todo mundo escuta |
| Quem publicou | Whitfield Diffie e Martin Hellman, publicado em 1976 |
| Linguagem do vídeo | Python, com a função pow |
| Onde você usa | Mensageiros como WhatsApp e Signal, e sites com cadeado no navegador |
| Por que o espião não quebra | Desfazer a conta é o "logaritmo discreto", que nenhum computador comum resolve rápido com números grandes |
| A máquina que quebra | Um computador quântico grande o bastante, rodando o algoritmo de Shor |
| A defesa | Criptografia 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 2024 | 105 |
| Estimativa do Google (março de 2026) pra quebrar criptografia de curva elíptica de 256 bits em poucos minutos | menos de 500 mil |
| Estimativa de Craig Gidney, do Google (maio de 2025), pra quebrar RSA de 2048 bits em menos de uma semana | menos de 1 milhão |

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
| Linha | O que faz | Na tinta do vídeo |
|---|---|---|
p, g = 23, 5 | Dois números públicos, que o espião também conhece | O amarelo combinado em voz alta |
seu = 6 | Seu número secreto. Nunca sai do seu celular | O seu vermelho |
amigo = 15 | O número secreto do seu amigo. Nunca sai do celular dele | O azul dele |
voce_envia = pow(g, seu, p) | 5 elevado a 6, resto da divisão por 23. Dá 8 | O laranja que você manda |
amigo_envia = pow(g, amigo, p) | 5 elevado a 15, resto por 23. Dá 19 | O verde que ele manda |
senha = pow(amigo_envia, seu, p) | Você pega o 19 dele e eleva ao seu 6. Dá 2 | Você 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á 2 | Ele 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,
powaceita 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.
| Quando | O que aconteceu |
|---|---|
| Setembro de 2023 | O 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 2024 | A Apple lança o PQ3 no iMessage, juntando Kyber com a curva P-256, na troca inicial e ao longo da conversa |
| Agosto de 2024 | O 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 2025 | O Signal adiciona o SPQR e passa a girar chaves pós-quânticas durante toda a conversa, no que chama de Triple Ratchet |

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
- New Directions in Cryptography (1976): o artigo que começou tudo, com a troca de chaves explicada pelos próprios autores.
- O algoritmo de Shor: a prova de que um computador quântico fatora e resolve o logaritmo discreto rápido.
- Fatorar RSA de 2048 bits com menos de 1 milhão de qubits: a estimativa de Craig Gidney, de 2025.
Documentação
- pow() no Python: a função do vídeo, com o inverso modular.
- X3DH: a especificação da troca de chaves do Protocolo Signal.
- RFC 7748: a definição oficial da X25519.
- X25519 na biblioteca cryptography: o exemplo de código que usei acima.
Pós-quântico
- Signal e o PQXDH: por que o Signal se protegeu antes da máquina existir.
- Signal e o SPQR: o Triple Ratchet, de 2025.
- iMessage com PQ3: a abordagem da Apple, com a escala de níveis.
- Chrome troca o Kyber pelo ML-KEM: como o navegador já protege a sua conexão contra o colha agora, decifre depois.
- Os padrões do NIST: ML-KEM, ML-DSA e SLH-DSA.
- Google e a estimativa de 2026: menos de 500 mil qubits pra curvas elípticas de 256 bits.
História
- O marco do IEEE na sede do GCHQ: a parte da história que ficou secreta até 1997.
- Prêmio Turing de 2015: a página oficial da ACM.
- WhatsApp termina a integração do Protocolo Signal: o anúncio de 2016.
No Cofre
- Entendendo Algoritmos: o livro que eu indico pra quem quer pegar o jeito de pensar em algoritmos.
Glossário rápido
| Termo | Em português claro |
|---|---|
| Diffie-Hellman | O 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 discreto | O problema de achar o expoente secreto a partir do resultado. É o que o espião tenta |
| Curva elíptica | Uma estrutura matemática que faz o papel da potência com chaves bem menores |
| X25519 | Uma curva elíptica muito usada em troca de chaves, inclusive no Protocolo Signal |
| KDF | Função que transforma a senha combinada numa chave pronta pra uso |
| Sigilo futuro | Se uma chave vazar hoje, as mensagens antigas continuam protegidas |
| Qubit | A unidade de informação de um computador quântico |
| Algoritmo de Shor | O método que deixa um computador quântico desfazer a mistura |
| Pós-quântica | Criptografia 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.