* Slide Options                           :noexport:
#+TITLE: Conversations
#+SUBTITLE: chattare sul cellulare usando server autogestiti
#+AUTHOR: lucha, nullpointer, i-330
#+COMPANY: HackIt 15-18 Giugno 2017
#+LANGUAGE: it
#+USE_MATHJAX: false
#+ICON: images/conversations_logo.png
#+FAVICON: images/conversations_logo.png
#+EXCLUDE_TAGS: noexport
#+OPTIONS: toc:nil num:nil


* Che cos'è Conversations
  :PROPERTIES:
  :SLIDE:    segue dark quote
  :ASIDE:    right bottom
  :ARTICLE:  flexbox vleft auto-fadein
  :END:

** Che cos'è Conversations?
Conversations[fn:2] è una applicazione (app) open source (GPLv3) Android (4.0+) per chattare.

A differenza di altre app (WhatsApp, Messegner, ma anche Signal), __non__ è
legata ad un servizio centralizzato.

Invece, si basa su un protocollo **federato** chiamato XMPP (Jabber
per gli amici).

Inoltre, ci permette di **cifrare** le nostre conversazioni, così come di fare
chat di gruppo cifrate.

** XMPP: un protocollo federato

Cosa vuol dire che XMPP è un protocollo federato?

Pensiamo alle email: ognugno di noi ha un email con un diverso
provider (autistici, riseup, google, poliziadistato.it).

Se vogliamo mandare un'email a qualcuno che usa, per esempio, riseup.net,
__non__ è necessario avere noi stessi una casella di riseup! Possiamo usare la
nostra email di autistici.

Il server di autistici parlará con il server di riseup e gli consegnerà la
nostra email. Allo stesso modo chi ha ricevuto la posta potrà risponderci.

Questo non è il caso di Facebook Messenger (per esempio): se voglio mandare un
messaggio ad una mia amica su Messenger, dovró per forza registrarmi su
Facebook.

** Conversations e i server autogestiti

Questo vuol dire che possiamo utilizzare Conversations con il nostro provider
alternativo che più ci aggrada.

Noi oggi parleremo di Autistici/Inventati ma ognuno può scegliere il suo
preferito: il bello di una rete federata è che non ci dobbiamo tutti fidare di
uno stesso gestore.

Se vogliamo, possiamo anche installarci un server in casa ed essere i provider
di noi stessi!

** Conversations.im
#+BEGIN_QUOTE
Conversations isn’t trying to replace current commercial
messengers.

It will simply outlive them.

-- Daniel "inputmice" Gultsch
#+END_QUOTE

#+BEGIN_CENTER
#+ATTR_HTML: :width 700px
[[file:images/conversations.im.png]]
#+END_CENTER

** Ok, mi hai convinto, dove devo firmare?

Quello che vedremo adesso è

1. Come installare Conversations
2. Come configurare il proprio utente
3. Aggiungere i contatti e chattare
4. Fare una chat cifrata di gruppo
5. foto, audio, video
6. I rischi che corriamo usando Conversations

* Installare Conversations
  :PROPERTIES:
  :SLIDE:    segue dark quote
  :ASIDE:    right bottom
  :ARTICLE:  flexbox vleft auto-fadein
  :END:

** Come installare conversations

Dobbiamo avere uno smartphone con Android versione 4.0 o successive

Abbiamo due opzioni per installare Conversations

1. via Google Play
2. via F-Droid


** Google Play

#+ATTR_HTML: :width 250px
#+ATTR_HTML: :class float-right
[[file:images/gplay.png]]

Google Play è comodo (è già installato di default) ma dobbiamo avere
un account di Google per usarlo

Anche se Conversations è open source, su Google Play è in vendita per
una modica somma (2.39€)

In questo modo si sostiene lo sviluppo di Conversations[fn:1]


** F-Droid

F-Droid è un repository alternativo a Google Play, dove troviamo solo
programmi open source

