Segurança

Seus pacotes são problema de mais ninguém além de você.

Wi-Fi é um meio compartilhado. Cafés, hotéis, alojamentos, LAN parties. Qualquer um na mesma rede pode ver o seu tráfego. O Dish foi construído com isso em mente.

Modelo de ameaças

O Dish foi construído para se manter seguro em redes que você não confia totalmente:

Pareamento

Da primeira vez que você conecta o Dish ao Satellite, o Satellite mostra um PIN de 4 dígitos no seu PC gamer. O PIN dura cinco minutos e então expira. Você o digita no Dish no seu celular, notebook ou outro dispositivo cliente.

O pareamento acontece sobre HTTPS na porta 9443, em um certificado autoassinado que o Satellite gera localmente. O transporte protege contra escutas passivas; o PIN protege contra alguém enganando o Satellite para confiar nele. O cliente envia uma chave pública X25519 de 32 bytes, o Satellite calcula o segredo compartilhado com crypto_scalarmult, e a partir daí os dois lados guardam uma chave simétrica de 256 bits derivada sem nunca ser enviada pelo fio. O PIN em si é destruído assim que o pareamento termina.

A chave compartilhada é armazenada localmente nos dois lados e usada para autenticar cada reconexão subsequente. No lado do Satellite ela vive no diretório de configuração por usuário da sua plataforma, protegida por modo para a sua conta (Windows DPAPI na V1); no lado do cliente Android ela vive nas SharedPreferences privadas do app, sandboxed pelo Android ao app Dish e excluída do backup em nuvem e da transferência de dispositivo. Nenhuma chave sai de qualquer dos dispositivos.

AEAD por pacote

Cada pacote de controle (input do controle, heartbeat, controller-add, vibração, movimento, bateria, touchpad, lightbar) é selado com ChaCha20-Poly1305 (IETF), o mesmo AEAD que TLS 1.3, WireGuard e SSH usam. ChaCha20 é rápido e de tempo constante em toda CPU com que nos importamos, incluindo o ARMv8 do Android e o Apple Silicon.

O formato de fio é pequeno e rígido: token de sessão de 4 bytes, contador de 4 bytes, ciphertext, tag de autenticação Poly1305 de 16 bytes. O token serve como dados autenticados adicionais (AAD), então trocá-lo em um pacote replay faz a verificação falhar. O nonce é o contador com zero-padding para 12 bytes, e nenhum reuso de nonce é possível sem rotacionar a sessão.

Proteção contra replay

O Satellite armazena o maior contador que aceitou em cada conexão. Qualquer pacote cujo contador seja menor ou igual a esse marco é descartado antes mesmo de chegar no backend do controle. Ciphertext capturado da sessão de ontem (ou mesmo de um segundo atrás) não pode ser reproduzido para disparar um botão apertado.

Com o que você não precisa se preocupar

Zero analytics, zero anúncios

Dish e Satellite coletam nenhum dado de uso, nenhum identificador, nenhum analytics, nenhum ID de publicidade. O único fluxo de saída tocado pela TinkerNorth no Dish para Android é o Firebase Crashlytics opt-out para relatos de crash e ANR: stack trace, modelo do aparelho, UUID de instalação, e só. Nunca entrada de controle, nunca IPs do Satellite, nunca SSIDs de Wi-Fi. Há um opt-out com um toque nas Configurações do app em Diagnósticos, honrado antes que qualquer crash possa ser carregado na próxima inicialização. O Satellite em si vem sem SDK de relato de crash de nenhum tipo. O escopo completo está na política de privacidade do Dish para Android.

Não rodamos um sistema de contas. Não há nuvem. Nada para vazar porque não há nada em um servidor para vazar.

Cadeia de suprimentos auditável

Toda versão com tag vem com:

A receita do verify-blob vive no SECURITY.md no repositório do Satellite. Se um download não bate com o checksum publicado, não instale.

Código aberto e auditável

Cada linha de código que toca criptografia vive em um repositório público. O Satellite usa libsodium; o Dish para Android usa libsodium-stable construído via NDK e o Conscrypt padrão do Android para o transporte HTTPS de pareamento. Sem criptografia caseira. Sem "escrevemos o nosso próprio ChaCha".

Distribuído sob a GNU Lesser General Public License v3.0 or later. Encontrou algo estranho? O SECURITY.md no repositório do Satellite tem a nossa política de divulgação.