1. Università degli Studi di Catania
Concorso Telecom Sinfonia - Sistemi Embedded
Prof. V.Catania
TrustMe
http://code.google.com/a/eclipselabs.org/p/trustme/
WormHole
Riccardo Pulvirenti
Giuseppe Ravidà
Università degli Studi di Catania - Concorso Telecom Sinfonia - Sistemi embedded
2. Università degli Studi di Catania
Indice
Descrizione
1
Introduzione
1
Ambito di utilizzo
1
Elenco delle funzionalità offerte da TrustMe
1
Architettura
2
Panoramica
2
Client side - AndroidTrustMe
2
Accesso ai servizi
2
Note sull’utilizzo dei Servizi Sinfonia CMS (POI)
3
Sicurezza e crittografia
3
Interfaccia utente
4
Server side - TrustMe
5
Casi d’uso
7
Inserimento di nuovi dati
7
Visualizzazione dei dati
7
Modifica e rimozione dei dati
8
Ricerca sportelli ATM in zona
9
Aggiungere ulteriori dati
9
Note sull’installazione
10
Installazione server
10
Nome resoconto
i
4. Università degli Studi di Catania
Descrizione
Introduzione
TrustMe è un’applicazione che consente di conservare in maniera sicura dati sensibili come numeri di carte di credito, codici
di sicurezza, note personali, ecc. L’applicazione sfrutta lo standard internazionale AES-256 1 per cifrare i dati. In questo modo
nessun male intenzionato, pur venendo in possesso dei dati memorizzati, potrebbe decifrarli. La cifratura è basata su una
password scelta dall’utente e, tramite algoritmi di derivazione, utilizzata per cifrare i dati.
Una volta inseriti i dati questi possono essere eliminati o modificati in qualunque momento, utilizzando l’intuitiva interfaccia
utente.
Oltre alla memorizzazione sicura dei dati, TrustMe offre anche un servizio di localizzazione geografica col fine di indicare gli
sportelli ATM, compatibili con le carte di credito presenti in memoria, intorno a voi. Questo consente di poter risparmiare
sulle commissioni imposte dagli sportelli di altri circuiti bancari.
Ambito di utilizzo
Il salvataggio delle informazioni private è lo scopo principale dell’applicazione. Questo garantisce sicurezza ed evita di dover
ricordare a memoria decine e decine di codici e nomi utente. L’applicazione ha ancora funzionalità limitate, ma le possibilità
sono tantissime. Fra le più importanti vi è sicuramente la possibilità di integrare i pagamenti con tecnologia NFC, che sta
cominciando a svilupparsi su scala mondiale.
Altre importanti features previste sono la generazione casuale di password, gestione migliorata di localizzazione geografica,
sincronizzazione e un’usabilità maggiore.
Elenco delle funzionalità offerte da TrustMe
Funzionalità Caratteristiche
Salvataggio dei dati I dati vengono cifrati e memorizzati su un server remoto sul
quale girano servizi di Telecom-Sinfonia
Cifratura Prima di essere memorizzate, le informazioni vengono cifrate
con AES
Servizio di localizzazione Ricerca degli ATM in zona con preferenza in funzione dei dati
salvati nel Database
Sincronizzazione Possibilità di accedere ai dati da diversi dispositivi e dal web
L’applicazione sarà supportata da un apposito sito web che consentirà la gestione delle anagrafiche utenti e permetterà la
sincronizzazione dei propri dati fra più dispositivi
1 La versione attuale di TrustMe utilizza una cifratura a 128 bit per scopi dimostrativi. La versione finale utilizzerà cifratura a
256bit
Trust me - Concorso Telecom Sinfonia
1
5. Università degli Studi di Catania
Architettura
Panoramica
L’applicazione TrustMe è stata pensata per girare su dispositivi mobili con sistema operativo Android.
TrustMe si compone di un lato client (che consiste nell’applicazione vera e propria in esecuzione sul dispositivo mobile) e un
lato server (caratterizzato da tutti i servizi di accesso ai dati, localizzazione e autenticazione).
L’intera applicazione è scritta in JAVA e imposta i dati di ritorno come CSV (Comma Separated Values) che vengono
opportunamente elaborati prima del loro utilizzo da apposite funzioni parser.
Analizziamo nel dettaglio entrambe le parti.
Client side - AndroidTrustMe
Lato client si ha l’integrazione di tre componenti principali:
• A: Accesso ai servizi
• B: Sicurezza e crittografia
• C: Interfaccia utente
A
B
C
Le componenti principali di TrustMe - lato client
Accesso ai servizi
Lato Android l’applicazione esegue richiamando servizi che restituiscono dati in formato JSON. Questi dati vengono utilizzati
per effettuare l’autenticazione, accedere al database in lettura e in scrittura, chiedere e manipolare la lista degli ATM in
funzione della posizione attuale. L’utilizzo di dati formattati in JSON permette un’alta interoperabilità fra ambienti diversi. In
questo modo siamo in grado, senza apportare modifiche lato server, di poter offrire le stesse funzionalità ad applicazioni per
altri dispositivi e per web.
Come abbiamo già visto, i dati utente vengono memorizzati su un server remoto; questo offre il vantaggio di poter accedere
ai propri dati in qualunque istante, da qualunque parte del globo e soprattutto aggiunge sicurezza in quanto tali informazioni
Trust me - Concorso Telecom Sinfonia
2
6. Università degli Studi di Catania
non verranno mai salvate sul dispositivo e anche se venissero “rubate” dal server non potrebbero essere utilizzate in quanto
cifrate con chiave master segreta. Per poter accedere, visualizzare, modificare o eliminare le proprie informazioni, vengono
invocati dei metodi remoti (Web Services) tramite passaggio di opportuni parametri. Le librerie di accesso ai dati sono le
seguenti (in pseudocodice):
String userAuth(String uName, String uPassword);
void addCreditCard(String newCard);
void removeCard(int cardId);
void updateCard(String cardFields);
String[] cardsList(int userID);
void addPassword(String newPassword);
void removePassword(int passId);
void updatePassword(String passFields);
String[] passwordsList(int userID);
Tali servizi forniscono la possibilità di inserire, modificare, eliminare e visualizzare dati relativi alle carte di credito e alle
password.
I servizi per l’accesso ai dati sono servizi “custom” implementati dal team WormHole. A questi servizi si aggiungono quelli
offerti dal framework Sinfonia di Telecom che permettono la localizzazione di punti di interesse in funzione della posizione
attuale. Nel nostro caso abbiamo usato il servizio Sinfonia CMS per ottenere la lista degli ATM in zona.
String getMapUrl(Double lon, Double lat);
Note sull’utilizzo dei Servizi Sinfonia CMS (POI)
Al momento il framework Sinfonia permette la sola localizzazione nella città di Torino. Le coordinate quindi sono impostate
staticamente. L’applicazione comunque integra già l’interrogazione del dispositivo GPS e la possibilità di leggere e inviare a
Sinfonia le coordinate attuali. Inoltre nella lista dei POI fornita da Sinfonia non sono presenti gli ATM, quindi abbiamo
utilizzato come valore di ritorno una lista qualunque (monumenti); basta semplicemente creare una voce nel database
Sinfonia e cambiare il codice di ricerca nella funzione getMapUrl.
Sicurezza e crittografia
Il progetto lato client contiene un particolare package (trustme.security) che si occupa di crittografare e decifrare i dati.
Tali funzioni utilizzano i meccanismi offerti da Java in tema di sicurezza (java.security, javax.crypto).
Le password di accesso ai dati vengono codificate con SHA-256 e memorizzate nel server già cifrate. SHA-256 offre un
meccanismo di hashing one-way sicuro e mantiene protetta l’identità degli utenti.
Per la cifratura dei dati sensibili è usato invece l’algoritmo AES. Per questa versione dimostrativa, per motivi di tempo, è
stata implementata una funzione di crittografia AES a 128bit con master secret ottenuto tramite MD5 dei dati di login. MD5
fornisce anch’esso un alto livello di sicurezza one way.
Trust me - Concorso Telecom Sinfonia
3
7. Università degli Studi di Catania
Le funzioni di crittografia usate nel modulo client rispettano le seguenti firme:
Crypto.java:
public static String encrypt(String seed, String cleartext)
public static String decrypt(String seed, String encrypted)
SHAEncrypter.java:
public static String Encrypt(String password)
MD5Encrypter.java:
public static String Encrypt(String text)
Interfaccia utente
L’interfaccia utente è stata pensata per fornire la migliore user-experience possibile, basandosi su un layout semplice e
modulare e un alto livello di intuitività dei pulsanti.
Pulsante
di
barra principale
inserimento
di
selezione
Area
di
visualizzazione
Screenshot applicazione
La barra principale di selezione permette di poter scegliere fra carte di credito, password e localizzazione ATM. Ogni
scelta aprirà l’elenco delle informazioni corrispettive oppure la mappa con i placemarks indicanti gli ATM più vicini
Il pulsante di inserimento permette, tramite la comparsa di un menu contestuale, di selezionare per l’inserimento di nuove
carte di credito o password.
Trust me - Concorso Telecom Sinfonia
4
8. Università degli Studi di Catania
L’area di visualizzazione, infine, è l’area che si popolerà con l’elenco di carte di credito, password o con la mappa con i
placemarks indicanti gli ATM in zona. Quest’area supporta la pressione prolungata su un elemento per entrare in modalità
modifica o inserimento.
Server side - TrustMe
Lato Server si trovano tutte le funzioni per l’acceso ai dati, la loro manipolazione e il servizio Sinfonia CMS per ottenere la
lista degli ATM in zona.
Una volta interrogato, il server risponde con un oggetto JSON (in genere CSV String oppure String Array) con
un’espressione di questo tipo:
{"cardsListBean":{"cardsList":["2,
C1624CFBCC9E61D55269B7862A1FA656094F099088BA9D6FCA00F9E51A5FE59D0BE29E1
3532FF3EAF6A71C752F75C7F8C197C94F1C9F9894CB0E882BFC349804,2","5,
7A650AC505B48FE8022892DD7510D620F0518B2499D415FC1EC7E8003B53DD762E25C10
BB6A477EA63C9FBF3948E9FACCD29922DF31D0E498DABA5A0A2D54612,2","6,
4D0B0CEE80DA94BA4895B507A2B9F84F62EC19B549B685BD729C39064096755108FE081
59EE0CCDF74F3B5F1F471C548788FDBCC422E5D1E85038AEE926B04DC,2","7,
A89507B3D8D974B348E0316CAEEEBB69937419DF366B40AF9B7CFB2D8D9BABF3631A134
6BE0AC077095E4468E2E217BF56529FEF10460AC20C6F46704DF099CB,2","8,
06D8AF1E9D79286C177CA64A144562D9C9C36BBFB14CB75F3DE2B6FCE2C168567ECE196
D36EC1A88FE51E87D618A2649B0663FEED2C5359409AF66FE3FEAAE5A,2","9,
9A2149C4400E06B6D48F3B9727841CA8F2A63D16798C61242618E59E8A502835D3DA504
06CC14A8DF6923CBB7B06343F8659EF83B4AF22736555481003FD6EFC43B2515E3D5356
6B0600269A2E7FA487,2","10,
6F434C1396CC6EF60EB1C239DCBF0B46ED125C1513235A1C58B8C1126EFBA5F7AFAE443
7525CC95E2F7AE4B4BF65CC4A2BD93C4914D073F659BA018FC55B772B,2"]}}
Come si può notare, i dati sono tutti cifrati e non accessibili senza la masterkey.
Sul server è installata l’ultima versione di MySQL per gestire il database users, composto dalle seguenti tabelle:
• tm_users: questa tabella è quella che contiene le informazioni sull’utente quali username e password. La password è
memorizzata previa cifratura con SHA-256. Una volta inseriti i dati di accesso questi vengono cifrati lato client e la funzione
userAuth si occuperà di verificarne l’esatta corrispondenza.
Schermata di login
Trust me - Concorso Telecom Sinfonia
5
9. Università degli Studi di Catania
• tm_passwords: questa tabella contiene le password salvate dall’utente, opportunamente cifrate con AES. In fase di
lettura, viene restituita al client la stringa cifrata, separata con una virgola dal campo UserID; l’applicazione Android si
occuperà di decifrare con la chiave segreta, organizzare i campi in apposite strutture dati e visualizzarli nell’interfaccia
grafica.
• tm_cards: qui vengono memorizzate le carte di credito, sempre cifrate, organizzate per categorie.
• tm_cardTypes: le categorie delle carte di credito (VISA, MASTERCARD, BANCOMAT, ecc). L’applicazione Android
popola dinamicamente un menu a discesa durante l’inserimento di nuovi dati direttamente da questa tabella.
Trust me - Concorso Telecom Sinfonia
6
10. Università degli Studi di Catania
Casi d’uso
Inserimento di nuovi dati
Al primo utilizzo il database utente si presenterà vuoto. La procedura qui descritta per inserire nuove carte di credito è simile
a quella per l’inserimento di nuove password.
come indicato in figura, basterà “tappare” sullo schermo per entrare in modalità inserimento, compilare i campi e premere il
pulsante di salvataggio. Una volta inserite, le informazioni appariranno insieme alle altre in una lista elenco nell’area di
visualizzazione.
Visualizzazione dei dati
Per visualizzare in dettaglio le informazioni inserite basterà fare un singolo tap sull’elemento desiderato. Si aprirà in questo
modo una finestra di visualizzazione.
Trust me - Concorso Telecom Sinfonia
7
11. Università degli Studi di Catania
Modifica e rimozione dei dati
Una volta inseriti, i dati possono essere modificati o eliminati. Per far ciò, tenere premuto qualche secondo sull’elemento che
si vuole eliminare fino a quando comparirà il menu contestuale, come indicato in figura.
Trust me - Concorso Telecom Sinfonia
8
12. Università degli Studi di Catania
Ricerca sportelli ATM in zona
Oltre a memorizzare i dati, con TrustMe è possibile ricercare gli sportelli ATM più vicini per effettuare operazioni. Per far ciò
basta tappare una volta sull’icona a forma di lente di ingrandimento e attendere un momento per la localizzazione.
Aggiungere ulteriori dati
Per aggiungere ulteriori informazioni, dopo il primo inserimento, basterà tappare sul pulsante con il simbolo “+” in alto a
destra nell’applicazione.
Trust me - Concorso Telecom Sinfonia
9
13. Università degli Studi di Catania
Note sull’installazione
Installazione server
Per poter utilizzare l’applicazione bisogna aver installato il framework Sinfonia e creare un database di nome “users” con le
tabelle indicate precedentemente. Un dump del database vuoto è presente sotto forma di istruzione SQL nel DVD in
dotazione. Eseguire la query dovrebbe essere sufficiente a configurare la base dati.
Configurata la parte di storage, bisogna compilare le classi action e pubblicare i servizi su un application server come
Apache Tomcat. In ambiente Eclipse basta premere il tasto destro del mouse sulla cartella del progetto “TrustMe” e
selezionare Run As->Run On Server.
Installazione client
TrustMe è un’applicazione sviluppata per girare su dispositivi Android. Per poter testare l’applicazione bisogna avere
installato l’SDK per lo sviluppo di applicazioni Android ed eseguire il software su un emulatore. Alternativamente basterà
copiare il file .apk sul vostro terminale reale e lanciare l’applicazione.
Per far si che l’applicazione funzioni, bisogna configurare, fra le risorse statiche del progetto, l’indirizzo IP del server sul quale
sono in esecuzione i servizi. Per far ciò aprire il progetto AndroidTrustMe in Eclipse, navigare l’albero dei files fino alla
directory res/values e modificare il file strings.xml alla voce ip_address. Fatto questo lanciare l’emulatore oppure
compilare e copiare il file .apk così generato sul dispositivo ed installarlo.
L’utente di prova può accedere con i seguenti dati:
User Name: myuser
Password: mypass
Il progetto è disponibile al seguente indirizzo:
http://code.google.com/a/eclipselabs.org/p/trustme/
Trust me - Concorso Telecom Sinfonia
10