Conversations è disponibile gratuitamente (ma ricordiamoci di fare una
donazione, se possiamo, per sostenerne lo sviluppo!)

Per utilizzare F-Droid, dobbiamo prima dire al nostro cellulare di
accettare app non provenienti da Google Play

** Impostazioni

#+ATTR_HTML: :class float-left
#+ATTR_HTML: :width 450px
[[file:images/android-external-app.png]]

#+ATTR_HTML: :class float-right
#+ATTR_HTML: :width 450px
[[file:images/android-alert.png]]

** Installare F-Droid

A questo punto possiamo installare F-Droid da https://f-droid.org

#+BEGIN_CENTER
#+ATTR_HTML: :width 700px
[[file:images/f-droid.png]]
#+END_CENTER

** Installare Conversations da F-Droid
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/f-droid-conversations.png]]

   Apriamo la app di F-Droid e da lì possiamo trovare ed installare Conversations

* Configurare il proprio utente
  :PROPERTIES:
  :SLIDE:    segue dark quote
  :ASIDE:    right bottom
  :ARTICLE:  flexbox vleft auto-fadein
  :END:

** Configurazione Base
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/Conversations_1.png]]
   Una volta installato Conversations, la prima schermata che vedremo
   sarà questa.

   "Create account" ci permetterà di creare un account del tipo
   /nomeutente@conversations.im/ per 8€/anno (+ 6 mesi gratuiti).

   Per utilizzare invece un account che già abbiamo (ad esempio una mail di autistici), sceglieremo "Use
   my own provider".

** Configurazione Base
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/Conversations_2.png]]

   Qui inseriremo il nostro utente =nomeutente@autistici.org= e la
   nostra password.

   (Se siamo preoccupati di lasciare la password sul cellulare,
   Autistici ha l'opzione di usare OTP e password specifiche per applicazioni)

** Configurazione Base
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/configurazione%20utente%20-%20avatar.png]]

   Se è la prima volta che utilizziamo Conversations, possiamo
   scegliere l'icona del nostro avatar

* La prima chat: aggiungere un contatto
  :PROPERTIES:
  :SLIDE:    segue dark quote
  :ASIDE:    right bottom
  :ARTICLE:  flexbox vleft auto-fadein
  :END:

** Aggiungere un contatto
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/schermata bianca.png]]

   Possiamo aggiungere un contatto alla nostra lista usando il tasto
   "+" che appare in alto a destra (se è la prima volta, verrà
   selezionato in automatico), e poi il tasto "+(sagoma di persona)"

** Aggiungere un contatto
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/first chat - add contact.png]]

   I contatti su Conversations sono identificati dal loro indirizzo
   XMMP, che di solito è uguale all'indirizzo email

   Per esempio, =lucha@paranoici.org= è il _Jabber ID_

** La prima chat cifrata
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/first chat - unencrypted.png]]

   Adesso possiamo mandare il primo messaggio, che *non* sarà mandato
   cifrato, ma in chiaro.

   Possiamo controllare lo stato della cifratura cliccando sul
   lucchetto (che è aperto ad indicare che la conversazione non è cifrata)

   Abbiamo varie opzioni a nostra disposizione per la cifratura: ma
   quella che vedremo oggi (e che è consigliata) è =OMEMO=

** La prima chat cifrata

	Cos'è OMEMO?
	(e perchè è consigliato?)
	#+ATTR_HTML: :class build
	- permette la cifratura di messaggi tra più persone
	- permette la cifratura di messaggi anche se uno qualsiasi di questi utenti è offline
	- permette la cifratura di messaggi sincronizzati su diversi dispositivi

** La prima chat cifrata
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/first chat - first message.png]]

   Per abilitare OMEMO, il nostro contatto dovrà per prima cosa
   accettare di conversare con noi

   Questa operazione è necessaria solo la prima volta che comunichiamo
   con una persona: poi non sarà necessario ripeterla

