Introduzione

  

Sui telefoni, sui  fax e sui cellulari  transitano spesso informazioni di natura economica o strategica, di valore talvolta inestimabile, ma poco protette; si va dai rischi enormi dell’intercettazione dolosa delle telefonate, a quelli altrettanto seri per diffusione involontaria di dati sensibili e riservati, a causa di errori nella digitazione di numeri, ai fastidi o problemi conseguenti la casuale interconnessione di altri utenti sulla stessa linea per guasti o malfunzionamenti elettronici.

 

Le conversazioni che si svolgono attraverso un telefono sono, quindi, molto meno private di quanto generalmente si pensi. Come se non bastasse, la tecnologia nel riconoscimento vocale ha fatto passi da gigante negli ultimi anni: i servizi segreti sono in grado di monitorare su larga scala le conversazioni telefoniche, alla ricerca di "parole" interessanti (un po' come avviene per il monitoraggio dei messaggi su Internet).

 

Qualsiasi discussione generale sulla comunicazione telefonica fa quindi alcune assunzioni:

 

punto elenco

esistono delle minacce reali da parte di chi ha mezzi tecnici e finanziari per raccogliere ed ottenere informazioni da  un sistema di comunicazione;

punto elenco

le informazioni trasmesse potrebbero avere un certo valore (personale, finanziario, intellettuale, ecc.) per altre persone oltre che il trasmittente e il ricevente.

 

Il “ficcanaso medio” con una radio analogica o un intercettatore telefonico potrebbe non essere una minaccia per un moderno canale di comunicazione digitalizzato; in ogni caso la maggior parte delle persone sarebbe d’accordo che il “ficcanaso medio” non rappresenta la loro minaccia.

Quindi la digitalizzazione da sola protegge il nostro canale vocale dagli “ascoltatori casuali” il cui budget non include i prodotti di monitoraggio necessari, commercialmente disponibili.

 

Qualunque circuito vocale può essere protetto, invece, ad un certo livello utilizzando l’appropriato prodotto di cifratura. La decisione su quale prodotto è il più adatto per un’applicazione particolare dipende dalle caratteristiche del canale e dal livello di sicurezza necessario.

 

Il nostro lavoro è articolato in quattro paragrafi. In quello che segue sono illustrate le caratteristiche dei vari metodi per la cifratura della voce. Dopo una breve discussione sui vari modelli, si mostra come il metodo più sicuro ed efficiente per comunicare consista nell'utilizzare un software per la cifratura digitale della voce. I due paragrafi successivi sono, quindi, dedicati all'analisi dettagliata di due strumenti di questo tipo: Speak Freely e Nautilus. 

Per ognuno di questi viene presentato uno scenario tipico da cui si parte per analizzare gli strumenti utilizzati da ciascun software per una comunicazione sicura in tale scenario. Quindi, la presentazione è completata con due sottoparagrafi relativi alla procedura di installazione dei pacchetti e alla descrizione di tutte le funzionalità offerte, insieme alla sintassi del loro uso. Per Speak Freely viene descritto, in più, l'uso di un'interfaccia grafica.

L'ultimo paragrafo, infine, si concentra sull'analisi comparata dei due software presi in esame, su diversi aspetti: funzionalità, sicurezza, aspetti sulla compressione e sulla cifratura, ecc.  

  

 

 

I meccanismi di protezione usati per la trasmissione della voce si possono dividere in due categorie:  cifratori analogici e cifratori digitali.

 

 

 

CIFRATORI ANALOGICI

 

I più remoti metodi di cifratura analogica erano niente di più che Voice Scramblers con una minima sicurezza contro ogni attacco aggressivo. 

Per difendersi dalle intercettazioni telefoniche, già negli anni 70 sono nati apparecchi noti con il nome di scramblers. Questi alterano semplicemente la voce in modo da ridurre l'intelligibilità per chi monitora il canale.

I due metodi principali di scrambling consistono nel dividere il segnale in intervalli di tempo e manipolare il segnale in tali intervalli (Time Domain Scrambling), o nel dividere lo spettro del segnale in intervalli di frequenza e manipolare le frequenze (Frequency Domain Scrambling).

 

Il Time Domain Scrambling implica la manipolazione del segnale che deve essere trasmesso in blocchi di tempo delimitati e la taglia del blocco determina il numero di permutazioni che si possono effettuare. Un blocco grande permette più permutazioni e quindi offre maggiore sicurezza. Comunque, questa tecnica richiede un ritardo nella trasmissione del segnale direttamente proporzionale alla dimensione del blocco, cosicché maggiore sicurezza significa grande ritardo nella trasmissione.

Poiché in genere si richiede un minimo ritardo e un’alta qualità della voce, questo metodo non è molto utilizzato. Inoltre il Time Domain Scrambling offre una bassa qualità di voce e il ritardo può introdurre effetti eco.

  

Il Frequency Domain Scrambling comprende diverse forme. L’inversione della frequenza è la forma base e consiste nell’invertire le alte e le basse frequenze. Uno dei problemi dell’inversione è che le caratteristiche della voce non sono significativamente cambiate (il suono è semplicemente confuso più che alterato). Ascoltatori esperti possono persino essere in grado di decodificare il messaggio senza l’aiuto di un decodificatore.

 

In generale quindi possiamo dire che le tecniche di scrambling possono essere rotte con uno sforzo relativamente piccolo rispetto allo sforzo necessario per rompere un flusso digitale di informazione crittografato.

 

L'avvento di tecniche più sofisticate per il processo della voce ha permesso di utilizzare cifratori analogici più complessi che possono essere visti come un ibrido tra gli scramblers e i cifratori digitali. I cifratori analogici digitalizzano il segnale vocale, ma trattano la voce in modo tale che il segnale analogico trasmesso mantiene molte delle caratteristiche originali.

 

 

CIFRATORI DIGITALI

 

Il metodo più economico, sicuro ed efficiente di effettuare telefonate cifrate, oggi, è senz'altro munirsi di un apposito software per PC, supponendo di possedere già accessori sempre più diffusi quali modem, scheda sonora, nonché ovviamente un microfono e un paio di cuffie. Il software si occupa di digitalizzare la voce proveniente dal microfono in dati che vengono poi subito compressi, cifrati e trasmessi via modem. La nostra voce diventa quindi una sequenza di bit che, dopo compressione e cifratura, sono pronti per essere inviati al nostro  interlocutore. Questi programmi sono molto più efficaci sia degli scramblers che dei cifratori analogici: ci danno la possibilità di cifrare le nostre telefonate con sistemi di crittografia robusta, che cambiano il segnale originale in modo tale che nessuna delle caratteristiche originali venga conservata, e che un tentativo di ricostruire il segnale originale debba essere basato su un approccio di forza bruta (tentare ogni possibile chiave fino a quando se ne trovi una che risulti in un flusso di voce intelligibile). Questo è un compito altamente impraticabile se non per un avversario con straordinarie risorse, il che ci rende ragionevolmente tranquilli.

Disponendo di una connessione alla rete è inoltre possibile evitare telefonate a lunga distanza, collegandosi al più vicino provider e inviando i pacchetti direttamente all'indirizzo IP dell'interlocutore, e viceversa. In pratica, se Pippo, da Topolinia, vuole parlare con Topolino, in vacanza a Roma, non ci sarà bisogno di una telefonata intercontinentale: Pippo si collegherà al proprio solito fornitore di accesso Internet a Topolinia e lo stesso farà Topolino dal luogo in cui si trova - entrambi pagheranno quindi solo la tariffa urbana. La voce di Pippo verrà digitalizzata dalla scheda audio, cifrata dal software e infine inviata dal modem al provider urbano. Da Topolinia a Roma la voce di Pippo correrà attraverso Internet e una volta giunta al provider di Topolino subirà il corrispondente processo di decodifica fino a tornare di nuovo udibile dalle cuffie di Topolino. Il meccanismo funziona e grazie alla crittografia la riservatezza è assicurata, anche se in pratica le telefonate via Internet lasciano un po' a desiderare in fatto di qualità audio e velocità di risposta...

Comunque, citando Philip Zimmermann, autore di PGPfone (uno di questi software per la cifratura digitale della voce), "esso (il software di cifratura digitale) vi permette di sussurrare nell'orecchio di qualcuno, anche se quell'orecchio si trova a migliaia di chilometri, senza essere uditi da terze persone".     

 

Nei paragrafi che seguono vengono presi in esame due cifratori digitali:

 

punto elenco

Speak Freely

punto elenco

Nautilus.

 

Prima di procedere è importante specificare che questi sono programmi di crittografia vocale distribuiti gratuitamente con codice sorgente. Alcuni programmi simili sono stati distribuiti senza sorgenti, così che la loro sicurezza non può essere esaminata. Si hanno dei seri riserbi contro distribuzioni di programmi di sicurezza senza sorgenti, perché programmi di questo tipo hanno bisogno di essere riesaminati attentamente da quante più persone è possibile. Si consideri, ad esempio, il famoso bug di sicurezza di Netscape (ora riparato) dove il generatore di numeri casuali interno prendeva come seme l’ora di sistema considerando sempre numeri prevedibili a causa della bassa entropia. In questo modo i crackers potevano leggere da Netscape le transazioni effettuate con carta di credito usando solo pochi minuti per la computazione!

 

 

 

Speak Freely

 

Consideriamo due utenti Pippo e Topolino che vogliono effettuare una comunicazione telefonica sicura.

Speak Freely è composto da una suite di diversi eseguibili con diverse funzionalità.

Per descrivere lo scenario della funzionalità di base, supponiamo che l’utente Topolino sia un server e che l’utente Pippo voglia comunicare con esso.

Speak Freely è un programma di crittografia a chiave simmetrica. Ciò significa che gli utenti devono concordare un'unica chiave segreta, detta chiave di sessione, con la quale cifrare la conversazione. Questo può avvenire in tre modi: tramite accordo verbale, tramite scambio su canale protetto della chiave generata casualmente da Speak Freely oppure tramite l’interazione con PGP. Dopo che è stata decisa la chiave, la conversazione può essere prima compressa con diversi algoritmi e poi cifrata attraverso l’algoritmo DES parzialmente modificato oppure attraverso gli algoritmi IDEA, AES o Blowfish. A questo punto la comunicazione è avviata in modalità half duplex e può avvenire solo da Pippo verso Topolino. E' bene specificare che questo è solo uno dei possibili scenari di Speak Freely, anche se tutte le altre funzionalità hanno in comune con quella appena descritta le fasi di scambio della chiave, compressione e cifratura.

 

Passiamo quindi ad esaminare i dettagli dell'applicazione.

 

La versione di Speak Freely da noi analizzata (Speak Freely 7.6) è disponibile sia in ambiente Windows (3.11, W95, NT) che su Unix e assicura la comunicazione tra le due piattaforme.

Le richieste hardware non sono particolarmente esose (è necessario un 486 ad almeno 50 Mhz o, meglio, un Pentium). Pur essendo la telefonia crittata il principale obiettivo di questo software, è da segnalare l'esistenza di una versione senza questa caratteristica, detta "Spook Freely", nata per essere utilizzata in quelle nazioni in cui crittare le conversazioni è illegale.

Speak Freely dispone di compressione audio tale da poter essere utilizzato efficacemente con modem "lenti"; è ovvio che in questo caso ci deve essere un compenso della velocità da parte del processore.

Per l’utilizzo di questo software, su Linux, occorre avere la parte audio installata e funzionante. In pratica il sistema deve essere in grado di suonare file .au, e di registrare dal microfono della scheda audio. Il software infatti utilizza /dev/audio come device di I/O e presume che sia up & running.

E' inoltre necessario prestare attenzione al modello di scheda audio che si possiede: non tutte possono trasmettere e ricevere contemporaneamente (full duplex) ma solo l'una o l'altra cosa per volta (half duplex). In ogni caso il software di Speak Freely permette entrambe le funzionalità.

Speak Freely consente la compressione dei dati necessaria per non intasare la banda disponibile. Il problema non si pone quando telefoniamo in una rete locale ad alta velocità ma quando i pacchetti di dati devono viaggiare attraverso l'enorme rete Internet dove possono incontrare colli di bottiglia strettissimi. E' quindi necessario operare una compressione della voce digitalizzata, specialmente se disponiamo di una connessione a Internet "lenta". E' comunque possibile non utilizzare la compressione e ciò richiede una banda di circa 8000 cps (caratteri per secondo), equivalente a circa 65000 bps, velocità raggiungibile facilmente in rete locale. Di default è abilitata la compressione GSM, lo stesso algoritmo utilizzato dai più recenti telefoni cellulari; esso riduce ad un quinto le pretese di banda che risultano essere di circa 1650 cps.

Un ulteriore algoritmo per la compressione è ADPCM (Adaptive Delta Pulse Code Modulation) che riduce la banda richiesta a 4000 cps ed è indicata per quei computer troppo lenti per utilizzare la GSM.

La compressione LPC (Linear Prediction Coding), invece, richiede un processore di elevata velocità dotato di coprocessore matematico e può ridurre i dati di un fattore 12 (650 cps), pur peggiorando in qualità.

Infine la compressione LPC10Rn (introdotto dal DoD Standard 1015/NATO-STANAG-4198) consente di comprimere i dati di 26 volte (fino 346 cps) e anch'essa richiede processori veloci.

La seguente tabella riassume i tipi di compressione appena descritti.

Compressione Bytes per second Richiede una CPU veloce? Qualità suono
No compressione 8000 No Ottima
ADPCM 4000 No Buona
GSM 1650 Si Buona
LPC 650 Si Dipende...
LPC10Rn 346 Assolutamente si Scarsa

 

Per quanto riguarda la cifratura del flusso dati in transito essa può avvenire con vari algoritmi e la scelta di quale utilizzare è demandata agli utenti.

Il primo algoritmo di cifratura è il DES leggermente modificato: le permutazioni iniziale e finale, che non contribuiscono alla sicurezza dell'algoritmo, non sono eseguite. La chiave fornita dall'utente può essere di lunghezza arbitraria, ma successivamente viene modificata applicando l'algoritmo MD5 al cui message digest vengono applicate operazioni di XOR e AND per renderlo di lunghezza pari a 56 bits. La modalità operativa utilizzata è il CBC (Cipher Block Chaining).

Un altro algoritmo di cifratura utilizzato da Speak Freely è AES. Per la chiave abbiamo due possibilità: utilizzare una chiave di lunghezza arbitraria che successivamente viene manipolata con MD5, oppure specificare una chiave in forma esadecimale a 128, 192 o 256 bits.

Infine gli altri algoritmi di cifratura sono IDEA (International Data Encryption Algorithm) e  Blowfish, utilizzati senza modifiche e con chiave fornita dall'utente di lunghezza arbitraria modificata tramite l'algoritmo MD5.

 

Un'ulteriore caratteristica di Speak Freely è l'utilizzo di tre diversi protocolli di trasporto:

 

Ø  un protocollo proprietario "Speak Freely"

Ø  il protocollo RTP (Real Time Protocol - RFC 1889 e RFC 1890), che consente il dialogo con altre applicazioni audio che supportino un subset comune di comandi RTP.

Ø  il protocollo VAT (Visual Audio Tool) dei Lawrence Berkeley Laboratory.

 

Speak Freely non è un programma di crittografia a chiave pubblica, quindi gli utenti non avranno la classica coppia di chiavi pubblica e privata ma concorderanno un’unica chiave segreta, detta chiave di sessione (session key), con la quale crittare la conversazione. Se un malintenzionato riesce ad impossessarsi della nostra chiave di sessione potrà ascoltare la conversazione o addirittura intervenire a nostra insaputa.

Concordare la chiave di sessione e tenerla segreta è dunque il passaggio più delicato.

La chiave di sessione è una sequenza di byte (fino a 255).

Oltre al normale accordo verbale sulla session key segreta da utilizzare, due utenti possono utilizzare anche la funzione di Speak Freely che coopera con PGP: dopo aver specificato il nome e la chiave pubblica PGP del destinatario viene generata una session key di 128 byte con procedimento casuale che verrà automaticamente crittata con PGP e altrettanto automaticamente sarà spedita all’interlocutore.

Speak Freely può anche generare “manualmente” una session key: spetterà poi all’utente farla pervenire al destinatario prima che abbia inizio la conversazione magari tramite un normale messaggio crittato.

 

La versione per Unix consente anche la configurazione di un Voice echo server, un Voice on demand server e un server di ricerca utenti attivi sulla rete.

 

Prima di procedere, è bene specificare che tutte le possibilità esaminate in questo paragrafo insieme ad altre ancora, sono descritte più in dettaglio nelle pagine del manuale. In queste vengono anche analizzati gli eseguibili del software con particolare riferimento al loro uso e tutte le opzioni possibili. 

 

 

Installazione di Speak Freely

 

Per  compilare e installare  Speak Freely  7.6a in ambiente Unix e' necessario editare il file Makefile per settare le opzioni per il compilatore C, e i flag e le opzioni per il proprio sistema. E' da notare che in questo file sono già inclusi settaggi  per numerose piattaforme; chi installa deve quindi semplicemente togliere i commenti ai  flag necessari al proprio sistema.

 

Per la compilazione di Speak Freely 7.6a sulle nostre macchine, su cui era installato il sistema operativo Linux SuSE 8.0 è stato necessario installare attraverso Yast2 i pacchetti indicati nella seguente tabella.

 

 

Descrizione

Nome pacchetto

Gruppo Pacchetti

Compilatore gcc

gcc

Development/Languages/C and C++

Utility make

make

Development/Tools/Building

Tools di sviluppo, headers, librerie statiche per New curses

ncurses_devel

z??

 

 

Completata l'installazione di questi pacchetti, si può passare alla vera e propria installazione dell'applicazione, i cui sorgenti sono contenuti nel file speak_freely-7.6a.tar.gz (download).

 

 

  1. Posizionarsi  nella  directory  in cui si vuole  creare la  directory di costruzione per Speak Freely e  copiare qui il file:

                    speak_freely-7.6a.tar.gz

  1. Scompattare il file 'speak_freely-7.6a.tar.gz'

                    tar xvfz speak_freely-7.6a.tar.gz

  1. Posizionarsi nella directory speak_freely-7.6a

                    cd speak_freely-7.6a

  1. Editare il file Makefile se necessario (nel ns. caso non si e' resa necessaria alcuna modifica)

  1. Avviare la compilazione dell'applicazione dopo aver acquisito privilegi di super utente

                    su          /*Attenzione!!! richiede password di root*/

                    make install

                

Se l'installazione è stata completata correttamente, nella directory corrente sono stati creati i seguenti eseguibili:

·    sfecho

·    sfmike

·    sfspeaker

·    sfreflect

·    sflwl

·    sflwld

·    sfvod

·    sflaunch

 

e per ognuno di essi è stato creato anche il relativo manuale. Quindi per avere maggiori informazioni sulle particolari  opzioni disponibili per ognuno di essi basta digitare da tastiera:

 

man nome applicazione

 

 

Manuale Speak Freely

 

Speak Freely permette di eseguire varie operazioni e fornisce un manuale con la  descrizione dei comandi per effettuare tali operazioni. Tali comandi sono:

 

 

sfspeaker

sfmike

sfecho

sfreflect

sflwl

sflwld

sfvod

sflaunch

 

 

 

Interfaccia Grafica

 

Prima di usufruire dell'interfaccia grafica c'è bisogno di installare un ulteriore pacchetto. La procedura d'installazione è la seguente:

 

punto elenco

Posizionarsi nella directory

                             cd speak_freely-7.6a/CONTRIB/xspeakfree-0.8.1.b/

 

punto elenco

Digitare da linea di comando

 

                            ./install.sh <install path>

 

        <install path> deve essere la directory in cui si deve installare xspeakfree,

        ad esempio  ./install.sh /usr/local

 

L'interfaccia grafica è attivata eseguendo il comando xspeakfree contenuto nella directory speak_freely-7.6a/CONTRIB/xspeakfree-0.8.1.b/bin/ del pacchetto Speak Freely e si presenta nel seguente modo:

 

 

Verificato che microfono e casse siano effettivamente collegati per stabilire una connessione dal menù Connection selezionare New e digitare l'indirizzo IP del destinatario.

 

 

Effettuata la connessione, l'interfaccia grafica si presenta nel seguente modo:

 

 

Il destinatario effettua le stesse operazioni per connettersi al mittente.

A questo punto sia il mittente che il destinatario possono ricevere e trasmettere audio in modalità half duplex.

Ad esempio, il mittente (198.10.0.2 nel nostro caso) può decidere di trasmettere e per farlo clicca sul bottone Open:

 

 

Il destinatario (198.10.0.1) è messo in ascolto automaticamente e l'interfaccia grafica si presenta così:

 

 

 

Per invertire il verso della comunicazione mittente e destinatario si scambiano i ruoli.

Dal menù Options è possibile selezionare i diversi metodi per la compressione, la cifratura e lo scambio della chiave di sessione, descritti in precedenza.

 

 

Nautilus

 

Il nome di Nautilus viene dal noto romanzo di Jules Verne, 20000 Leghe sotto i mari; mentre il sottomarino del Capitano Nemo affondava le navi, il nostro Nautilus è nato per "affondare" il progetto del Clipper Chip, lo standard nazionale di cifratura proposto a partire dal '93 da Clinton, largamente osteggiato poichè lascia al Governo USA la possibilità di decifrare le conversazioni.

Nautilus può girare su computer molto vecchi (la richiesta minima è un 386 a 25Mhz) e questo è senz'altro un punto a suo favore. Altro fattore da non trascurare è che a Nautilus può bastare una connessione modem a bassa velocità: 14.400 bps sono più che sufficienti, ma il programma può operare anche a 9.600 o a 7.200; la versione provata (1.5) dispone anche di un protocollo di compressione avanzato che necessita di una connessione a soli 4.800 bps, il che è ottimo soprattutto nell'ambito di una connessione cellulare, in genere disturbata e a bassa velocità. Chiaramente valgono tutte le considerazioni già espresse per Speak Freely: una maggiore compressione chiede meno banda, ma necessita di una CPU più veloce e la qualità della voce ne risente. Nautilus può girare su PC (con MS-DOS, Linux o Solaris X86) o su una Sun Sparcstation (con SunOS o Solaris).

Il funzionamento di Nautilus è simile al programma già analizzato più indietro.

A connessione avvenuta avviene la negoziazione della session key tramite l'algoritmo Diffie-Hellman oppure attraverso una passphrase segreta condivisa. Il protocollo DH è molto semplice e segue esattamente lo standard.

Diffie-Hellman non ha bisogno di condividere chiavi segrete, ma può essere vulnerabile ad un’intercettazione sul cavo di connessione. Per sconfiggere questo attacco, Nautilus stampa un codice di autenticazione (8 cifre esadecimali) come parte dello scambio di chiave. L’utente legge semplicemente questo codice (a voce) all’altro utente che lo verifica rispetto al codice visualizzato sullo schermo. Se i codici da ambo i lati coincidono la conversazione è sicura.

Di seguito riportiamo la descrizione del protocollo usato per derivare una session key da una passphrase.

 

  1. Ciascuno degli utenti (mittente e destinatario) genera due differenti chiavi K1 e K2. Queste due chiavi vengono generate facendo l'hash della passphrase concatenata con il salt S1 per K1 e con il salt differente S2 per K2. I due salt sono definiti nel codice e pertanto sono uguali per gli utenti che comunicano (mittente e destinatario).

  2. Un generatore è usato per generare i seguenti valori casuali (chiamati key exchange structure) a ciascun estremo:

 

KEY EXCHANGE STRUCTURE

 

 

  1. La porzione indicata della key exchange structure è cifrata usando la modalità CFB. Il "SESSION IV" è usato come vettore di inizializzazione per questa operazione. Il mittente cifra la sua key exchange structure con la chiave K1 e il destinatario la sua key exchange structure con la chiave K2.

  1. Il mittente invia la sua key exchange structure cifrata al destinatario. Il destinatario risponde con la propria key exchange structure cifrata.

  2. Entrambi gli utenti decifrano la key exchange structure ricevuta dall'altro lato usando le chiavi K1 e K2, nel modo appropriato.

  3. Entrambi fanno lo XOR della key exchange structure con la key exchange structure decifrata ricevuta dall'altro endpoint.

  4. L' IV di trasmissione e ricezione e la session key sono estratti dalla struttura risultante dall'operazione al passo 6.

  5. La session key è l'input di una funzione hash il cui output è la chiave del cifrario scelto.

 

Anche in Nautilus è possibile scegliere tra diversi algoritmi di compressione e tra diversi metodi di cifratura: Triplo-DES, Blowfish e IDEA eseguiti in modalità CFB (Cipher Feedback). La conversazione avviene soltanto in half-duplex: è necessario premere un tasto per passare dalla modalità "parla" alla modalità "ascolta". Tutti i comandi vanno dati da command-line, non c'è interfaccia grafica.

 

Passiamo ora ai dettagli dell'applicazione.

 

Nautilus include quattro algoritmi di compressione del suono.

Tre di questi algoritmi usano una tecnica chiamata "switched prediction" che dà un buon tradeoff tra la velocità della CPU e la qualità del suono a un dato bit rate. I nomi di questi algoritmi (chiamati anche "codici") sono SP64, SP85, and SP124. I numeri si riferiscono ai bit rates usati: approssimativamente 6400, 8500, and 12400 bits per second rispettivamente. Ovviamente i codici con un tasso più alto suonano meglio. Il codice di Nautilus più nuovo, LPC10, usa il Linear Predictive Coding, e comprime il suono a 2400 bps con una qualità buona quasi quanto l'SP124. Questo però comporta un tempo di CPU molto maggiore.

Nautilus fornisce tre cifrari: Triplo-DES, Blowfish, e IDEA. Blowfish è il più veloce e probabilmente il più sicuro dei tre. Ma poichè è relativamente nuovo, c'è una maggiore possibilità di attacchi. Il Triplo-DES è il più testato ma il più lento. IDEA, come Blowfish, è anch'esso nuovo, è più veloce del Triplo-DES ma più lento di Blowfish.

Blowfish è il cifrario di default di Nautilus per la sua velocità, sicurezza e perché è libero da licenza.

 

 

 

Installazione Nautilus

 

Per poter compilare Nautilus in ambiente LINUX è necessario disporre di un compilatore ANSI C, del file nautilus-1.5a.tar (download) contenente i sorgenti di Nautilus  e del file rsaref20.tar.Z (download) contenente i sorgenti della libreria RSAREF20 della RSA Laboratories.

Per la compilazione di Nautilus sulle nostre macchine, su cui era installato il sistema operativo Linux SuSE 8.0 è stato necessario installare attraverso Yast2 i pacchetti indicati nella seguente tabella:

 

 

Descrizione

Nome pacchetto

Gruppo Pacchetti

Compilatore gcc

gcc

Development/Languages/C and C++

Utility make

make

Development/Tools/Building

 

 

Completata l'installazione di questi pacchetti, si può passare alla vera e propria installazione dell'applicazione eseguendo le seguenti operazioni:

                 

 1) Posizionarsi nella directory in cui si vuole creare la directory di costruzione per Nautilus e copiare  qui i file:

                nautilus-1.5a.tar.gz e

                rsaref20.tar.Z

 

 2) Creare una directory di costruzione 'Nautilus'

                mkdir Nautilus

 

 3) Spostare i file 'nautilus-1.5.tar' e 'rsaref20.tar.Z' nella directory Nautilus

                mv nautilus-1.5a.tar.gz Nautilus/nautilus-1.5a.tar.gz

                mv rsaref20.tar.Z Nautilus/rsaref20.tar.Z

 

 4) Posizionarsi nella directory Nautilus

                cd Nautilus          

               

 5) Scompattare il file 'nautilus-1.5.tar'

                tar xvfz nautilus-1.5a.tar.gz

 

 6) Scompattare il file 'source-1.5a.tar'

                tar xvf source-1.5a.tar

 

 7) Posizionarsi nella directory nautilus.15a

                cd nautilus.15a

 

 8) Creare una directory di costruzione 'rsaref'

                mkdir rsaref

 

 9) Spostare in essa il file 'rsaref20.tar.Z'

                mv ../rsaref20.tar.Z rsaref/rsaref20.tar.Z

 

