Idéias para um chat messenger perfeito

Em busca de um messenger seguro, descentralizado e eficiente

Aqui abordo alguns pontos que podem ser úteis na construição de um chat seguro, descentralizado e até mesmo anonimo. Sinta-se livre para acrescentar novos pontos nos comentários.

Depende de dados criptografados: Criptografia assimétrica e simétrica

Depende de conexões seguras, para que o IP não seja relacionado: Depende de proxys como Tor

Múltiplas chaves públicas: cada conversa deve ter uma única chave pública. Assim um usuário não saberá os outros contatos com quem um determinado contato troca mensagem.

A autencidade pode ser garantida atravez de chaves assimétricas pela qual o remetente assina a mensagem e sabe-se que sua origem é verdadeira.

Nos casos em que as partes comunicando estejam online, todas as mensagens podem ser trocadas de forma P2P. Caso necessário, o endereço IP pode ser mascarado atravez de proxyes como Tor, o que também dispensa IP estático.

Para chamadas de video ou de voz, bem como para transferencia de grandes arquivos usar o armazenamento dos nodes não é necessário e muito menos viável. É preciso permitir que os usuários tenham comunicações P2P para estes casos.

Nem sempre o remetente estará online, logo há uma necessidade de nodes dedicados para manterem estas mensagens armazenadas ao menos até que o destinatário baixe, como um cache online. É preciso haver vários destes nodes distribuídos, ou seja, descentralização, para que mesmo que alguns sejam atacados/derrubados, a maioria continue operante.

O Tox é um exemplo de chat que só funciona se os usuários da conversa estiverem online ao mesmo tempo… elimina servidores centrais, mas também dificulta a comunicação, exigindo usuários ficarem online 100% do tempo.

Um cache descentralizado e distribuído é a solução para este problema.

É preciso um desincentivo para que usuários não spammem os nodes, consumindo seus recursos inapropriadamente. Uma eficiente solução para isso é uma espécie de prova de trabalho, como hashcat. Cada mensagem dependendo de um pequeno processamento extra, encarece ataques spam ou o uso inadequado da rede.

Poupando Armazenamento e rede:

Blockchains como conhecemos não são a melhor forma de armazenar tais mensagens, pois no longo prazo o tamanho de tal registro cresceria exponencialmente e os nodes ficariam cada vez mais concentrados, levando a uma centralização perigosa da rede.

Armazenar mensagens eternamente não é necessário, elas apenas precisam ser armazenadas até que o destinatário baixe, depois pode ser apagada e armazenada localmente pelo destinatário. Uma espécie de cache temporário é muito mais viável que uma blockchain imutável.

As mensagens também não precisam ser duplicadas igualmente em todos os nodes. Caso hajam muitos nodes (centenas), o cache de mensagens pode ser dividido entre estes, tentando manter um número significativo de duplicação, mas não absoluto.

Para tal, cada node pode exigir uma dificuldade minima de PoW baseado em sua oferta de recursos. Então o usuário pode escolher para quais nodes prefere mandar, afim de realizar um PoW menor. Assim automaticamente a rede se ajusta.

Timestamps:

Para os destinatários saberem em qual horário aquela mensagem foi enviada de forma confiável, é preciso que tal metadado seja assinado pelo remetente e os nodes só aceitem se estiver correto (uma pequena tolerancia pode ser aplicada levando em consideração ao tempo máximo de broadcasting)

Incentivos:

Os nodes precisam de incentivos para doarem seus recursos para a rede. Uma vez que isto traz custos.

Manter a rede operante e distribuída por sí só já é um grande incentivo, em especial para aqueles que mais utilizam tal sistema, sejam usuários, sejam desenvolvedores ou empresas que dependem de tal sistema.

Mas além disso um sistema anonimo de doação pode ser gerenciado atravez de um mecanismo automático que só premia nodes que provarem-se operantes com bons resultados. Cada doador pode assim rodar um software que testará os nodes ou pode doar para uma pool que realiza tal processo.

Criar um cripto-ativo próprio para recompensar os nodes não é muito viável pois os principais mecanismos de consenso não seriviriam. Proof of Work ou Proof of Work são consensos que não se ligam à necessidade dos nodes de satisfazerem a rede. Delegated Proof of Stake integrado tiraria consideravelmente o anonimato dos usuários, bem como outros sistemas de prova de armazenamento ou envio e dados.

Simplicidade:

Embora certa complexidade técnica seja em certo nível intínseca, é preciso que de forma geral isto possa ser traduzido da forma mais simples possível para que mesmo usuários leigos tenham uma visão geral do projeto e de porquê é seguro. Pelo contrário pode haver grande resistência em aceitar.

Interface amigável:

Independentemente do sistema, a interface para o chat deve ser o mais simples possível, amigável, intuitiva, leve e com um design agradável.

Features extras:

Usuários demandam muito mais do que apenas segurança e praticidade, eles também demandam funcionalidades extras diversas para dar mais vida à aplicação… nós somos humanos e não máquinas.

Podem haver

  • chamadas de voz e de video, de forma P2P.
  • Envio de fotos, videos e documentos
  • GIFS e stickers, com um banco de dados distribuído.
  • Carteiras de criptomoedas integradas.
  • Criação de grupos e canais.
  • Campo de Status
  • Compartilhamento de localização entre contatos
  • Bloqueio de contatos
  • Diferentes temas
  • Backup e sincronização automática entre diferentes dispositivos

Desenvolvedor, cripto-entusiasta e criptolibertário

Desenvolvedor, cripto-entusiasta e criptolibertário