Telegram para devs: MTProto, bots e criptografia na prática

Telegram para devs: MTProto, bots e criptografia na prática

A situação do Telegram com a Rússia não é só geopolítica — é um caso de estudo vivo sobre os trade-offs entre criptografia, moderação e soberania digital. Como dev, eu olho pra essa novela toda e penso: e se eu tivesse que construir algo parecido? Quais decisões técnicas estão em jogo aqui? Vou destrinchar isso no nível do código.

O que realmente está acontecendo com o Pavel Durov e o Telegram

Segundo o Olhardigital.com.br, a Rússia formalizou acusações contra Pavel Durov e emitiu um mandado internacional de prisão. O FSB (serviço de segurança russo) alega que o Telegram deixou de remover conteúdos usados por serviços especiais ucranianos e por grupos classificados como terroristas e extremistas.

Essa acusação pode soar dramática, mas tecnicamente ela toca em um ponto nevrálgico: quem decide o que fica ou sai de uma plataforma criptografada? Não é a primeira vez que Durov cai nessa berlinda — em agosto de 2024 ele foi preso na França pelo mesmo tipo de questionamento. E a França segue investigando se o Telegram cooperou o suficiente com autoridades locais.

A resposta do Telegram foi à altura do estilo Durov: sem comunicado oficial, só um tuíte com uma imagem do fundador mostrando o dedo médio. Genial do ponto de vista de marketing, péssimo do ponto de vista diplomático.

O trade-off técnico que ninguém quer enfrentar

Quando eu projeto qualquer sistema que envolve mensageria, moderação ou dados sensíveis, sempre aparece a mesma pergunta: quanto controle eu abro mão em troca de segurança? O Telegram vive nesse dilema há anos.

Veja os modelos que existem hoje e por que cada um implica em decisões de engenharia diferentes:

  • Criptografia cliente-servidor (MTProto padrão do Telegram): o servidor vê o conteúdo. Permite moderação, busca, cloud sync. Mas entrega tudo ao governo se houver intimação.
  • End-to-end (Secret Chats no Telegram, Signal Protocol, WhatsApp): só os endpoints descriptografam. Não tem moderação server-side, mas garante privacidade real.
  • Modelo federado (Matrix/Element): você pode hospedar seu próprio servidor. Soberania total, mas perde a conveniência da rede única.

O Telegram optou por um modelo híbrido que irrita todo mundo: tem E2E opcional em “Secret Chats”, mas o tráfego normal passa pelos servidores deles. Isso dá ao Durov poder de moderação — e, por consequência, responsabilidade legal em jurisdições que exigem cooperação.

O que devs podem aprender com o protocolo MTProto

Como programador, eu recomendo abrir o código de referência do MTProto pelo menos uma vez. Não importa se você concorda com o design — ele resolve problemas reais de performance e segurança que aparecem em qualquer sistema distribuído.

Os pilares técnicos que sustentam o Telegram (e que devs sênior devem entender):

  1. Diffie-Hellman com servidor autoritativo: permite Perfect Forward Secrecy sem que o servidor veja a chave.
  2. Rekeying automático: a cada 100 mensagens ou 1 hora, uma nova chave é gerada. Isso limita o blast radius se uma chave vazar.
  3. SHA-256 + AES-256 IGE: combinação incomum (IGE em vez de CBC/GCM), escolhida para evitar certos ataques de padding.
  4. Server-side state: o Telegram mantém o estado de sincronização, diferente do Signal que é stateless do lado do servidor.

Na Prática: criando um bot no Telegram com Python

Mesmo com toda essa conf geopolítica, a API do Telegram continua sendo uma das mais sólidas pra devs. Vou deixar um exemplo funcional de bot com tratamento de webhook seguro, que é a parte que 90% dos devs erra quando vai pra produção:

import hashlib
import hmac
from fastapi import FastAPI, Request, HTTPException

app = FastAPI()
BOT_TOKEN = "COLOQUE_SEU_TOKEN_AQUI"

def verify_telegram_secret(body: bytes, header: str) -> bool:
    secret = hashlib.sha256(BOT_TOKEN.encode()).digest()
    expected = hmac.new(secret, body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, header)

@app.post("/webhook")
async def telegram_webhook(request: Request):
    raw = await request.body()
    sig = request.headers.get("X-Telegram-Bot-Api-Secret-Token", "")
    if not verify_telegram_secret(raw, sig):
        raise HTTPException(status_code=403, detail="invalid signature")
    
    update = await request.json()
    chat_id = update["message"]["chat"]["id"]
    text = update["message"].get("text", "")
    
    if text == "/ping":
        await send_message(chat_id, "pong")
    return {"ok": True}

Ponto crítico aqui: sempre valide o header X-Telegram-Bot-Api-Secret-Token. Sem isso, qualquer um pode postar updates falsos no seu endpoint. Eu vi isso em produção mais vezes do que gostaria — bot que executa comandos de pagamento porque alguém descobriu o webhook exposto.