10) Posizionarsi nella directory rsaref

                cd rsaref

 

11) Scompattare il file 'rsaref20.tar.Z'

                uncompress rsaref20.tar.Z

 

12) Scompattare il file 'rsaref20.tar'

                tar xvf rsaref20.tar

 

13) Scompattare il file 'rsaref.tar'

                tar xvf rsaref.tar

 

14) Posizionarsi nella sottodirectory install/unix

                cd install/unix

 

15) Copiare il file 'makefile' nella directory di livello superiore

                cp makefile ../makefile

 

16) Spostarsi nella directory di livello superiore

                cd ..

 

17) Costruire la libreria rsaref

                make rsaref.a

 

18) Posizionarsi nella directory di livello superiore 'nautilus.15a'

                cd ../../

 

19) Rinominare il file makefile.unx a Makefile

                mv makefile.unx Makefile

 

20) Aprire il file ntp_udp.c con un editor (es. vi)

                vi ntp_udp.c

                 

21) Modificare la linea 47 nel modo seguente:

                linea orginale: extern char *sys_errlist[];

                linea modificata: extern const char * const sys_errlist[];

 

22) Digitando 'make' verranno presentate una lista di piattaforme su cui è possibile costruire Nautilus

 

23) Costruire Nautilus per il Sistema Operativo Linux

                make linux            

 

