Executando verificação de segurança...
33

Eu criei um protocolo de comunicação que funciona mesmo sem internet. o futuro da comunicação resiliente

Há três dias, eu publiquei um repositório no GitHub com apenas 5 arquivos.
Nenhum framework. Nenhuma nuvem. Nenhum banco de dados.
Só Node.js, libsodium e uma ideia simples:

“E se as mensagens pudessem esperar por você… mesmo quando a rede desaparecer?”

Chamei de CommiLink Protocol (CMLK).

E hoje, depois de ver pessoas lendo, testando e se emocionando com ele, preciso falar sobre isso — não como um dev, mas como alguém que construiu algo que talvez o mundo precise, mas ainda não sabe que quer.

🧠 O que é o CMLK?
É um protocolo de comunicação:

✅ End-to-end encrypted (Curve25519 + ChaCha20)
✅ Multi-transporte: funciona em WebSocket, BLE, LoRa, SMS — sim, SMS
✅ Com relay descentralizado: os servidores só roteiam, nunca veem o conteúdo
✅ Com salas (rooms) e chaves de grupo opcionais
✅ Com tombstones: você pode apagar mensagens enviadas por engano — ou que foram comprometidas
✅ Com store-and-forward: se você tiver offline, sua mensagem espera. E chega quando você volta
✅ Com DID descentralizado: identidade baseada em Ed25519 — sem login, sem email, sem servidor central

Tudo isso em menos de 300 linhas de código.

💡 Por que isso importa?
Porque o mundo atual de mensagens — WhatsApp, Signal, Telegram — assume que você tem internet 24/7.
Mas e se você estiver em:

Uma floresta amazônica com sinal de celular a cada 3 horas?
Um campo de refugiados sem rede?
Um veículo autônomo viajando entre cidades sem cobertura?
Um jornalista que precisa enviar um arquivo e depois apagá-lo?
Um sensor IoT alimentado por energia solar, que só acorda de 12 em 12 horas?
Aí, tudo que temos hoje falha.

O CMLK não falha.

Ele espera.

Ele armazena.

Ele revoga.

Ele não pede permissão.

Como rodar? (Sim, é simples)

`npm install ws cbor-x libsodium-wrappers readline

Terminal 1: inicia o relay

node server.js

Terminal 2: Alice

node client.js Alice

Terminal 3: Bob

node client.js Bob

Em Alice:

/send did:cmlk:ed25519:... "Olá, Bob. Estou aqui."
/join rescue-team QWxhZGRpbjpPcGVuU2VzYW1l
/publish rescue-team "Precisamos de ajuda em Sector 7"
/tombstone 1690000000000-rnd # apaga aquela mensagem que mandei errado
`

Nada de instalação. Nada de contas. Nada de API key.
Só seu terminal. Só seu código. Só sua privacidade.

🌍 O que vem agora?
Não quero virar “a pessoa do CMLK”.
Quero que o CMLK vire algo que outras pessoas usem, melhorem, levem para o mundo real.

Se você é:

Desenvolvedor de IoT
Engenheiro de redes de emergência
Jornalista ou ativista
Criador de protocolos
Alguém que já perdeu contato com alguém por falta de sinal
…você entende o que isso significa.

Eu abri o repositório como MIT License.
Qualquer um pode usar. Modificar. Levar para LoRa. Para satélites. Para redes mesh.
Não preciso de crédito. Preciso de impacto.

🙏 Agradeço
Aos que abriram o README.
Aos que rodaram o cliente.
Aos que me disseram: “Isso é o que eu precisava há anos.”

Você não sabe, mas isso foi mais difícil do que parece.
Fazer algo tão simples, tão poderoso, e ainda assim tão pouco chamativo…
exige coragem.
E solitude.

Hoje, eu me permito dizer:

Eu fiz isso.

E estou orgulhoso.

Não porque é complexo.
Mas porque é necessário.

O CommiLink Protocol (CMLK) não é apenas um futuro da comunicação resiliente — ele é o futuro que o mundo ainda não sabe que precisa, mas já está morrendo por falta.

🔗 Repositório: https://github.com/sempicanha/commilink

Carregando publicação patrocinada...
1

Cara, a ideia é muito interessante. E bem enxuta sua prova de conceito. Mas se você pretende fazer isso ser um protocolo real, seria mais interessante uma documentação com os conceitos e diretrizes de implementação. Daí eu poderia fazer um cliente desse protocolo que servisse para colocar numa aplicação. Depois da uma olhada no protocolo Secure Scuttlebutt

2

