cable-hm0x14/cable.md
2017-06-19 23:35:39 +02:00

6.5 KiB

title author date
Cable: un servizio Signal federato
torn | [torn@autistici.org](torn@autistici.org)
gine | [gine@ventuordici.org](gine@ventuordici.org)
Hackmeeting 0x14 --- Val di Susa

Perché Signal

PGP/GPG

Classico sistema a chiave pubblica.

  • Offre:

    • Riservatezzaa
    • Autenticazione ed integrità
  • Ma non ammette:

    • Forward secrecy
    • Deniable encryption

Off-the-Record (OTR)

  • Offre:
    • Riservatezza
    • Autenticazione
    • Forward secrecy (chiavi effimere)
    • Deniability

OTR Three-step-ratchet

Three step ratchet

Limitazioni di OTR

  • Complessità: usa DSA
  • La plausible deniability richiede di disseminare le chiavi MAC usate
  • Deniability comunque limitata
  • Non adatto a comunicazioni asincrone
  • Necessita che i messaggi arrivino in ordine

OTR e comunicazioni asincrone

  • Per mandare un messaggio è necessario prima completare uno scambio di chiavi
  • Non avviene se il destinatario è offline
  • Quando il destinatario torna online il miettente potrebbe non esserlo più
  • Il sistema funziona bene solo se entrambi hanno il client aperto contemporaneamente

Double Ratchet Algorithm

  • Dopo uno scambio di chiavi iniziale, genera e mantiene delle chiavi effimere a vita breve
  • Quando possibile scambia le chiavi usando DH
  • Altrimenti genera il nuovo materiale crittografico con una funzione di derivazione

Prekeys

  • Alla registrazione il client genera 100 "prekey" e le comunica al server
  • Un altro client può iniziare una sessione usando una di queste prekey, anche se il destinatario è offline
  • Una prekey è usata solo una volta
  • La conversarione può iniziare in modo completamente asincrono

Scambio chiavi alla OTR

OTR Current

Triple Diffie-Hellman handshake

OTR Simplified

Proprietà (da Wikipedia)

The protocol provides confidentiality, integrity, authentication, destination validation, forward secrecy, backward secrecy, causality preservation, message unlinkability, message repudiation, participation repudiation, and asynchronicity.

Proprietà 2 (da Wikipedia)

The group chat protocol is a combination of a pairwise double ratchet and multicast encryption. In addition to the properties provided by the one-to-one protocol, the group chat protocol provides speaker consistency, out-of-order resilience, dropped message resilience, computational equality, trust equality, subgroup messaging, as well as contractible and expandable membership.

Progetti derivati

  • Wire (protocollo Proteus)
  • OMEMO (XMPP)
  • OLM (Matrix)
  • Proprietari: Viber, WhatsApp, Facebook Messenger (secret conversations), Google Allo (incognito mode)

Su XMPP/OMEMO

XMPP+OMEMO funziona, usiamolo! Però:

  • Usabilità
  • Autenticazione sul numero di telefono
  • La frammentazione è un problema
  • Supporto per (video)chiamate WebRTC
  • Diverso tipo di utenza
  • Evidenza sperimentale!

L'abbiamo fatto perché possiamo!

Perché non Signal?

Problemi di Signal

  • Il servizio è centralizzato
  • Dipende da servizi commerciali (Twilio, Amazon, Google, Apple)
  • Il client ha dipendenze proprietario (librerie Google)
  • Moxie ha altre priorità
  • Non è un silver bullet (vedi: trojan di stato)

La federazione in Signal

  • Server e client supportano nativamente la federazione
  • Il servizio è stato federaton con CyanogenMod da dicembre 2013 a gennaio 2016 (WhisperPush)
  • Moxie: Reflections: The ecosystem is moving
  • Moxie non intende federare
  • Implementazione parziale nei client non-mobile

Infrastruttura del servizio

Lato server:

  • Signal-Server
  • Redis, PostgreSQL
  • Twilio (alternative?)
  • Servizi Push Google e Apple
  • Amazon S3 (attachment)
  • Server STUN/TURN (WebRTC)

Notifiche e consegna messaggi

Da alcuni mesi il client Android funziona senza Google Play Services, mantenendo una connessione (WebSocket) attiva verso il server.

L'APK ufficiale contiene comunque le librerie Google.

Federazione

Una rete di server Signal federati è una rete "chiusa", alla IRC, non aperta tipo SMTP o XMPP. Questo ha vantaggi e svantaggi. Un vantaggio: meno problemi di frammentazione.

Gli utenti si registrano su uno specifico server, il quale sa che altri utenti esistono e in che server. Fa da relay.

Liberazione del Server

  • Servizi push: disabilitati. Le notifiche avvengono solo tramite WebSocket
  • Endpoint S3 reso configurabile, in modo da poter usare un qualsiasi servizio compatibili con S3
  • Server STUN/TURN: CoTURN

https://github.com/CableIM/Cable-Server

$ git diff ows/master

Liberazione del Client

  • Rimosse tutte le librerie Google (viene persa la funzione "Send my location")
  • Modificata la configurazione (URL, certificati)
  • Tutto il resto funziona, anche le chiamate!
  • https://github.com/CableIM/Cable-Android

Altre modifiche al client

Interfaccia di selezione del server (gine)

Default più stringenti

Configurazione di un server

Requisiti

Serve una macchina (virtuale) dedicata, in quanto alcuni servizi (in particolare i db) sono complessi da rendere sicuri.

Serve un IP pubblico, non per forza dedicato.

Molta pazienza: non c'è documentazione.

Incandenza, HM0x13.

Server di HacklabBO

  • Debian Stretch
  • PostgreSQL 9.6
  • Redis
  • OpenJDK 8
  • Cable-Server
  • S3: Minio (https://minio.io/)
  • Apache / nginx
  • STUN/TURN: CoTURN
  • Twilio

Federare due server

  • L'autenticazione avviene con certificato e password
  • Le directory di utenti vanno sincronizzate periodicamente
  • L'implementazione non è raffinata come il resto...
  • Vedi: file di configurazione

Conclusioni

TODO

  • Federare due server
  • Mailing list di gestione della rete federata
  • Pubblicare l'app su F-Droid
  • Documentazione
  • Fare un'icona decente

Piani futuri e idee

Registrazione con email o con identificativo univoco casuale

https://github.com/WhisperSystems/Signal-Android/issues/1085

Eliminare tutta la parte di telefonia standard e SMS

Integrazione con Tor

Client per iPhone

Codice

https://github.com/CableIM/

Signal-Android: GPLv3

Signal-Server: AGPLv3

Repository F-Droid

https://fdroid.cable.im/

Fingerprint:

4C:C3:E0:6E:72:67:4E:77:98:60:0B:AD:1B:92:D7:D6 23:71:07:A9:F4:DD:0A:04:4E:60:5E:CC:01:60:FA:21