24) Se l'installazione é avvenuta correttamente allora é stato prodotto l'eseguibile 'nautilus'

 

 

Manuale Nautilus

 

Per effettuare una chiamata con Nautilus il chiamante deve conoscere il numero di telefono del ricevente, oppure, per una connessione modem-to-modem, il nome dell’host o l’indirizzo IP per un collegamento Internet. Il ricevente dovrebbe avviare il programma per  primo, in modo che il computer sia in attesa per stabilire la connessione.

Prima di effettuare una chiamata bisogna essere sicuri che il ricevente sia disponibile ad accettarla. Il ricevente deve avviare Nautilus in attesa di risposta, producendo il messaggio a video “Waiting for incoming Nautilus connection”.

Successivamente, bisogna assicurarsi che il microfono sia collegato al computer. 

Poi, si può eseguire il seguente comando per un collegamento modem-to-modem sotto Unix o Linux:

 

bash$ nautilus -o -p /dev/modem 12025551212

 

l’opzione “-o” consente a Nautilus di effettuare una chiamata. L’opzione “-p” specifica il path del modem. Infine l’ultimo argomento sulla linea di comando è il numero di telefono da comporre.

La linea di comando per una chiamata via Internet (solamente per sistemi Linux/Unix), invece, è:

 

bash$ nautilus -o -i archie.sura.net

 