Comparativo real: Telegram Bot API vs outras plataformas

Plataforma Custo Latência Limite de mensagem Moderação nativa
Telegram Bot API Grátis ~50ms 4096 chars Sim (admin bots)
Discord Bot Grátis (nitro opcional) ~100ms 2000 chars Sim (roles)
WhatsApp Business API Por conversa ~200ms 4096 chars Limitada
Matrix/Element Self-host = grátis Variável ~64KB Server-side rules

O Telegram ganha em latência e em ecossistema de libs (existem clientes pra quase toda linguagem). Mas perde quando você precisa de governança corporativa robusta — daí o Matrix ser a escolha preferida de quem roda infraestrutura federada.

Erros Comuns que devs cometem com mensageria criptografada

Eu já revisei código de várias startups. Os deslizes aparecem sempre nos mesmos lugares:

  • Confiar em “criptografia” só porque o marketing diz. Se o servidor consegue ler a mensagem, não é E2E. Ponto.
  • Guardar logs do payload descriptografado. Já vi sistema que guardava o conteúdo da mensagem em plaintext num ElasticSearch “só pra debug”. Isso invalida toda a criptografia.
  • Usar bibliotecas TLS desatualizadas. O Telegram usa a versão custom deles, mas se você está construindo algo novo, use libs auditadas como libsodium ou o BoringSSL.
  • Esquecer o rate limit. Bot que responde sem limite vira vetor de DoS ou de abuso em grupos.
  • Não implementar Perfect Forward Secrecy. Se a chave de longa duração vazar, todo o histórico fica acessível. O Signal faz isso muito bem; copiar essa abordagem é obrigatório.

O “porquê” por trás das decisões regulatórias

Quando o FSB pede acesso a dados, ele não está só sendo “autoritário” — está aplicando a lógica de qualquer Estado soberano: dados que trafegam em jurisdição local estão sujeitos a lei local. Isso aparece no DSA europeu, no APP Act australiano, no EARN IT Act americano. O Telegram, ao manter servidores em jurisdições específicas, abriu essa porta.

Do ponto de vista de arquitetura, a saída seria self-hosting federado (Matrix, XMPP, Nostr). Mas aí você perde a conveniência de uma rede unificada com bilhões de usuários. É o dilema central que Durov nunca resolveu — e provavelmente nunca vai, porque é um problema de produto, não de engenharia.

FAQ — Perguntas que devs realmente fazem

O Telegram é realmente seguro pra devs?

Depende do que você chama de “seguro”. Para chat comum (não-secret), o Telegram tem acesso ao conteúdo e cumpre ordens judiciais. Para Secret Chats, a segurança é comparável ao Signal. Se você está lidando com código-fonte sensível ou credenciais, prefira Signal ou Matrix self-hosted.

Por que o Pavel Durov não usa o mesmo modelo do Signal?

Porque o produto do Telegram depende de features que exigem acesso server-side: sincronização multi-device, busca global, canais com milhões de assinantes, cloud storage. O Signal sacrificou tudo isso em nome da privacidade. São modelos de negócio diferentes.

Minha empresa pode usar o Telegram sem risco regulatório?

Tecnicamente sim, juridicamente depende. Se sua empresa é da União Europeia e o canal tem dados de cidadãos europeus, o RGPD se aplica. O Telegram não está sediado na UE, o que complica a DPC. Para uso corporativo sério, prefira Mattermost, Rocket.Chat ou Element (todos self-hostable).

Vale a pena estudar MTProto em 2026?

Vale pelo exercício mental. O protocolo mistura técnicas clássicas com escolhas controversas (IGE mode, por exemplo). Mas pra projetos novos, eu iria direto de libsodium com Signal Protocol — é mais auditado e tem libs maduras em Rust, Go, Python, JS.

O Telegram pode ser banido globalmente?

Não. Mesmo a Rússia, que tentou em 2018, voltou atrás porque a plataforma virou infraestrutura crítica para comunicação civil e estatal. Governos dependem do Telegram tanto quanto os usuários — é uma das poucas plataformas realmente distribuídas que ainda funciona.

Implicação final para quem está construindo

Se você está desenvolvendo qualquer produto que envolve mensagens, dados de usuários ou moderação de conteúdo, essa novela do Durov é um alerta. A questão não é “se” você vai ter que cooperar com uma autoridade, mas “quando” e “como”. Projete pensando nisso desde o dia zero: defina claramente o que seu servidor vê, documente sua política de retenção, tenha um plano de resposta a intimação.

Eu costumo dizer pros times que lidero: privacidade não é um feature, é um trade-off documentado. Sem essa clareza, você acaba virando o próximo caso de estudo geopolítico — e o próximo dev a ter que responder um mandado internacional.

Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser aprofundar algum ponto.

Y

Yuri Sousa

Front-End Developer / Designer

Desenvolvedor apaixonado por criar experiências digitais acessíveis e visualmente perfeitas. Escrevo sobre desenvolvimento web, design e tecnologia.