Sigurnost

Vaši paketi nisu ničija stvar osim vaša.

Wi-Fi je dijeljeni medij. Kafići, hoteli, studentski domovi, LAN partiji. Svako na istoj mreži može vidjeti vaš saobraćaj. Dish je napravljen s tim na umu.

Threat model

Dish je napravljen da ostane siguran na mrežama kojima ne vjerujete u potpunosti:

Uparivanje

Prvi put kada povežete Dish sa Satellite-om, Satellite baca 4-cifreni PIN na vaš gaming PC. PIN živi pet minuta, zatim istječe. Ukucajte ga u Dish na vašem telefonu, laptopu ili drugom klijent uređaju.

Uparivanje se dešava preko HTTPS na portu 9443, na samopotpisanom sertifikatu koji Satellite generiše lokalno. Transport štiti od pasivnih prisluškivača; PIN štiti od bilo koga ko prevarom natjera Satellite da im vjeruje. Klijent šalje 32-byte X25519 javni ključ, Satellite izračunava dijeljenu tajnu sa crypto_scalarmult, i od tada oba kraja drže 256-bitni simetrični ključ izveden bez ikakvog slanja preko žice. Sam PIN se uništava nakon što uparivanje završi.

Dijeljeni ključ se pohranjuje lokalno na oba kraja i koristi se za autentikaciju svakog sljedećeg ponovnog povezivanja. Na Satellite strani, živi u per-user konfiguracijskom direktoriju vaše platforme, mode-protected za vaš nalog (Windows DPAPI na V1); na Android klijent strani, živi u privatnim SharedPreferences aplikacije, sandboxed od strane Androida na Dish aplikaciju i isključen iz cloud backup-a i prenosa uređaja. Nijedan ključ nikada ne napušta nijedan uređaj.

Per-paket AEAD

Svaki paket kontrolera (ulaz kontrolera, otkucaj, dodavanje kontrolera, vibracije, pokret, baterija, touchpad, lightbar) zapečaćen je sa ChaCha20-Poly1305 (IETF), istim AEAD koji TLS 1.3, WireGuard i SSH koriste. ChaCha20 je brz i konstantnog vremena na svakom CPU-u koji nas zanima, uključujući Android ARMv8 i Apple Silicon.

Wire format je mali i krut: 4-byte session token, 4-byte brojač, šifrovani tekst, 16-byte Poly1305 autentikacioni tag. Token služi i kao additional authenticated data (AAD), tako da zamjena u replay-ovanom paketu uzrokuje da verifikacija ne uspije. Nonce je brojač zero-paddovan na 12 byte-a, bez ponovne upotrebe nonce-a bez rolanja sesije.

Zaštita od replay napada

Satellite pohranjuje najviši brojač koji je prihvatio na svakoj vezi. Bilo koji paket čiji je brojač manji ili jednak tom high-water mark-u odbacuje se prije nego što ikada dođe do gamepad backend-a. Uhvaćeni šifrovani tekst sa jučerašnje sesije, ili čak prije jedne sekunde, ne može se ponovo pustiti da pokrene pritisak dugmeta.

Šta ne morate brinuti

Nula analitike, nula reklama

Dish i Satellite prikupljaju nikakve podatke o korištenju, nikakve identifikatore, nikakvu analitiku, nikakve advertising ID-jeve. Jedini odlazni tok koji TinkerNorth dodirne na Dish-u za Android je opcionalni Firebase Crashlytics za crash i ANR izvještaje: stack trace, model uređaja, install UUID, i to je to. Nikada ulaz kontrolera, nikada Satellite IP-ovi, nikada Wi-Fi SSID-ovi. Postoji opt-out u jedan dodir u Postavkama aplikacije pod Dijagnostika, poštovan prije nego što bilo koji crash može biti uploadovan pri sljedećem pokretanju. Satellite sam dolazi bez ikakvog crash-reporting SDK-a. Cijeli obim je na politici privatnosti Dish-a za Android.

Ne pokrećemo sistem naloga. Nema clouda. Nema šta da procuri jer ničega nema na serveru.

Lanac snabdijevanja koji se može auditovati

Svaka tagovana verzija isporučuje:

Verify-blob recept živi u SECURITY.md u Satellite repu. Ako preuzimanje ne odgovara objavljenom checksumu, nemojte ga instalirati.

Otvoreni kôd i auditibilan

Svaka linija crypto-touching koda živi u javnom repu. Satellite koristi libsodium; Dish za Android koristi libsodium-stable izgrađen preko NDK-a i Android standardni Conscrypt za HTTPS pairing transport. Bez improvizirane kriptografije. Bez „napisali smo svoj ChaCha“.

Distribuirano pod GNU Lesser General Public License v3.0 or later. Pronašli ste nešto čudno? SECURITY.md u Satellite repu ima našu politiku obavještavanja.