l’opzione “-o” consente a Nautilus di effettuare la chiamata, “-i” specifica l’utilizzo di Internet. L’ultimo argomento sulla linea di comando è il nome o l’indirizzo della macchina del ricevente.

 

È importante che il microfono sia collegato e acceso prima di lanciare Nautilus, perché Nautilus usa il flusso audio che entra nel microfono per inizializzare il generatore di numeri casuali col quale crea le sue chiavi di sessione.

Nautilus fa brevemente questa campionatura ed inizializzazione dopo avere stampato il messaggio d’avvio. Calcola, poi, una stima dell’entropia, e avverte se pensa che il valore sia troppo basso. Se non c’è abbastanza entropia, la sicurezza di Nautilus può essere compromessa. È probabile che questo accada se si è privi o se sia spento il microfono, o se non c’è abbastanza suono che giunge al microfono per dare a Nautilus l’entropia di cui esso ha bisogno. La quantità di suono richiesto dipende dalla sensibilità del microfono.

Per accettare una chiamata entrante, si deve usare la seguente linea di comando:

 

bash$ nautilus -a -p /dev/modem

 

L’opzione “-a” consente a Nautilus di accettare la prossima chiamata entrante, e “-p” specifica il path del modem.

Ecco la versione di Internet della linea di comando:

 