Valeu demais pelo feedback 🙏!
Você tem toda razão: a implementação atual é só uma prova de conceito bem minimalista. O próximo passo é justamente transformar isso em um protocolo formal, com documentação clara sobre os conceitos, estrutura das mensagens e diretrizes de implementação — para que qualquer dev consiga criar seus próprios clientes/relays em qualquer linguagem.

Já comecei a rascunhar uma especificação e um README mais detalhado, separando os tipos de mensagens (HELLO, ACCEPT, ENC, ACK, SUBSCRIBE, TOMBSTONE) e os fluxos (1:1 e salas). A ideia é que a documentação seja independente de Node.js e descreva só o protocolo em si.

Boa a dica do Secure Scuttlebutt — vou estudar como eles organizaram o protocolo e a documentação, pode servir bastante de inspiração pra dar mais solidez ao projeto.

1

E pra isso você precisa baixar a internet toda com o NPM 🤪

Brincadeiras a parte, isso não é só um protocolo, você fez uma implementação de um servidor (com cliente embutido, aparentemente) desse protocolo.

O protocolo em si são regras definidas para a implementação.

A propósito, isso seria mais interessante em alguma linguagem compilada, pra aí sim você distribuir um único arquivo, sem instalação de nada, sem downloads extras, e ainda fácil de verificar que é a implementação original, através de algum hash disponibilizado junto do arquivo para download.

Possivelmente Go ou Rust seriam hoje boas opções.

2

Você tem razão, a documentação ainda está um pouco limitada. De fato, a proposta é um protocolo: a arquitetura gira em torno disso. O que implementei por enquanto foi um servidor e um cliente básicos para testar, na prática, como tudo funciona. A ideia é que cada desenvolvedor crie seus próprios clientes e relays, adaptados para diferentes hardwares e conexões.

Atualmente o projeto ainda é um MVP (versão inicial), mas acredito que, com o tempo, ele possa evoluir e abrir novas possibilidades. Agradeço pelo feedback — se quiser, sinta-se à vontade para contribuir diretamente no repositório!

1

Este tipo de projeto é sensacional, estou muito interessado em conhecer mais sobre a necessidade que gerou ele e como pode ser aplicado em casos de uso real.

E como foi exemplificado, que para condições de catástrofe ou perca parcial de comunicação ele poderia solucionar o problema.

Vou entender melhor como ele funciona e até mesmo escrever um servidor e cliente em uma linguagem compilada como foi sugerido para deixar mais claro em minha mente.

1

Obrigado por se interessar no projeto. acredito que o CMLK tem grande potencial quando falamos de comunicação resiliente aonde é possivel romper barreiras.

1

Fiquei com uma dúvida depois de testar o CMLK.

Nos exemplos (server.js + client.js) tudo roda em cima de WebSocket, beleza. Mas quando vi a proposta de ser multi-transporte (SMS, BLE, LoRa…), não consegui imaginar como isso se aplicaria de verdade.

Tipo no caso do SMS:

a mensagem teria que virar texto (base64/CBOR?) e ser quebrada em vários pedacinhos de 160 caracteres?

quem faria esse papel de “gateway” SMS — seria um relay especial ou cada dispositivo teria que ter modem GSM próprio?

e do outro lado, como juntar e decifrar tudo de volta?

E a mesma coisa vale pro LoRa/BLE: entendi a ideia de encapsular o pacote CMLK e mandar pelo rádio, mas na prática ainda precisa de um canal de comunicação ativo.

E é aí que bateu a confusão: a proposta é funcionar quando não tem internet, mas esses transportes todos (SMS, rede celular, BLE no alcance, LoRa no range) já dependem de algum tipo de conectividade mínima. Então fiquei pensando: no cenário “sem sinal nenhum”, como isso se aplicaria? A ideia é usar relays intermitentes (tipo store-and-forward físico, quando alguém passa perto) ou alguma rede mesh/delay-tolerant?

Talvez seja só questão da PoC estar focada em WebSocket por enquanto, mas fiquei na dúvida se já existe algum protótipo real usando SMS/LoRa ou se isso ainda tá mais no campo da visão de design.

1

A ideia do CMLK é justamente ser independente do transporte. Hoje, na PoC, usamos WebSocket porque é o caminho mais simples para validar o protocolo, mas nada impede que ele rode em cima de outros meios como SMS, BLE ou LoRa.

Na prática, o que aconteceria:

Fragmentação: mensagens seriam serializadas (CBOR/Base64) e quebradas em pedaços do tamanho que cada transporte suporta (ex.: 160 caracteres no SMS, poucos bytes no LoRa). No destino, esses fragmentos seriam reagrupados e validados.

