Saltar para o conteúdo
ciphermesh

cat o-que-o-servidor-ve

O servidor não lê uma única palavra.

O CipherMesh é uma conversa que vive no teu terminal. As mensagens são cifradas na tua máquina e decifradas na máquina de quem fala contigo. O relay pelo meio só encaminha envelopes selados — e não tem forma de os abrir.

$ npx ciphermesh@latest
O que escrevestexto simples · nunca sai desta máquina

youa chave nunca sai desta máquina

peerentão o relay só transporta ruído?

youé exactamente essa a ideia

O que o relay guarda128 B · remetente desconhecido · sala desconhecida

MC/VjmXudCTPadLwwpwrY4ChU+Q+ldw0wGcDHI4Y0Rgc

xOxBYXR0XZMc4orIkHaBj8BEMXzPcVymZfCrFvd+cEgY

KMwSBF2uYyimgKI/T6TLQ0VHxYzZwxNJ/Fau+4JlLOPd

A mesma mensagem, dos dois lados. O envelope é preenchido até um tamanho fixo, portanto o comprimento não diz nada sobre o conteúdo — e não vai assinado, portanto o relay não sabe quem o enviou.

ciphermesh --version

version
2.9.0 — publicado no npm
tests
443 a passar, verdes em cada push
commands
66 no cliente, 63 deles também sem servidor
transport
X25519 + ML-KEM-768, sealed sender, com padding
license
MIT — clona, corre, lê

Cada linha abaixo dá para confirmar no repositório.

ciphermesh /help

O que levas

Tudo isto já está no cliente hoje — não é roadmap.

ml-kem-768

Pós-quântico híbrido

X25519 mais ML-KEM-768, misturados na raiz do ratchet. Tráfego gravado hoje continua ilegível para um computador quântico futuro, e a segurança nunca fica abaixo da construção clássica.

double-ratchet

Perfect forward secrecy

Um Double Ratchet dá a cada mensagem uma chave só dela. Comprometer um dispositivo hoje não abre as conversas de ontem.

sealed-sender

Sealed sender

O relay nem chega a saber quem enviou a mensagem. Junta-lhe o padding em blocos fixos e o tráfego de cobertura opcional: deixa de distinguir conversa de silêncio.

argon2id

Salas privadas

Salas com palavra-passe em que a palavra-passe nunca sai da tua máquina. O servidor guarda apenas um verificador, em memória, e a sala morre com a última pessoa.

alt+1..9

Buffers multi-sala

Fica em várias salas ao mesmo tempo e alterna com Alt+1..9. A que sala pertence cada mensagem viaja dentro do payload cifrado — o relay nunca fica a saber.

mdns

P2P sem servidor

Dispensa o relay: os peers encontram-se por mDNS na rede local, com quase o mesmo conjunto de comandos.

ciphermesh --threat-model

O que quem aloja pode e não pode fazer

Vale a pena ser directo nisto, porque é a razão de ser do projecto.

Quem aloja pode

  • Encaminhar envelopes selados entre os peers
  • Aplicar limites de ligação e de ritmo
  • Recusar ligações de um endereço
  • Tirar o serviço do ar

Quem aloja não pode

  • Ler uma única mensagem
  • Apagar uma mensagem específica
  • Moderar uma conversa
  • Entregar conteúdo que não existe em forma legível

As salas existem apenas enquanto lá estiver alguém. Quando a última pessoa sai, a sala e tudo o que lá foi dito desaparecem — não há nada para entregar depois.

ciphermesh /verify

Cifrar é só metade

Selar a mensagem protege-a do relay. Não diz nada sobre quem está do outro lado com a chave. O CipherMesh transforma essa conferência em algo que se faz em cerca de dez segundos.

na sala

/verify peer

SAS code for peer: 8241 0937 55182

  • Confere treze dígitos

    Os dois lados derivam o mesmo código curto a partir das duas chaves públicas. Lê-o em voz alta numa chamada, ou mostra o QR que o cliente imprime. Se os códigos coincidem, não está ninguém pelo meio.

  • Nunca é escrito de volta

    O código só é comparado por pessoas, num canal que não é este. Não há nada para escrever, portanto não há nada que um atacante possa repetir.

  • O cliente lembra-se por ti

    A chave de um contacto fica fixada na primeira vez que a vês. Se mudar, és avisado antes de escreveres a mensagem seguinte — não depois.

/fingerprint mostra a tua, /trustlist lista toda a gente que já confirmaste. Nada disto está escondido num ecrã de definições.

npx ciphermesh@latest

A correr em menos de um minuto

Sem conta, sem registo, sem instalar nada de forma definitiva.

  1. 01

    Corre

    $ npx ciphermesh@latest

    Node 20 ou mais recente é tudo o que precisas.

  2. 02

    Aponta para um relay

    $ ciphermesh.de

    Escreve ciphermesh.de no prompt do servidor para usares o hub público, ou corre o teu com npx ciphermesh server.

  3. 03

    Combinem uma sala

    $ /join secret-room

    Os dois escrevem o mesmo nome de sala e está feito. Põe uma palavra-passe para a tornar privada.

ciphermesh — general
O cliente do CipherMesh a correr num terminal: a lista de salas, uma conversa cifrada e a barra de comandos.

Preferes o teu próprio? O repositório traz uma configuração Docker que obtém certificado Let's Encrypt automaticamente.