bash$ nautilus -a -i

 

L’opzione “-a” consente la ricezione della prossima chiamata in arrivo, mentre “-i” specifica l’utilizzo di internet.

 

Digitando da linea di comando “nautilus -h” si visualizzerà l’elenco di tutte le opzioni del programma disponibili insieme a brevi descrizioni del loro uso. Inoltre specificando l’opzione “-v” verranno visualizzate le informazioni relative ai parametri di Nautilus.

 

La figura seguente illustra il comportamento di Nautilus:

 

 

Analisi Comparata di Speak Freely e Nautilus

 

I software che consentono la trasmissione della voce su reti di tipo IP non sono una cosa nuova. E' infatti da qualche tempo che sono presenti dei software, alcuni commerciali ed altri di tipo freeware che consentono di "fare a pezzi" la voce e impacchettarla in un formato adatto per la trasmissione su Internet. Di solito questi software fanno uso del protocollo UDP e si sono diffusi tra gli utenti della rete nella speranza di effettuare conversazioni telefoniche a costo praticamente nullo.

 

Tra tutti i software presenti sul mercato molti non tengono in conto un'aspetto interessante: la privacy della comunicazione. In pratica la capacità di codificare il flusso di informazioni trasmesso in modo da evitare che durante il transito in rete sia possibile ascoltare in modo fraudolento i messaggi scambiati da due o più interlocutori.