** La prima chat cifrata
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/first chat - encryption.png]]

   Quando il nostro contatto avrà accettato la nostra richiesta di
   comunicare, ci apparirà come possibilità l'opzione OMEMO

   Una volta selezionata, i nostri messaggi saranno cifrati!

** La prima chat cifrata
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/first chat - encrpted message.png]]

   Ora la nostra conversazione sarà cifrata: il nostro provider XMMP
   non potrà leggere i nostri messaggi!

   La cifratura avviene sul nostro cellulare, prima che il messaggio
   venga trasmesso, e viene decodificato solo una volta che arriva al
   destinatario.

   Notiamo il lucchetto chiuso ed la "spunta" di sicurezza vicino al messaggio!


* Le chat di gruppo
  :PROPERTIES:
  :SLIDE:    segue dark quote
  :ASIDE:    right bottom
  :ARTICLE:  flexbox vleft auto-fadein
  :END:

** I gruppi
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/schermata bianca.png]]

   Conversations supporta chat tra più persone, e possiamo anche farle
   cifrate!

   Per iniziare una chat di gruppo, selezioniamo lo stesso tasto "+"
   che abbiamo usato per agiungere un contatto, ma selezioniamo la
   scheda "conferences" e clicchiamo sul tasto "+(sagoma di tante persone)"

   Selezioniamo "Create conference"

** I gruppi
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/conference - create.png]]

   Poi possiamo scegliere il nome

** I gruppi
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/conference - participants.png]]

   Ed i partecipanti

** I gruppi cifrati
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/conference - unencrypted.png]]

   Come nel caso della chat singola, all'inizio non potremo scegliere
   l'opzione OMEMO per la cifratura

   Purtroppo per abilitare una chat di gruppo cifrata, è necessario che
   tutti i partecipanti abbiano prima aperto una chat individuale con ogni altro singolo
   partecipante e abbiano abilitato la cifratura OMEMO con questo

   Non è molto comodo e facilmente crea confusione, ma una volta
   iniziate le chat di gruppo funzionano relativamente bene

** I gruppi cifrati
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/conference - encrypted.png]]

   Una volta fatto ciò, è possibile selezionare l'opzione
   relativa

** I gruppi cifrati
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/conference - encrypted message.png]]

   E voilà, anche il gruppo è cifrato!


* Foto, audio, video
  :PROPERTIES:
  :SLIDE:    segue dark quote
  :ASIDE:    right bottom
  :ARTICLE:  flexbox vleft auto-fadein
  :END:

** Allegare file multimediali
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/Conversations - invio multimedia.png]]

   Possiamo allegare diversi tipi di file multimediali selezionando il menu a tendina in alto a destra
   e scegliendo il formato che ci interessa

** Foto
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/Conversations - .png]]

   Se scegliamo di inviare una foto, l'applicazione aprirà la nostra fotocamera.
   Una volta scattata la foto, selezioniamo il segno di spunta per inviarla

** Foto
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/Conversations - invio foto.png]]

   Anche i contenuti multimediali saranno ricevuti cifrati, ma saranno comunque disponibili sul dispositivo
   a meno che non vengano cancellati manualmente

** Audio
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/Conversations - invio audio.png]]

   Possiamo registrare file audio, ma per questo potrebbe essere necessario
   installare una applicazione che registra l'audio.

   Esiste anche un apposito plugin (1.22€ su Google Play, gratis su
   F-Droid)

** Audio
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/Conversations - file audio.png]]

   Anche in questo caso, i file saranno conservati sul dispositivo all'interno
   della cartella Conversations e sono da eliminare manualmente

** Video

   Conversations (al contrario di Signal) non supporta chiamate audio
   né video.

   È possibile però condividere file di qualsiasi tipo, quindi anche
   video, pdf, etc.