ciphermesh --hub ciphermesh.de

Agora há um sítio onde nos encontrarmos

Durante muito tempo, usar o CipherMesh exigia já conhecer alguém que alojasse um relay. Isso mudou: ciphermesh.de é um hub público, gratuito, aberto a qualquer pessoa — e é ali que a comunidade do projecto acontece.

Escreve isto no prompt
Server
ciphermesh.de
Room
general

É este o processo de entrada, por inteiro. O hub está sempre ligado, portanto ninguém tem de combinar quem levanta o servidor.

Salas que qualquer um abre

Escolhe um nome, avisa quem queres lá dentro e começa a conversar. Sem conta, sem convite, sem lista de espera.

Toda a gente cai na general

A sala por omissão é para onde ir quando só queres ver quem anda por perto. Diz olá — é o que o projecto tem de mais parecido com uma porta de entrada.

Privada assim que quiseres

Põe uma palavra-passe e a sala é tua. A palavra-passe nunca chega ao servidor: ele guarda só um verificador que não dá para reverter.

Nada sobrevive à conversa

A sala existe enquanto lá estiver alguém. Quando a última pessoa sai, acabou — sem histórico, sem arquivo, sem nada que alguém pudesse entregar.

ciphermesh.de

Para que ele existe

O hub é um ponto de encontro: serve para experimentares o CipherMesh e encontrares outras pessoas sem teres de subir um servidor primeiro. Não é um serviço de comunicação de uso geral — as salas não são casa de ninguém, não há contas, e nada fica entre sessões.

npx ciphermesh server

Se precisas de mais, o relay é teu

Um relay que tu alojas responde a ti, não depende da disponibilidade de mais ninguém, e não faz as tuas conversas passarem por uma máquina administrada por um estranho. O repositório traz a configuração Docker pronta. Para o que é importante, é a melhor resposta — e é aquela para que o software foi feito.

Alojar o meu relay

Manter o hub não transforma quem o opera em leitor. É zero-knowledge como qualquer outro relay do CipherMesh — a única diferença é que este nunca dorme.

Termos de utilização do hub

ciphermesh --panic

Os comandos que esperas nunca usar

Quase tudo no CipherMesh protege a conversa. Esta parte protege quem tem o portátil na mão.

/panic yes

Apaga tudo, já

Sessão, histórico, lista de confiança e chaves desaparecem do disco e o cliente encerra. Não há como desfazer — e é precisamente esse o objectivo.

/autolock 5

Tranca-se sozinho quando te afastas

O ecrã fica atrás da tua palavra-passe ao fim do tempo de inactividade que definires. Escreve /lock para trancar de imediato.

/ephemeral 10m

Mensagens com prazo de validade

Define uma duração e tudo o que for enviado daí em diante desaparece dos dois lados quando o tempo acaba.

/retention 7d

Guarda só o que quiseste guardar

Tudo o que for mais antigo do que a janela que escolheres é apagado do disco. E o histórico só existe se abriste a sessão com uma palavra-passe.

Nada disto depende da colaboração de um servidor. Cada um deles é o teu cliente a agir na tua máquina.

ciphermesh /plugins

Qualquer comando de que sintas falta

Todo o comando com barra que o cliente não reconhece vai parar aos teus plugins. Um plugin é um módulo ES pequeno em ~/.ciphermesh/plugins — esse ficheiro é a API inteira.

~/.ciphermesh/plugins/roll.js
export default {
  name: 'roll',
  description: 'Roll dice',
  commands: {
    roll: (args) => ({
      send: `🎲 ${d(args[0])}`,
    }),
  },
}

depois, em qualquer sala

/roll 2d20+3

  • Responde directamente na sala

    Um handler que devolve send publica o texto na sala, pelo mesmo caminho cifrado ponta a ponta de qualquer mensagem tua. Um que devolve info mostra só a ti.

  • Funciona em P2P também

    O mesmo ficheiro corre no modo P2P, onde não há servidor nenhum envolvido. Nada num plugin depende de um relay.

  • Nada é descarregado, nunca

    O CipherMesh não sincroniza, não vai buscar e não actualiza plugins sozinho. A única forma de código chegar a essa pasta é seres tu a pô-lo lá.

  • Sem sandbox — lê antes de correres

    Um plugin é JavaScript arbitrário dentro do teu processo de conversa, com acesso às tuas chaves em memória. Trata um ficheiro de plugin como tratas um curl | sh: instala só o que escreveste ou leste linha a linha.

ciphermesh --license

Gratuito, e aberto até ao fim

O CipherMesh não custa nada e nunca vai custar. O código é público sob licença MIT — incluindo a criptografia, que é precisamente a parte que nunca devias ter de aceitar por fé.

Confere tu mesmo

Toda a afirmação desta página é verificável no repositório. O protocolo e o modelo de ameaças estão documentados por inteiro.

Traz uma ideia

Encontraste um bug, queres uma funcionalidade, discordas de uma decisão de desenho? Abre uma issue. Pull requests também são bem-vindos — o guia de contribuição explica o processo.

ciphermesh --thanks

Apoia o projecto

O CipherMesh é feito e mantido em tempo livre, e o hub público corre num servidor que custa dinheiro real todos os meses. Se te for útil, um café ajuda a manter os dois de pé.

Totalmente opcional. Nada no CipherMesh está atrás de uma paywall, e nunca vai estar.

Paga-me um café