Per questo motivo i software che analizzeremo sono sembrati veramente interessanti : chiunque abbia bisogno di privacy nelle sue chiamate telefoniche dovrebbe considerare l'uso di Nautilus o Speak Freely che, oltretutto, sono i primi programmi di questo tipo che sono distribuiti gratuitamente con il codice sorgente.

 

Dopo aver esaminato le caratteristiche  salienti dei due programmi  e dopo averli testati attentamente, analizziamo le similitudini e le eventuali differenze da diversi punti di vista:

 

punto elenco

Facilità d'installazione

punto elenco

Funzionalità

punto elenco

Sicurezza

punto elenco

Facilità d'uso

punto elenco

Prestazioni.

 

Facilità d'installazione

La fase di installazione dei due programmi per un sistema operativo Unix/Linux è risultata abbastanza agevole pur avendo a disposizione esclusivamente il codice sorgente. Infatti, sia Nautilus che Speak Freely contengono un file di testo (INSTALL) in cui sono riportati tutti i passi per una corretta compilazione dei sorgenti e quindi per l'installazione sul sistema; tuttavia è necessario avere almeno un'idea di concetti come Makefile, decompressione, ecc. per non limitarsi a eseguire meccanicamente i passi dell'installazione, descritti anche da noi nei paragrafi d'installazione.

L'unica differenza tra le due applicazioni sta nel fatto che Nautilus richiede per la corretta installazione il linkaggio di una libreria (RSAREF).

 

Funzionalità

Le varie funzionalità offerte dai due software sono l'aspetto più importante da analizzare e quello dove si possono riscontare le maggiori differenze.

 

Prima di tutto sia Speak Freely che Nautilus, ovviamente, offrono le funzioni base di trasmissione e ricezione del suono. A parte queste possibilità, Nautilus non offre altro, a differenza di Speak Freely che, senza alcun dubbio, è molto più completo.

Oltre alle utility per la trasmissione e ricezione del suono (sfmike e sfspeaker rispettivamente) Speak Freely ha come ulteriori funzionalità le seguenti : 