* Controindicazioni ed effetti collaterali
  leggere attentamente il foglietto illustrativo
  :PROPERTIES:
  :SLIDE:    segue dark quote
  :ASIDE:    right bottom
  :ARTICLE:  smaller
  :END:

** Cosa abbiamo notato testando l'app con MSAck
#+ATTR_HTML: :class build
- la sincronizzazione su diversi dispositivi non funziona ancora in maniera ottimale:
  chi utilizza conversations e gajim (su pc) non sempre riceve i messaggi su entrambe le piattaforme
  e spesso deve ricostruire le conversazioni attraverso i vari dispostivi.

** Cosa abbiamo notato testando l'app con MSAck
#+ATTR_HTML: :class build
la chat di gruppo presenta alcuni problemi:
  #+ATTR_HTML: :class build
  + non è possibile visualizzare l'ultimo messaggio letto e bisona quindi recuperarlo manualmente
  + criptare l'intera conversazione può essere un lavoro particolarmente tedioso
  + non è possibile tenere chat di gruppo se tutti i partecipanti non si "conoscono"
  + se un solo partecipante cambia telefono o reinstalla l'applicazione, ogni singolo utente deve
    nuovamente accettare la nuova chiave di questo partecipante
  + è possibile aggiungere nuovi contatti solo manualmente!
    questo significa che bisogna recuperare manualmente i dati relativi all'account che desidero aggiungere

** Che rischi corriamo se usiamo Conversations?

Nonostante tutto, ci sono dei rischi a cui ci esponiamo quando
utilizziamo Conversations:
#+ATTR_HTML: :class build
- metadati: la lista dei nostri contatti è visibile al provider che
  usiamo
- i provider dei nostri contatti: se parliamo con qualcuno su un altro
  server, quest'ultimo potrebbe loggare tutto il possibile
- i messaggi cifrati sono in chiaro sul nostro cellulare: possiamo
  perderlo, od essere infettati da un trojan.
- il falso senso di sicurezza

** Che rischi corriamo se usiamo Conversations?

Le comunicazioni sicure le fanno le persone che comunicano!

La tecnologia __non__ è in grado di garantire l'assoluta privacy. Dobbiamo quindi sforzarci di ricordare
che noi siamo responsabili di tutelare la segretezza delle nostre comunicazioni.

Come regola generale, se siamo in dubbio sull'opportunità di scrivere o meno un'informazione,
è meglio evitare di scriverla.


* Extendend track
  :PROPERTIES:
  :SLIDE:    segue dark quote
  :ASIDE:    right bottom
  :ARTICLE:  flexbox vleft auto-fadein
  :END:
  Configurazioni avanzate e dettagli

** Verificare la chiave di un contatto
   Se vogliamo essere veramente sicuri di stare parlando con la
   persona giusta, possiamo incontrarci con lei e confrontare le
   chiavi OMEMO (o possiamo usare altri canali di comunicazione:
   telefono, email cifrate, etc.)

** Verificare la chiave di un contatto
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/fingerprint - check.png]]

   Possiamo vedere la fingerpint di OMEMO dal menù "Contact details"

** Verificare la chiave di un contatto
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/fingerprint - ours.png]]

   Mentre la nostra chiave è visibile nel menù "Manage accounts"

** Configurazione con Hidden Service
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/Conversations_4.png]]

   C'è anche l'opzione di collegarsi via Hidden Service TOR, se
   abbiamo l'applicazione *Orbot* installata.

   Menu -> Expert Settings -> Connect via Tor e Extended Connection Settings

** Configurazione con Hidden Service
   #+ATTR_HTML: :class float-right
   #+ATTR_HTML: :width 250px
   [[file:images/Conversations_5.png]]

   Inseriamo =wi7qkxyrdpu5cmvr.onion= come /Hostname/ e =5222= come /Port/

* Footnotes

[fn:1] Daniel Gultsch sviluppa Conversations a tempo pieno.

[fn:2] https://conversations.im