Gateways/Dispositivos: cada cenário pode funcionar de duas formas:
dispositivo com o hardware do transporte (modem GSM, rádio LoRa, BLE);

ou um gateway que faz a ponte (ex.: recebe via SMS e repassa pro restante da rede CMLK).

Operação sem internet: em vez de depender de conectividade contínua, o protocolo pode trabalhar de forma store-and-forward ou até em topologias mesh/DTN, onde cada nó guarda e repassa mensagens quando entra em alcance de outro.

Ou seja: mesmo em ambientes com conectividade limitada, o protocolo continua funcionando, só que com um modelo mais assíncrono. O foco atual está em WebSocket, mas a arquitetura foi pensada para suportar essas extensões de transporte conforme a necessidade.

1
0
1

Muito legal a iniciativa de criar e compartilhar, mas na prática, não é um problema novo, missões espaciais e dispositivos IoT de zonas rurais já convivem a muito tempo com essa situação por exemplo.
Estou longe de ser um especialista nessa área, mas em uma rápida pesquisa encontrei a RFC 9171 de 2015 da NASA (Bundle Protocol Version 7), no que o CMLK se difere em relação a este? Quais problemas ele resolve q era falhos nos outros protocolos existentes?

1

Obrigado pelo comentário e pela referência à RFC 9171 (Bundle Protocol v7). De fato, o problema de comunicação tolerante a atrasos e desconexões não é novo e já é amplamente estudado em cenários espaciais e IoT. O CommiLink (CMLK), entretanto, propõe-se a diferir em alguns aspectos práticos:

Baixa complexidade e requisitos mínimos – implementação simplificada, com menor sobrecarga de processamento e memória, visando operar em dispositivos de recursos extremamente limitados.

Adaptabilidade a cenários heterogêneos – suporte a conectividade intermitente em redes não estruturadas (mesh, rádios de longo alcance, links comunitários), com mecanismos mais leves de tolerância a latência e perda.

Segurança pragmática – mecanismos de integridade e autenticação com custo computacional reduzido, compatíveis com hardware de baixo consumo.

Foco em casos de uso terrestres de baixo custo – priorização de aplicações em zonas rurais e comunidades isoladas, em contraste com a complexidade típica de protocolos espaciais.

O objetivo, portanto, não é substituir protocolos como o BPv7, mas oferecer uma alternativa mais acessível e aplicável a cenários onde a implementação integral do DTN seria inviável.

1
0
1

Achei o projeto muito interessante e fiquei pensando em como ele poderia evoluir sem perder a essência de simplicidade, resiliência e descentralização que você propõe. Uma das primeiras coisas que me veio à mente foi a experiência dos usuários finais: hoje o protocolo roda em terminal, o que é perfeito para desenvolvedores, mas para ganhar escala talvez fosse interessante criar camadas de interface — aplicativos móveis ou desktop que rodem o CMLK em segundo plano, permitindo que qualquer pessoa envie mensagens sem precisar lidar com código.

Outro ponto seria expandir os meios de transporte. Além de WebSocket e SMS, vejo muito potencial em integrar redes mesh, Bluetooth multiponto, Wi-Fi Direct ou mesmo LoRa. Isso permitiria que aparelhos próximos servissem como retransmissores, garantindo que, mesmo sem internet, a mensagem pudesse seguir adiante até alcançar o destino quando algum dispositivo se reconectasse. Esse modelo me fez pensar em sistemas P2P, como os usados para compartilhar arquivos em torrent, onde cada nó da rede contribui para o fluxo de dados. Talvez esse conceito possa fortalecer ainda mais a proposta descentralizada do CMLK.

Também imagino que separar a arquitetura em camadas possa ser uma forma de manter o núcleo do protocolo leve e sólido (criptografia, store-and-forward, identidade descentralizada), enquanto a comunidade adiciona diferentes módulos de transporte de acordo com a necessidade de cada cenário. Isso abre espaço para que outros desenvolvedores, entusiastas ou engenheiros de redes de emergência contribuam sem precisar alterar a base.

Em termos práticos, penso em um caminho em três fases: primeiro consolidar o núcleo para devs (como você já fez), depois permitir que entusiastas técnicos testem versões mais acessíveis, e por fim disponibilizar para usuários finais via aplicativos simples, escondendo toda a complexidade.

Gostaria de ouvir sua visão sobre essa evolução. Você imagina o CMLK caminhando nesse sentido de integrar modelos mesh/P2P e camadas de interface para usuários finais, ou a ideia é mantê-lo minimalista e deixar que a comunidade faça esse papel?