punto elenco

sflwl - utility per cercare utenti attivi sulla rete

punto elenco

sfwld - un server di ricerca utenti in rete

punto elenco

sfecho - un echo server

punto elenco

sfvod - un voice on demand server

punto elenco

possibilità di chattare usando sfmike e sfspeaker.

 

 

Una cosa certa è che sia gli algoritmi crittografici di Speak Freely che quelli di Nautilus non sono attaccabili in pratica. E' anche vero, tuttavia, che un cifrario totalmente sicuro non esiste (un nemico potrebbe decidere di testare tutte le chiavi possibili, anche se ciò risulta estremamente oneroso), ma nel nostro caso, se qualcuno decidesse di intercettare la nostra comunicazione mentre stiamo usando una delle due applicazioni, rompere il cifrario è probabilmente l'ultima cosa che penserebbe di fare.  

E' bene quindi esaminare, più che la sicurezza data dai cifrari utilizzati, gli attacchi che rendono poco sicuri Speak Freely e Nautilus.

 

Prima di tutto, sia Nautilus che Speak Freely potrebbero contenere dei bugs. Entrambi i metodi sono semplici e soprattutto funzionano, ma eventuali errori di programmazione possono seriamente minare la loro sicurezza.

 

In secondo luogo, anche se entrambi i programmi proteggono il nostro telefono dal monitoraggio della linea, non fanno niente per proteggerci da altri metodi di invasione della privacy. Ma questo non può essere un fattore invalidante, dato che anche i sistemi più sicuri per la trasmissione della voce non possono proteggere la nostra privacy da microfoni nascosti nelle nostre stanze o uffici!

 

Infine, anche se i segnali che passano attraverso la rete non possono essere decifrati senza la chiave segreta, il nostro computer potrebbe, esso stesso, perdere delle informazioni non cifrate sia attraverso radiazioni elettromagnetiche sia perché potrebbe essere stato, in qualche modo, corrotto. 

 

A conclusione, quindi, la sicurezza di Speak Freely e Nautilus dipende in maniera sostanziale dagli algoritmi di cifratura utilizzati, compresi quelli per lo scambio delle chiavi, ma, come per qualsiasi sistema di comunicazione sicura, ciò che crea maggiori problemi nella pratica, è la possibilità di attacchi "alternativi" da parte di chi non ha le risorse necessarie a rompere un cifrario.

In realtà nonostante ci si possa dotare di tutto l'armamentario crittografico esistente al mondo, esso non è sufficiente - sempre e comunque - per essere del tutto tranquilli. Più che un'arma infallibile, ogni programma di crittografia va considerato solo come un'arma a disposizione in più.

 

Facilità d'uso

L'uso delle due applicazioni non è estremamente semplice né molto immediato, soprattutto per chi non ha una conoscenza, seppur sommaria, di un sistema Unix/Linux. Un utente generico proverebbe non poche difficoltà nell'utilizzo sia di Speak Freely che di Nautilus, ma è evidente che questi due programmi sono nati per essere usati da utenti esperti.

L'uso di Speak Freely risulta semplificato dalla presenza dell'interfaccia grafica. Nautilus, invece, non presenta alcuna interfaccia grafica. Chi ha lavorato su DOS e su Linux non dovrebbe avere problemi, viceversa chi conosce solo Windows è meglio che si orienti su qualcos'altro, o chieda a qualche amico programmatore di costruirgli un front-end opportunamente semplificato.

 

Prestazioni

Le nostre numerose prove, la maggior parte delle quali condotte su lan Ethernet sia a 10 Mbit che a 100 Mbit, con qualunque combinazione di compressione, protocolli e cifratura hanno dato degli ottimi risultati. Ma è da notare che le applicazioni sono molto più sensibili al ritardo dei pacchetti che non alla reale velocità della rete. Inoltre l'uso del protocollo UDP non consente né flow control né riscontro, quindi il ritardo di transito della rete può giocare un ruolo essenziale nella corretta intelligibilità del suono, se aumenta oltre un certo limite.

In Speak Freely, sfspeaker dispone di un opzione -Jdelay, idle che consente di compensare il jitter di linea. In pratica è possibile specificare un ritardo (delay) prima che il pacchetto venga suonato in modo da bufferizzare la sequenza in ingresso e compensare i ritardi di transito. Il ritardo viene resettato quando non si riceve suono per una certa quantità (idle). Con questa opzione è possibile in alcuni casi migliorare notevolmente la qualità dell'audio percepito.

Le prove fatte con collegamento dial-up, non hanno dato risultati soddisfacenti come nel caso della rete LAN. L'utilizzo di modem a 56k è probabilmente uno dei motivi del ritardo riscontrato. Ricordiamo che l'uso contemporaneo della cifratura dei dati e della compressione, è molto pesante per la CPU, in quanto il numero di calcoli, spesso in virgola mobile, che deve svolgere per comprimere, cifrare, decifrare, decomprimere e gestire l'I/O sul device audio è molto elevato. Non bisogna meravigliarsi quindi se non si riceve bene: forse il collo di bottiglia non è la rete ma la CPU.

 

 

Glossario

 

Algoritmo crittografico: qualunque procedimento generale per cifrare, che l'aggiunta della chiave rende unico e capace di generare una scrittura segreta.

 

Chiave: parola convenuta tra mittente e destinatario, sulla quale si basa la segretezza di molti cifrari.

 

Cifrare: tradurre un messaggio chiaro in una scrittura segreta tramite cifratura.

 

Compressione dei dati: operazione che modifica il  flusso di dati digitali in modo che esso possa essere inviato su canali con scarsa larghezza di banda.

 

Crittoanalisi: la crittoanalisi è la disciplina che studia come forzare i cifrari, cioè come determinare la chiave che è stata utilizzata per cifrare i messaggi. Molte tecniche di crittoanalisi utilizzano proprietà statistiche dei linguaggi naturali. Il problema nasce dal fatto che le strutture dei linguaggi naturali posseggono delle asimmetrie frequentistiche intrinseche che possono essere sfruttate per "rompere" i cifrari a sostituzione. Precisamente, le parole di un linguaggio non sono stringhe casuali dell'alfabeto. Piuttosto, esistono caratteri più frequenti di altri.

 

Crittografia: la crittografia (o criptografia) è uno strumento per la trasmissione sicura dei dati attraverso un mezzo, come ad esempio la rete pubblica quale Internet. In realtà la crittografia ha radici storiche molto lontane, ad esempio durante le guerre vengono usati diversi sistemi per nascondere il vero significato di un messaggio. La crittografia utilizza dei metodi matematici per rendere incomprensibili i dati da trasmettere (criptazione) e l'uso degli stessi metodi in maniera inversa per la ricodifica dei dati originali (decriptazione). Il metodo di criptazione attualmente più usato e sicuro è quello detto a "chiave pubblica".

 

Entropia: (interpretazione nella teoria della comunicazione) la forma matematica che descrive il flusso di informazioni in presenza di rumore corrisponde alla forma matematica che descrive l'entropia termodinamica; si è portati quindi per analogia ad assimilare questi due concetti. In questo caso però l'informazione è tanto più significativa quanto più è improbabile; il messaggio statisticamente più probabile, massimo di entropia, è privo di significato. Il messaggio può essere trasmesso con precisione grande a piacere, anche in presenza di errori casuali, ripetendo il messaggio stesso. Anche in questo caso il messaggio degrada da uno stato di massima significatività ad uno stato indifferenziato a causa degli errori casuali di trasmissione.

 

File .au: file audio creato da Sun Microsystem© a 8 bit, 8000 Hz, mono. La qualità non è neppure paragonabile ai formati WAV o MP3, ma in compenso sono files leggerissimi, con un peso che può arrivare anche ad un decimo del corrispondente file WAV. I file AU sono però difficilmente reperibili in rete, proprio per la loro qualità non eccelsa.

 

Frequenza: velocità con cui si ripete un segnale periodico. La sua unità di misura è l'Hertz o il numero di caratteri al secondo (cps).

 

Full duplex: tecnologia che consente il trasferimento simultaneo dei dati in due direzioni.

 

Half duplex: tecnologia che consente il trasferimento dei dati in due direzioni non simultaneamente.

 

Larghezza di banda: la misura per il trasferimento dati in un sistema di comunicazioni elettroniche.

 

Modello Client-Server: modello di interazione in un sistema distribuito in cui un programma in un sito invia una richiesta a un programma in un altro sito e aspetta una risposta. Il programma richiedente si chiama client, quello che soddisfa la richiesta si chiama server.

 

Protocollo di trasporto: protocollo che regola l’accesso a basso livello alla rete e il trasferimento dei messaggi tra i client, compresi la suddivisione dei messaggi in pacchetti, la gestione dell’ordine dei pacchetti, il controllo del flusso e la generazione degli indirizzi fisici.

 

Protocollo IP: è il livello di network di TCP/IP, fornisce un servizio non connesso, inaffidabile e best try.

 

Protocollo TCP: protocollo standard al livello di trasporto che fornisce il servizio di flusso affidabile full-duplex da cui dipendono molti protocolli applicativi.

 

Protocollo UDP: protocollo che consente a un programma applicativo su una macchina di inviare un datagram a un  programma applicativo che gira su un’altra.

 

Segnale analogico: un segnale analogico è un'onda elettromagnetica che varia con continuità e che può essere trasmesso sopra una larga varietà di mezzi; esempi sono i cavi quali il doppino telefonico, il cavo coassiale, la fibra ottica e la propagazione nell'atmosfera o nello spazio.

 

Segnale digitale: se il segnale analogico viene misurato ad intervalli di tempo e sufficientemente frequenti, si crea un segnale discontinuo detto digitale cioè una serie di numeri che rappresentano lo stesso suono. Un segnale digitale è, quindi, una sequenza di impulsi che possono essere trasmessi solo attraverso un cavo.

 

 

 

 

 

Riferimenti

Bibliografia

Nella realizzazione di questo lavoro è stato consultato il seguente materiale:

  1. la documentazione ufficiale dei programmi, reperibile sui siti internet:

punto elenco

http://www.speakfreely.org/

punto elenco

http://www.fourmilab.ch/speakfree/unix

punto elenco

sito ufficiale Nautilus

punto elenco

sorgenti Nautilus

punto elenco

documentazione Nautilus

  1. libreria rsaref (download)

  2. il manuale in linea del sistema Linux.

 

Argomenti correlati

Di seguito vengono forniti dei collegamenti a materiale riguardante argomenti citati in questo lavoro.

 

AES

http://udsab.dia.unisa.it/ads.dir/corso-security/www/CORSO-0001/AES/index.htm

 

Blowfish

http://udsab.dia.unisa.it/ads.dir/corso-security/www/nuovicifrari.ps

http://udsab.dia.unisa.it/ads.dir/corso-security/www/CORSO-0203/PasswordSafe/Blowfish.htm

 

CBC

http://udsab.dia.unisa.it/ads.dir/corso-security/www/CORSO-9900/des/sez4-2.html

 

CFB

http://udsab.dia.unisa.it/ads.dir/corso-security/www/CORSO-9900/des/sez4-3.html

 

DES (Data Encryption Standard)  

http://udsab.dia.unisa.it/ads.dir/corso-security/www/CORSO-9900/des/index.html

 

Diffie-Hellman   

http://udsab.dia.unisa.it/ads.dir/corso-security/www/dist_chiavi_95-96.ps

 

IDEA

http://udsab.dia.unisa.it/ads.dir/corso-security/www/cifrari.ps

 

MD5

http://udsab.dia.unisa.it/ads.dir/corso-security/www/CORSO-9900/hash/mdx.htm#2.2 MD5

 

PGP

http://udsab.dia.unisa.it/ads.dir/corso-security/www/pgp9798.ps

 

TRIPLO DES

http://udsab.dia.unisa.it/ads.dir/corso-security/www/CORSO-9900/des/sez5-4.html