1
1

Achei bem interessante, em 2023 trabalhei em um projeto de estudo que usava wi-fi direct para comunicação offline em áreas sem internet, mas acabei não avançando tanto, atualmente estou estudando um pouco sobre Meshtastic, acredito que possa se encaixar bem no contexto que você quer utilizar.

1

Olá! Seu projeto é muito interessante. Atualmente, estou desenvolvendo um aplicativo e esse protocolo viria a cair muito bem. Minha proposta visa eliminar a dependência das operadoras, já que hoje ficamos muito presos à questão de que quase todos os aplicativos dependem do número de telefone. Se você não mantiver seu número, perde o acesso à maioria dos serviços relevantes, como WhatsApp e Telegram.

1

que massa. Nesse caso esse projeto é baseado em Id e chave publica e privada. N depende de numeros ou emails, Apenas o usuario tem acesso as mensagens

0

Meus 2 cents,

Parabens pela iniciativa e por compartilhar conosco !

Sempre eh positivo mergulhar em projetos como esse - seja como aprendizado ou como a busca em criar algo para a comunidade.

Focando no projeto, vamos tentar sintetizar seus objetivos:

  • Criar uma metodologia de envio de mensagens assincronas baseado em uma estrutura "cliente" e "servidor", onde as mensagens nao expiram e ficam em stand-by caso do destinatario nao esteja disponivel ate que a entrega seja realizada. As mensagens podem ser apagadas pelo remetente caso desejado. Toda a comunicacao deve ser criptografada e os servidores apenas fazem o delivery da mensagem, sem interagir com seu conteudo.

OK - acho que isso meio que cobre "o que" o projeto deve fazer.

Agora vem o "como fazer".

Uma questao que se torna meio obvia eh que nao podemos ter apenas 1 servidor - afinal a ideia eh resiliencia. Entao precisamos pensar em uma forma de ter diversos servidores comunicando-se entre si. Mas estes servidores precisam ser independentes - mas seria legal se pudessem trabalhar em conjunto para a entrega das mensagens, roteando (relay) o trafego.

Alem disso tem a questao do registro: o cliente precisa ter uma identificacao unica nesta rede - mas os servidores precisam saber onde o cliente esta conectado para fazer o delivery.

Seria algo como: cliente se conecta no servidor, servidor divulga que tem este cliente, servidores ja sabem onde deve entregar a mensagem.

Legal, mas tem um problema: volume de trafego - se tivermos milhoes de clientes se conectando, ficar gerando anuncios de conexao pela rede nao eh pratico (alem do fato de que esta conexao pode cair e precisamos anunciar novamente, talvez ate sem que o primeiro anuncio tenha terminado).

Um passo atras: precisamos de uma rede de servidores descentralizados que consigam saber quais os servidores disponiveis e quando alguem conecta neles para fazer o delivery.

Mas surge uma pergunta: o delivery sera do tipo "push" ou "pull" ? Como fazer isso de forma eficiente ?

Exemplificando: o cliente se conecta, a rede de servidores detecta isso e envia as mensagens pendentes ("push") ou o cliente se conecta e sai perguntando para os servidores "voce tem algo para mim ? ("pull")·

Hummm, nenhuma das forma parece muito eficiente - temos de repensar um pouco aqui.

Uma possibilidade seria o cliente ter um servidor de preferencia/referencia - assim resolve varios problemas: nao preciso ficar fazendo o anuncio e os servidores ja sabem onde entregar a mensagem independente do cliente estar conectado.

So preciso que cliente identifique qual o servidor de preferencia - e isso poderia ser dinamico.

Hummm, eh uma ideia: um cliente com identificacao unica, que aponte seu servidor de mensagens de preferencia e que os servidores consigam entregar as mensagens entre si.

Parece fazer sentido.

Poderiamos ter 2 protocolos especificos: o protocolo entre cliente e servidor e o protocolo entre servidores - para tornar o processo mais eficiente, afinal as necessidades do delivery para o cliente sao um pouco diferentes do roteamento entre os servidores.

Hummm, poderiamos chamar este protocolo entre cliente e servidor de IMAP ou POP e o protocolo entre servidores de SMTP - parece fazer sentido.


Bricandeiras a parte - acho a ideia interessante: so precisa pensar um pouco em como diferenciar do email e aproximar de sistemas de IM.

Talvez pensar nos servidores em rede MESH ou ate algo semelhante ao um sistema de BLOCKCHAIN (TANGLE ?) para viabilizar.

Saude e Sucesso !

-2