135
MILC BlackBerry Η Διπλωματική Εργασία παρουσιάστηκε ενώπιον του Διδακτικού Προσωπικού του Πανεπιστημίου Αιγαίου Σε Μερική Εκπλήρωση των Απαιτήσεων για το Δίπλωμα του Μηχανικού Πληροφοριακών και Επικοινωνιακών Συστημάτων του ΜΗΝΑ ΔΗΜΗΤΡΙΟΥ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ 2012 – 2013

MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

MILC BlackBerry

Η Διπλωματική Εργασία

παρουσιάστηκε ενώπιον

του Διδακτικού Προσωπικού του

Πανεπιστημίου Αιγαίου

Σε Μερική Εκπλήρωση

των Απαιτήσεων για το Δίπλωμα του

Μηχανικού Πληροφοριακών και Επικοινωνιακών Συστημάτων

του

ΜΗΝΑ ΔΗΜΗΤΡΙΟΥ

ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ 2012 – 2013

Page 2: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ
Page 3: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

Η ΤΡΙΜΕΛΗΣ ΕΠΙΤΡΟΠΗ ΔΙΔΑΣΚΟΝΤΩΝ ΕΠΙΚΥΡΩΝΕΙ

ΤΗ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

ΤΟΥ ΜΗΝΑ ΔΗΜΗΤΡΙΟΥ:

Καμπουράκης Γεώργιος (επ. Καθηγητής), Επιβλέπων

Τμήμα Μηχανικών Πληροφοριακών και

Επικοινωνιακών Συστημάτων

Κωνσταντίνου Ελισάβετ (επ. Καθηγήτρια), Μέλος

Τμήμα Μηχανικών Πληροφοριακών και

Επικοινωνιακών Συστημάτων

Βουγιούκας Δημοσθένης (Επ. Καθηγητής), Μέλος

Τμήμα Μηχανικών Πληροφοριακών και

Επικοινωνιακών Συστημάτων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ 2012-2013

Page 4: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

v

ΠΕΡΙΛΗΨΗ

Η διπλωματική εργασία, σχετίζεται με την περαιτέρω ανάπτυξη της εφαρμογής MILC, Mobile

Instant Locator and Chatting, η οποία έχει σχεδιαστεί με γνώμονα την ασφάλεια των

επικοινωνιών και των δεδομένων. Συγκεκριμένα, σκοπός της διπλωματικής είναι ο εμπλουτισμός

των λειτουργιών και των χαρακτηριστικών της φορητής εφαρμογής κοινωνικής δικτύωσης MILC

που προσφέρεται από το τμήμα μας και η μεταφορά (porting) του κώδικά της, στη δημοφιλή

πλατφόρμα κινητών συσκευών, Blackberry. Επίσης παρουσιάζεται ο τρόπος λειτουργίας της

εφαρμογής και διάφορα χαρακτηριστικά της.

Αρχικά γίνεται παρουσίαση των χαρακτηριστικών ασφάλειας των εφαρμογών άμεσων

μηνυμάτων και των εφαρμογών άμεσης επικοινωνίας για φορητές συσκευές. Επίσης, θα

παρουσιάσουμε μια έρευνα που έγινε για κινητά τηλέφωνα με ανάλυση των δυνατοτήτων

ασφάλειας τους εστιάζοντας στα κενά ασφάλειας που παρουσιάζονται.

Στη συνέχεια παρουσιάζεται η λειτουργία της εφαρμογής MILC και πληροφορίες σχετικά με την

ασφάλεια των δεδομένων και του συστήματος. Αναφέρονται διάφορα χαρακτηριστικά του και η

διαδικασία η οποία ακολουθείται για την επίτευξη της κρυπτογραφημένης επικοινωνίας. Έπειτα,

θα παρουσιάσουμε την πλατφόρμα του κινητού blackberry εστιάζοντας στις λειτουργίες με στόχο

την ασφάλεια της πλατφόρμας και στις μεθόδους που χρησιμοποιούνται. Ακόμη θα γίνει

αναφορά στο SDK του Blackberry και σε κάποια χαρακτηριστικά του.

Τέλος παρουσιάζεται η υλοποίηση της εφαρμογής MILC στην πλατφόρμα του Blackberry, η

διεπαφή της εφαρμογής, αναφορά σε κάποια κομμάτια του κώδικα εστιάζοντας στην ασφάλεια

και στην κρυπτογράφηση. Ο πλήρης κώδικας της εφαρμογής που έχει αναπτυχθεί στη γλώσσα

προγραμματισμού java, παρουσιάζεται στο παράρτημα.

Page 5: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

vi

ABSTRACT

This thesis is related with the development of the MILC application, Mobile Instant Locator and

Chatting, with focus on security of communication and data protection. The scope of this work is

to enrich the functionalities and characteristics of the mobile social networking application MILC

that is available to the users of University of the Aegean. More specifically, we make the porting

of the application to the popular mobile platform of Blackberry. It is shown in detail how the

application works, as well some characteristics about the security. Firstly, we analyze the security

services offered by Instant Messaging applications. Also, we detail on a recent published work

that concentrates on the security services provided by well-known Instant Messaging applications

for mobile phones. Its scope was to analyze the security characteristics of those IM applications,

focusing on security vulnerabilities of those applications. Then, we show how the MILC

application operates as well as some useful information about data protection and security. Also,

we highlight on some characteristics of the key exchange process offered by MILC and how a

secured communication is established between the peers. Next, we introduce the BlackBerry

platform, focusing on functionalities and methods that are used for the security of information.

Moreover, we provide a synopsis of the BlackBerry SDK. Finally, we show how MILC is

implemented in the BlackBerry platform. This is mainly done by explaining the interface of the

application, as well as by making references to some parts of the code related with the security

and cryptographic operations. The complete code in java is given in the appendix.

Page 6: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

vii

ΕΥΧΑΡΙΣΤΙΕΣ

Θα ήθελα να ευχαριστήσω την οικογένειά μου και τους γονείς μου για την βοήθεια και την

αμέριστη συμπαράσταση που μου έδειξαν κατά τη διάρκεια της εκπόνησης αυτής της εργασίας

και ιδιαίτερα τη μητέρα μου για την υπομονή της και την κατανόηση της. Επίσης θα ήθελα να

ευχαριστήσω τη συμφοιτήτρια, και κυρίως φίλη, Μαρία για τη βοήθειά της και την υποστήριξή

της. Τέλος, ειδικές ευχαριστίες ανήκουν στον Στέλιο Αβραμίδη για τη συνεργασία μας και για τις

χρήσιμες συμβουλές του, καθώς η δουλειά και των δυο μας, σχετίζεται με την επέκταση του

MILC σε άλλες κινητές πλατφόρμες.

Page 7: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

viii

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

ΠΕΡΙΛΗΨΗ ..................................................................................................................................... v

ABSTRACT .................................................................................................................................... vi

ΕΥΧΑΡΙΣΤΙΕΣ .............................................................................................................................. vii

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ .................................................................................................... viii

ΚΑΤΑΛΟΓΟΣ ΣΧΗΜΑΤΩΝ .......................................................................................................... x

ΚΑΤΑΛΟΓΟΣ ΠΙΝΑΚΩΝ ............................................................................................................. xi

ΚΕΦΑΛΑΙΟ 1 - ΕΙΣΑΓΩΓΗ ........................................................................................................... 1

ΚΕΦΑΛΑΙΟ 2 - ΑΣΦΑΛΕΙΑ ΣΤΗΝ ΕΠΙΚΟΙΝΩΝΙΑ ΑΜΕΣΩΝ ΜΗΝΥΜΑΤΩΝ ..................... 2

2.1 Θέματα που επηρεάζουν την ασφάλεια των εφαρμογών IM ................................................. 2

2.2 Κρυπτογραφία ........................................................................................................................ 5

ΚΕΦΑΛΑΙΟ 3 - ΑΣΦΑΛΕΙΑ ΣΕ ΚΙΝΗΤΕΣ ΕΦΑΡΜΟΓΕΣ ΑΜΕΣΩΝ ΜΗΝΥΜΑΤΩΝ ......... 10

3.1 Μηχανισμός αυθεντικοποίησης και υποκλοπή λογαριασμού .............................................. 12

3.2 Αλλοίωση του ID του αποστολέα (Sender ID)..................................................................... 16

3.3 Μη ζητηθείσα επικοινωνία ................................................................................................... 17

3.4 Άλλα τρωτά σημεία .............................................................................................................. 19

3.5 Κρυπτογράφηση στη βάση δεδομένων του WhatsApp ........................................................ 20

ΚΕΦΑΛΑΙΟ 4 - Η ΕΦΑΡΜΟΓΗ MILC ........................................................................................ 23

4.1 Ασφάλεια του MILC ............................................................................................................ 24

4.2 Ασφάλεια επικοινωνίας μεταξύ Server - Client ................................................................... 25

4.3 Ασφάλεια μεταξύ των χρηστών ........................................................................................... 26

ΚΕΦΑΛΑΙΟ 5 - Η ΑΣΦΑΛΕΙΑ ΣΤΟ BLACKBERRY ................................................................ 29

5.1 Χαρακτηριστικά – Δυνατότητες ασφάλειας ......................................................................... 30

5.2 Επιλογές ασφάλειας.............................................................................................................. 32

5.3 Κρυπτογράφηση των δεδομένων .......................................................................................... 35

ΚΕΦΑΛΑΙΟ 6 - ΤΟ SDK ΤΟΥ BLACKBERRY ......................................................................... 39

ΚΕΦΑΛΑΙΟ 7 - ΑΣΦΑΛΕΙΑ ΕΦΑΡΜΟΓΩΝ ΣΤΟ BLACKBERRY .......................................... 42

7.1 Δυνατότητες ασφάλειας εφαρμογών .................................................................................... 42

7.2 RIM Cryptographic API ....................................................................................................... 46

ΚΕΦΑΛΑΙΟ 8 - Η ΥΛΟΠΟΙΗΣΗ ΤΟΥ MILC ............................................................................. 49

8.1 Οι κλάσεις και οι συναρτήσεις ............................................................................................. 49

8.2 Η διεπαφή της εφαρμογής με τον χρήστη (interface) ........................................................... 52

8.3 Κρυπτογραφικοί αλγόριθμοι ................................................................................................ 64

ΒΙΒΛΙΟΓΡΑΦΙΑ ............................................................................................................................ 69

ΠΑΡΑΡΤΗΜΑ I - ΚΩΔΙΚΑΣ ........................................................................................................ 70

MILC.java .............................................................................................................................. 70

Page 8: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

ix

LoginSceen.java ......................................................................................................................... 71

MilcScreen.java .......................................................................................................................... 75

Connect.java ............................................................................................................................... 88

Messages.java ............................................................................................................................. 94

Friends.java .............................................................................................................................. 103

Conversations.java ................................................................................................................... 106

ChatScreen.java ........................................................................................................................ 109

WhereAmI.java ........................................................................................................................ 115

StringTokenizer.java ................................................................................................................ 116

Base64.java ............................................................................................................................... 119

ΣΥΝΤΟΜΟ ΒΙΟΓΡΑΦΙΚΟ ΣΗΜΕΙΩΜΑ .................................................................................. 125

Page 9: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

x

ΚΑΤΑΛΟΓΟΣ ΣΧΗΜΑΤΩΝ

Σχήμα 3-1 Επίθεση κατά την αυθεντικοποίηση του WhatsApp [5] ............................................... 13

Σχήμα 3-2 Επίθεση στην εφαρμογή WowTalk [5] ......................................................................... 14

Σχήμα 3-3 Αυθεντικοποίηση EasyTalk [5] .................................................................................... 15

Σχήμα 3-4 Αυθεντικοποίηση Viber [5] .......................................................................................... 15

Σχήμα 3-5 Ανεπιθύμητη επικοινωνία – Γενική προσέγγιση [5] ..................................................... 17

Σχήμα 3-6 ΑποστολήSMS και κλήσεις με το Viber [5] ................................................................. 18

Σχήμα 3-7 Δωρεάν SMS με το WhatsApp [5] ............................................................................... 18

Σχήμα 4-1 Αυθεντικοποίηση και ανταλλαγή κλειδιών στο MILC [9] ........................................... 26

Σχήμα 4-2 Εγκαθίδρυση επικοινωνίας δύο χρηστών στο MILC [9] .............................................. 28

Σχήμα 5-1 Ασφάλεια στο BlackBerry Enterprise Server [11]........................................................ 37

Σχήμα 5-2 BlackBerry MDS Connection Service [11] .................................................................. 38

Σχήμα 6-1 Το περιβάλλον του Eclipse ........................................................................................... 40

Σχήμα 6-2 Ο προσομοιωτής του BlackBerry ................................................................................. 41

Σχήμα 8-1 Διάγραμμα κλάσεων MILC BlackBerry ....................................................................... 51

Σχήμα 8-2 Αρχική οθόνη (MILC Login Screen) ............................................................................ 52

Σχήμα 8-3 Παράθυρο διαλόγου για είσοδο στο MILC .................................................................. 53

Σχήμα 8-4 Κύρια οθόνη του MILC (MILC Screen) ...................................................................... 53

Σχήμα 8-5 Ειδοποίηση για την είσοδο νέου χρήστη ...................................................................... 54

Σχήμα 8-6 Επαναφορά κουμπιού MILCers στην αρχική μορφή.................................................... 54

Σχήμα 8-7 Broadcasts συνομιλία.................................................................................................... 55

Σχήμα 8-8 Ειδοποίηση λήψης Broadcast μηνύματος ..................................................................... 56

Σχήμα 8-9 Παράθυρο διαλόγου Start Chat Session ....................................................................... 56

Σχήμα 8-10 Προσθήκη χρήστη στα Chats...................................................................................... 57

Σχήμα 8-11 Λίστα χρηστών Chats ................................................................................................. 57

Σχήμα 8-12 Παράθυρο διαλόγου Private Chat ............................................................................... 58

Σχήμα 8-13 Άδειασμα της λίστας Chats......................................................................................... 59

Σχήμα 8-14 Οθόνη Private Chat ..................................................................................................... 59

Σχήμα 8-15 Ιδιωτική συνομιλία (Private Chat) .............................................................................. 60

Σχήμα 8-16 Παράθυρο διαλόγου Chat will be closed .................................................................... 61

Σχήμα 8-17 Ειδοποίηση λήψης Private Chat ................................................................................. 61

Σχήμα 8-18 Επαναφορά ιδιωτικής συνομιλίας ............................................................................... 62

Σχήμα 8-19 Παράθυρο διαλόγου Disconnect MILC ...................................................................... 63

Σχήμα 8-20 Παράθυρο διαλόγου Exit MILC ................................................................................. 63

Page 10: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

xi

ΚΑΤΑΛΟΓΟΣ ΠΙΝΑΚΩΝ

Πίνακας 3-1 Σύνοψη εφαρμογών με τα χαρακτηριστικά τους [5] ................................................. 11

Πίνακας 3-2 Σύνοψη για τις επιθέσεις ασφάλειας [5] .................................................................... 12

Πίνακας 3-3 Πρωτόκολλο μηνυμάτων Voypi και Forfone [5]....................................................... 16

Πίνακας 3-4 Σύγκριση υλοποίησης του WhatsApp στα Android, BlackBerry και iPhone [6] ...... 21

Πίνακας 4-1 Επεξήγηση συμβόλων στο πρωτόκολλο του MILC [9] ............................................ 25

Πίνακας 5-1 Ρυθμίσεις πρόσβασης εφαρμογών BlackBerry [10] .................................................. 33

Πίνακας 7-1 Παραδείγματα BlackBerry εφαρμογών κρυπτογράφησης [13] ................................. 43

Πίνακας 7-2 Αποθήκευση και πρόσβαση στα δεδομένα [13] ........................................................ 44

Πίνακας 7-3 Προστασία δεδομένων κατά τη μεταφορά [13] ......................................................... 45

Πίνακας 7-4 RIM Cryptography API components [11] ................................................................. 46

Πίνακας 7-5 Αλγόριθμοι συμμετρικού κλειδιού [11] .................................................................... 47

Πίνακας 7-6 Αλγόριθμοι δημόσιου κλειδιού [11] .......................................................................... 48

Πίνακας 7-7 Επιπλέον αλγόριθμοι του Cryptographic Primitives API [11] .................................. 48

Page 11: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

1

ΚΕΦΑΛΑΙΟ 1 - ΕΙΣΑΓΩΓΗ

Οι εφαρμογές κοινωνικής δικτύωσης διεισδύουν όλο και περισσότερο τα τελευταία χρόνια και

μπαίνουν στη ζωή όλο και περισσότερων ανθρώπων. Οι εφαρμογές άμεσων μηνυμάτων και οι

υπηρεσίες που υποστηρίζουν αυτές, έχουν γίνει πολύ δημοφιλείς με αποτέλεσμα την ραγδαία

ανάπτυξή τους και τη διάδοσή τους στους καταναλωτές. Πλέον, αρκετό ενδιαφέρον,

παρουσιάζουν οι ασύρματες και κινητές συσκευές καθώς το μερίδιό τους στην αγορά αυξάνεται

χρόνο με το χρόνο. Αποτέλεσμα αυτού, είναι ο ανταγωνισμός να εντείνεται και πολλές υπηρεσίες

να αναπτύσσουν εφαρμογές κατάλληλες για κινητά τηλέφωνα στοχεύοντας στον μεγάλο αριθμό

χρηστών φορητών συσκευών. Έτσι, πολύ δημοφιλείς έχουν γίνει οι εφαρμογές κοινωνικής

δικτύωσης και άμεσων μηνυμάτων για κινητά τηλέφωνα και συνεχώς αυξάνεται ο αριθμός τους

και η πολυπλοκότητά τους. Ωστόσο, η ασφάλεια αυτών των εφαρμογών σε πολλές περιπτώσεις

δεν έχει ακόμα φτάσει στο επιθυμητό επίπεδο ώστε να διασφαλίζεται η προστασία των

δεδομένων και η ιδιωτικότητα των χρηστών. Το γεγονός αυτό απασχολεί τόσο τους χρήστες όσο

και τους προγραμματιστές εφαρμογών κινητών συσκευών καθώς προσωπικά στοιχεία, ευαίσθητα

δεδομένα και απόρρητες πληροφορίες μπορούν να αποτελέσουν στόχο επίθεσης ιδιαίτερα όταν

αυτά τα δεδομένα δεν είναι προστατευμένα και δεν έχουν ληφθεί τα κατάλληλα μέτρα για την

αποτροπή τέτοιων επιθέσεων. Επομένως, υπάρχει αρκετός χώρος για την ανάπτυξη της

ασφάλειας των εφαρμογών κοινωνικής δικτύωσης και άμεσων μηνυμάτων σε κινητές συσκευές.

Πάνω σε αυτή τη φιλοσοφία βασίστηκε η ανάπτυξη της εφαρμογής MILC. Το MILC έχει

σχεδιαστεί ώστε να παρέχει ένα ικανοποιητικό επίπεδο ασφάλειας και να προστατεύει την

ιδιωτικότητα μέσα από τη χρήση πρωτοκόλλων ασφάλειας και μεθόδων κρυπτογράφησης. Η

εφαρμογή του MILC υπάρχει ήδη για ηλεκτρονικούς υπολογιστές με τα λειτουργικά συστήματα

Windows, Linux και Mac, και για τις κινητές συσκευές που υποστηρίζουν τα λειτουργικά

συστήματα Android, iOS και Symbian. Στην παρούσα εργασία έγινε η μελέτη, ο σχεδιασμός, η

ανάπτυξη και η υλοποίηση της εφαρμογής για την πλατφόρμα του BlackBerry. Το λειτουργικό

σύστημα του BlackBerry, το οποίο κατέχει ένα σημαντικό μερίδιο στην αγορά κινητών συσκευών

και έξυπνων τηλεφώνων, παρέχει στους προγραμματιστές αρκετές δυνατότητες και

ολοκληρωμένες λύσεις, καθώς υποστηρίζει πολλές χρήσιμες μεθόδους κρυπτογράφησης και

προστασίας των δεδομένων. Πολλές από αυτές τις δυνατότητες χρησιμοποιήθηκαν στην

υλοποίηση του MILC για το BlackBerry και έπαιξαν σημαντικό ρόλο στην ασφάλεια της

εφαρμογής.

Page 12: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

2

ΚΕΦΑΛΑΙΟ 2 - ΑΣΦΑΛΕΙΑ ΣΤΗΝ ΕΠΙΚΟΙΝΩΝΙΑ ΑΜΕΣΩΝ

ΜΗΝΥΜΑΤΩΝ

Οι εφαρμογές άμεσων μηνυμάτων - Instant Messaging – διανύουν μια περίοδο ραγδαίας

εξάπλωσης και αλλαγών, καθώς τέτοιες τεχνολογίες διεισδύουν σε όλο και περισσότερους

χρήστες και επιχειρήσεις. Η ασφάλεια των εφαρμογών αυτών αποτελεί πιθανόν το μεγαλύτερο

πρόβλημα που επηρεάζει τα συστήματα άμεσων μηνυμάτων. Στη συνέχεια θα γίνει μια παράθεση

θεμάτων σχετικών με την ασφάλεια των εν λόγω εφαρμογών και θα εξεταστούν πιθανές λύσεις

που παρουσιάζονται μέχρι στιγμής στη βιβλιογραφία.

2.1 Θέματα που επηρεάζουν την ασφάλεια των εφαρμογών IM

Κλοπή Δεδομένων

Η ασφάλεια στις εφαρμογές μπορεί να παραβιαστεί, εάν κάποιος αποκτήσει παράνομη πρόσβαση

στα δεδομένα. Δύο τρόποι παράνομης πρόσβασης στα δεδομένα είναι: 1) κρυφή ανάγνωση

δεδομένων (Eavesdropping), 2) πρόσβαση και κλοπή καταχωρημένων συνομιλιών (Logs

Stealing). Και τα δύο αποτελούν σοβαρές απειλές, ιδιαίτερα όταν τα δεδομένα δεν είναι

κρυπτογραφημένα.

1. Ωτακουστές (Eavesdropping)

Ένας απλός τρόπος πρόσβασης στα δεδομένα και ανάγνωσής τους, είναι μέσα από τα

πακέτα που ανταλλάσσονται μέσω του διαδικτύου. Εάν το δίκτυο συνδέεται με πλήμνες

(hubs) τότε κάθε Η/Υ που είναι συνδεδεμένος στο δίκτυο αυτό μπορεί να χρησιμοποιηθεί

για να συλλέξει πληροφορίες και δεδομένα. Οι μεταγωγείς (switches) καθιστούν αυτό το

γεγονός δυσκολότερο καθώς ένας Η/Υ συνήθως πρέπει να είναι συνδεδεμένος με τους

clients. Ένας γνωστός τρόπος είναι η χρήση του Wireshark (πρώην Ethereal) που μπορεί

να εμφανίσει δεδομένα τα οποία είναι αναγνώσιμα από τον άνθρωπο. Επίσης μπορεί να

αποθηκεύσει δεδομένα για περεταίρω μελλοντική ανάλυση. Για να αποτραπεί η

ανάγνωση δεδομένων από τρίτους θα πρέπει να κρυπτογραφείται οποιαδήποτε

πληροφορία στέλνεται από έναν Η/Υ, εάν θέλουμε η πληροφορία αυτή να παραμείνει

ασφαλής. Ακόμη, υπάρχει το ενδεχόμενο ενός keylogger, που καταχωρεί οτιδήποτε

πληκτρολογείται από το χρήστη.

Page 13: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

3

2. Κλοπή καταχωρημένων συνομιλιών (Logs Stealing)

Υπάρχουν περιπτώσεις όπου επιθέσεις από χάκερ κατάφεραν να υποκλέψουν κάποια logs

τα οποία περιέχουν εμπιστευτικά δεδομένα και απόρρητες συνομιλίες, όπως συνέβη στην

περίπτωση του CEO του eFront, Sam Jain [2]. Οι αποθήκευση των συνομιλιών

(conversation logs) γίνεται σχεδόν από όλους του IM clients (λειτουργία η οποία είναι

συνήθως αυτόματα ενεργοποιημένη) και επιτρέπει σε οποιονδήποτε έχει πρόσβαση στα

καταχωρημένα δεδομένα, να διαβάσει όλες τις συνομιλίες που έχουν γίνει στο παρελθόν,

ακόμη και μήνες ή χρόνια πριν. Όπως και στο παράδειγμα που αναφέραμε, μόλις κάποιος

αποκτήσει πρόσβαση στα αρχεία με τις συνομιλίες (log files), μπορεί να χρησιμοποιήσει

τα δεδομένα ενάντια στο θύμα. Εάν για παράδειγμα το θύμα έχει καταχωρίσει

πληροφορίες που πρέπει να μείνουν απόρρητες, ο επιτιθέμενος μπορεί να χρησιμοποιήσει

αυτές τις πληροφορίες και να κινηθεί νομικά εναντίων του θύματος.

Κλοπή Κωδικών

Σε αρκετές περιπτώσεις οι κωδικοί ασφαλείας αποθηκεύονται τοπικά σε έναν Η/Υ. Είναι πιθανόν

κάποιος να αποκτήσει μη εξουσιοδοτημένη πρόσβαση σε αυτούς τους κωδικούς. Επίσης,

πρόσβαση μπορεί να αποκτήσει κάποιος και στους κωδικούς πρόσβασης που αποθηκεύονται σε

έναν εξυπηρετητή (server). Οι κωδικοί αυτοί μπορούν να αποκαλυφθούν με τη χρήση διαφόρων

μεθόδων όπως: ανάγνωση πακέτων του δικτύου εάν αποστέλλονται σε αρχικό κείμενο (plain text)

δια μέσω του καλωδίου, δοκιμή κάθε πιθανού συνδυασμού με τη χρήση και κάποιον λεξικών με

δημοφιλείς κωδικούς, ή εάν ο κωδικός καταχωρείται σε μορφή αρχικού κειμένου (ή

κρυπτογραφείται με πολύ απλή τυπική κρυπτογράφηση). Καθώς πολλοί άνθρωποι συχνά

χρησιμοποιούν τον ίδιο κωδικό σε διαφορετικά συστήματα, αποκτώντας κάποιος πρόσβαση στα

διαπιστευτήρια (login) του IM, μπορεί να αποκτήσει πρόσβαση και σε άλλα συστήματα , αλλά

και να υποδυθεί τα θύμα σε μία συνομιλία IM. Ακόμη, υποκλέπτοντας τον κωδικό κάποιου

χρήστη, ο επιτιθέμενος μπορεί να έχει πρόσβαση στο λογαριασμό ηλεκτρονικού ταχυδρομείου

του θύματος. Έτσι, συνοψίζοντας το πρόβλημα, καταλήγουμε ότι χρήστες στέλνουν μη

κρυπτογραφημένους κωδικούς, σε μη κρυπτογραφημένα IM μηνύματα τα οποία καταχωρούνται

σε μη κρυπτογραφημένα logs.

Page 14: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

4

Πλαστοπροσωπία

Αποκτώντας το όνομα χρήστη και τον κωδικό πρόσβασης ενός άλλου χρήστη, μπορεί κάποιος να

υποδυθεί αυτόν το χρήστη (θύμα της επίθεσης). Καθώς ένας τρίτος χρήστης δεν είναι εύκολο να

αντιληφθεί μια τέτοια επίθεση, ενδέχεται ο υποδυόμενος χρήστης να του αποσπάσει

εμπιστευτικές πληροφορίες. Ο άνθρωπος είναι πάντα ο πιο αδύναμος κρίκος στην ασφάλεια

πληροφοριών, και ιδιαίτερα στην ασφάλεια IM είναι ακόμα πιο εύκολο κάποιος να υποδυθεί

κάποιον άλλον. Αρκετοί IM clients δεν εμφανίζονται με το όνομα χρήστη (username) τους, αλλά

με κάποιο ψευδώνυμο (alias) και αντιγράφοντας και χρησιμοποιώντας ένα υπάρχον ψευδώνυμο

κάποιου άλλου χρήστη μπορούν θεωρητικά να υποδυθούν αυτόν το χρήστη. Σε πολλές

περιπτώσεις, το κακόβουλο λογισμικό που εξαπλώνεται μέσω Instant Messaging χρησιμοποιεί

δούρειους ίππους (Trojans) ή ζητάει από το χρήστη να επιλέξει έναν σύνδεσμο που οδηγεί σε μια

ιστοσελίδα ή εκτελεί έναν δούρειο ίππο, κυρίως για να υποδυθεί το πρόγραμμα του client.

Συλλογή - Εξόρυξη δεδομένων

Ορισμένοι χρήστες δεν είναι αρκετά υποψιασμένοι όταν χρησιμοποιούν εφαρμογές ΙΜ και

παρέχουν πληροφορίες οι οποίες θα έπρεπε να παραμείνουν μυστικές. Υπάρχουν εφαρμογές όπου

οι πληροφορίες αυτές δίνονται κατά τη διάρκεια εγγραφής στην αντίστοιχη υπηρεσία για τη

δημιουργία ενός λογαριασμού, οι οποίες είναι διαθέσιμες σε όλους. Τέτοιες πληροφορίες είναι ο

αριθμός τηλεφώνου, διεύθυνση, ημερομηνία γέννησης και προσωπικά ενδιαφέροντα. Αρκετοί

χρήστες δεν είναι επιφυλακτικοί καθώς παρέχουν τέτοιες πληροφορίες, με αποτέλεσμα αυτές να

χρησιμοποιούνται με σκοπό να δημιουργηθεί ένα προφίλ με τις συνήθειες και τις επιθυμίες

κάποιου χρήστη.

Κλοπή ταυτότητας

Υποκλέπτοντας κάποιος τα στοιχεία ταυτότητας ενός τρίτου (θύμα της επίθεσης) και

προσποιούμενος ότι είναι αυτός, μπορεί να χρησιμοποιήσει αυτά τα στοιχεία για άλλους σκοπούς,

όπως να διαπράξει μια εγκληματική ενέργεια προσποιούμενος ότι είναι το θύμα της επίθεσης,

χωρίς το θύμα να το γνωρίζει.

Page 15: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

5

Κακόβουλο λογισμικό

Το κακόβουλο λογισμικό ενδέχεται να εξαπλωθεί από τα κενά ασφαλείας του λογισμικού μιας

εφαρμογής ΙΜ, ή πιο συχνά από δούρειους ίππους που παρακινούν το χρήστη να εκτελέσει

κακόβουλο κώδικα. Όσον αφορά στην ασφάλεια εφαρμογών IM, ένας από τους μεγαλύτερους

κινδύνους είναι το κακόβουλο λογισμικό που εξαπλώνεται μέσω ΙΜ χωρίς καμία έγκριση από τον

χρήστη. Σε πολλές εφαρμογές ΙΜ υπάρχουν αρκετά κενά ασφαλείας και εάν κάποιος τα

εκμεταλλευτεί μπορεί να αποστείλει κάποιο μήνυμα που περιέχει κακόβουλο λογισμικό σε

οποιονδήποτε βρίσκεται στη λίστα επαφών ενός χρήστη, με αποτέλεσμα το κακόβουλο λογισμικό

να εξαπλωθεί πολύ γρήγορα. Χρησιμοποιώντας προγράμματα από-μεταγλώτησης (decompiler

programs) είναι τεχνικά εφικτό ένας επιτιθέμενος να εκτελέσει κώδικα στον Η/Υ ενός χρήστη και

σε ορισμένες περιπτώσεις να έχει πρόσβαση στα δεδομένα του. Οι εφαρμογές ΙΜ, αποτελούν ένα

ασύγχρονο σύστημα. Έτσι, όταν το σύστημα είναι απασχολημένο, τότε τα μηνύματα

μεταδίδονται όλο και πιο αργά και μετά από κάποιο σημείο μια συνομιλία καθίσταται αδύνατη.

2.2 Κρυπτογραφία

Αλγόριθμοι

Υπάρχουν αρκετοί αλγόριθμοι κρυπτογράφησης οι οποίοι χρησιμοποιούνται για να

κρυπτογραφηθεί και να αποκρυπτογραφηθεί ένα μήνυμα. Στη συνέχεια αυτής της ενότητας

γίνεται αναφορά στον τρόπο λειτουργίας τους καθώς και σε κάποια χαρακτηριστικά τους.

Συναρτήσεις κατακερματισμού (π.χ. MD5, MD4 SHA)

Τα συμμετρικά κλειδιά λειτουργούν «γεμίζοντας» τα δεδομένα εισόδου (input) ώστε να φτάσουν

ένα καθορισμένο μέγεθος. Στη συνέχεια το αρχικό μήνυμα (plain text) χωρίζεται σε κομμάτια και

γίνεται επεξεργασία για κάθε κομμάτι. Αυτό επαναλαμβάνεται αρκετές φορές, ώστε να

δημιουργηθεί ένα «αποτύπωμα» (fingerprint) ή συνάρτηση κατακερματισμού (hash) του αρχικού

κειμένου. Οι συναρτήσεις κατακερματισμού είναι αρκετά χρήσιμες για τον έλεγχο γνησιότητας

ενός αυθεντικού αρχείου και για να πιστοποιηθεί ότι το αρχείο αυτό δεν έχει αλλοιωθεί.

Page 16: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

6

Ασύμμετρα κλειδιά

Ένα παράδειγμα είναι η κρυπτογράφηση RSA (Rivest-Shamir-Adelman), που αποτελείται από

ένα ζεύγος κλειδιών, το δημόσιο κλειδί (PuKey) και το ιδιωτικό κλειδί (PrKey). Το δημόσιο

κλειδί χρησιμοποιείται για την κρυπτογράφηση και το ιδιωτικό κλειδί για την

αποκρυπτογράφηση των δεδομένων. Χρησιμοποιώντας τα δύο κλειδιά (PuKey, PrKey), το

Plaintext P κρυπτογραφείται και παράγεται το ciphertext C, όπως φαίνεται παρακάτω:

C = P PuKey modn

Στη συνέχεια για να ανακτήσουμε το αρχικό plaintext, κάνουμε αποκρυπτογράφηση:

P = C PrKey modn

O αλγόριθμος DSA λειτουργεί με παρόμοιο τρόπο και αποτελεί μια διαδεδομένη μέθοδο χρήσης

ζεύγους κλειδιών. Ωστόσο χρησιμοποιεί μια διαφορετική μέθοδο περισσότερο πολύπλοκη από

αυτή που χρησιμοποιεί ο αλγόριθμος RSA [3].

Υποδομή Δημόσιου Κλειδιού - PKI (Public Key Infrastructure)

Η Υποδομή Δημόσιου Κλειδιού βασίζεται στο σύστημα ασύμμετρων κλειδιών και τη δημιουργία

δημοσίων κλειδιών που μπορούν να διανεμηθούν στους χρήστες. Βέβαια, αυτό δεν είναι πάντα

αποδοτικό και απαιτεί κόστος καθώς προϋποθέτει την ύπαρξη ενός συστήματος που αποθηκεύει

και διαμοιράζει τα δημόσια κλειδιά , ώστε να αποσύρει παλαιά κλειδιά και να αυθεντικοποιεί τα

νέα.

Πρωτόκολλα ασφάλειας (π.χ. SSL/TLS)

Τα πρωτόκολλα ασφάλειας χρησιμοποιούνται από τους αλγόριθμους κρυπτογράφησης ώστε να

γίνει ευκολότερη η χρήση των αλγορίθμων αυτών, και εφαρμόζονται στα υπολογιστικά

συστήματα.

Page 17: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

7

Άλλα θέματα σχετικά με την κρυπτογραφία

Τα πρωτόκολλα ασφάλειας παρέχουν επαρκή ασφάλεια εάν υλοποιηθούν σωστά. Ωστόσο,

υπάρχουν ακόμη προβλήματα στη χρήση τους. Τα πιο σύγχρονα συστήματα είναι δύσκολα στη

χρήση τους και απαιτούν μια βασική κατανόηση της λειτουργίας τους. Ένα άλλο πρόβλημα

εξίσου σημαντικό, είναι η συνομιλία με περισσότερα από ένα άτομα (group chat). Το βασικό

πρόβλημα σε αυτήν την περίπτωση, είναι ότι ο καθένας πρέπει να ανταλλάξει κλειδί με όλους

τους υπόλοιπους χρήστες που συμμετέχουν στη συνομιλία, κάτι το οποίο μπορεί να είναι αρκετά

χρονοβόρο.

Περισσότερα σχετικά με Clients και Servers

Τα ΙΜ συστήματα που λειτουργούν σε ομότιμα δίκτυα είναι λίγα, ενώ οι περισσότερες εφαρμογές

που υλοποιούνται και βασίζονται σε λύσεις που χρησιμοποιείται κάποιος εξυπηρετητής

θεωρούνται πιο ασφαλείς. Όπως και στη βασική επικοινωνία, δεν υπάρχει απευθείας επικοινωνία

μεταξύ των clients. Στη συνέχεια παρατίθεται ο τρόπος με τον οποίο οι χρήστες

αυθεντικοποιούνται σε έναν εξυπηρετητή και τι συμβαίνει στη μεταξύ τους επικοινωνία.

Υπάρχουν κάποια κρίσιμα βήματα που πρέπει να γίνουν για την ασφάλεια του ΙΜ, όπως:

1. Εγγραφή

2. Login και logout, αυθεντικοποίηση και καταχώρηση των κωδικών πρόσβασης

3. Μεταφορά των δεδομένων

4. Ασφάλεια των χρηστών

5. Data Logging ή επιθέσεις Man-In-The-Middle

6. Ανθρώπινος παράγοντας, συνήθως ο πιο αδύναμος κρίκος

1) Εγγραφή

Κάποια IM συστήματα χρησιμοποιούν μια ιστοσελίδα για την εγγραφή ενός χρήστη. Συνήθως,

μεταξύ άλλων, καταχωρείται ένα όνομα χρήστη (username) και ένας κωδικός (password) σε μια

βάση δεδομένων η οποία θα χρησιμοποιηθεί για να ταυτοποιεί τα διαπιστευτήρια του χρήστη.

Χρειάζεται ιδιαίτερη προσοχή ώστε αυτή η διαδικασία να είναι απόλυτα ασφαλής, κάτι το οποίο

επιτυγχάνεται με τη χρήση πρωτοκόλλων όπως το SSL/TLS. Αφού τα δεδομένα για την

ταυτοποίηση καταχωρηθούν στη βάση δεδομένων, είναι απαραίτητο να παραμείνουν ασφαλή και

εκεί.

2) Είσοδος και αποσύνδεση χρήστη (login, logout), αυθεντικοποίηση και καταχώρηση των

κωδικών

Αφού δημιουργηθεί λογαριασμός σε ένα σύστημα, αυτός θα χρησιμοποιείται κάθε φορά που ο

χρήστης επιθυμεί να εισέλθει στο σύστημα. Κάποια ΙΜ συστήματα καταχωρούν αυτά τα

δεδομένα σε μορφή αρχικού κειμένου ή σε μια μορφή μηδαμινής κρυπτογράφησης. Για

παράδειγμα το Trillian κρυπτογραφεί κάθε χαρακτήρα ξεχωριστά, έτσι συγκρίνοντας δημοφιλείς

Page 18: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

8

και ευρέως χρησιμοποιούμενους κωδικούς μπορεί να αποκαλυφθεί ο πραγματικός κωδικός [4].

Άλλα συστήματα περισσότερο ασφαλή δεν καταχωρούν τους κωδικούς ασφαλείας τοπικά ή

καταχωρούν μια hash based εκδοχή του κωδικού. Υπάρχουν αρκετοί μέθοδοι αυθεντικοποίησης

όπως οι Kerdos, LDAP. Στις πιο σύγχρονες εκδοχές οι περισσότεροι clients χρησιμοποιούν τη

συνάρτηση κατακερματισμού MD5, η οποία λειτουργεί με τον κώδικα που είναι καταχωρημένος

και στον client και στον server. Για κάθε μια από αυτές τις μεθόδους αυθεντικοποίησης είναι

δύσκολη η ανάλυση τους καθώς ο τρόπος λειτουργίας τους δε δημοσιεύεται.

3) Μεταφορά δεδομένων

Έχουμε τρεις κύριους τύπους δεδομένων

- Αυθεντικοποίηση Χρήστη

- ΙΜ Δεδομένα

- Δεδομένα παρουσίας

Τα ΙΜ δεδομένα στα σύγχρονα ΙΜ συστήματα μπορούν να είναι προσβάσιμα στους άλλους

χρήστες του δικτύου. Μια λύση είναι η κρυπτογράφηση των δεδομένων με το σύστημα

Υποδομής Δημόσιου Κλειδιού (PKI) αλλά αυτό ενέχει μερικά προβλήματα όπως:

- Δυσκολία στην καταχώρηση των δεδομένων

- Απαιτείται η ανταλλαγή κλειδιών

- Δυσκολία στη δημιουργία group chat

- Μεγαλύτερο payload

Για παράδειγμα, το μήνυμα “hi” μπορεί να κρυπτογραφηθεί και το κρυπτομήνυμα να είναι ένα

μήνυμα 1045 χαρακτήρων.

4) Ασφάλεια Χρηστών

Ένα από τα προβλήματα με το ICQ πρωτόκολλο, ήταν η ευκολία να ξέρει κάποιος τη διεύθυνση

IP, ακόμη κι αν κάποιος δεν είναι έμπειρος σε τέτοια θέματα. Έχοντας πρόσβαση στη διεύθυνση

IP, είναι εύκολο κάποιος να μεταδώσει επικίνδυνα bugs στους clients. Σε όλα τα ομότιμα δίκτυα

(peer-to-peer) είναι δυνατή η χρήση του Netstat για τον προσδιορισμό της IP διεύθυνσης

οποιουδήποτε Η/Υ με τον οποίο υπάρχει σύνδεση (ακόμη και σε συστήματα που δεν είναι Instant

Messaging).

5) Data Logging ή επιθέσεις Man-In-The-Middle

Χωρίς τη χρήση κάποιας βασικής κρυπτογράφησης του κλειδιού, τα συστήματα είναι ευάλωτα

στις επιθέσεις. Η ίδια τεχνολογία που εφαρμόζεται για το ηλεκτρονικό ταχυδρομείο, μπορεί να

εφαρμοστεί και για τα IM συστήματα. Προς το παρόν η κύρια τεχνική δυσκολία είναι η δυσκολία

στη χρήση. Κρυπτογραφημένο data logging είναι διαθέσιμο μόνο στον PSI client. Μέχρι στιγμής

κανένας client δεν προσφέρει τη συγκεκριμένη λειτουργία, ωστόσο η AOL έχει κάνει δοκιμές σε

ένα σύστημα Υποδομής Δημόσιου Κλειδιού (PKI) όπου σχεδιάζεται να ενσωματωθεί στον ΑΙΜ

client.

6) Το ανθρώπινο στοιχείο, συνήθως ο πιο αδύναμος κρίκος

Σε κάθε υπολογιστικό σύστημα, ο τελικός χρήστης έχει τη μεγαλύτερη επιρροή στην ασφάλεια

αυτού του συστήματος και θα πρέπει να δείχνει ιδιαίτερη προσοχή, ώστε να μην στέλνει

εμπιστευτικά δεδομένα μη κρυπτογραφημένα, μέσω διαδικτύου. Η πλειονότητα των χρηστών

χρησιμοποιούν clients της AOL, MSN, Yahoo για να συνδεθούν στους παρόχους υπηρεσιών.

Page 19: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

9

Ωστόσο παραμένει στην ευθύνη του παροχέα υπηρεσιών η ασφάλεια τόσο του Server όσο και

του client.

Page 20: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

10

ΚΕΦΑΛΑΙΟ 3 - ΑΣΦΑΛΕΙΑ ΣΕ ΚΙΝΗΤΕΣ ΕΦΑΡΜΟΓΕΣ ΑΜΕΣΩΝ

ΜΗΝΥΜΑΤΩΝ

Τα τελευταία χρόνια η νέα γενιά εφαρμογών για κινητές συσκευές έχει εξαπλωθεί σε μεγάλο

βαθμό όπου προσφέρονται υπηρεσίες όπως επικοινωνία μέσω διαδικτύου και επικοινωνία μεταξύ

των χρηστών μέσω άμεσων μηνυμάτων. Οι υπηρεσίες αυτές στοχεύουν να αντικαταστήσουν τον

παραδοσιακή επικοινωνία με SMS και συνήθως είναι δωρεάν. Στη συνέχεια γίνεται μια ανάλυση

των μοντέλων ασφάλειας τέτοιων δημοφιλών εφαρμογών με έμφαση στους μηχανισμούς

αυθεντικοποίησης.

Αρκετές εφαρμογές που εφαρμόζουν στοιχειώδη πρωτόκολλα ασφάλειας συγκλίνουν σε μία

κοινή αρχή: τη χρήση του τηλεφωνικού αριθμού ως βάση για την αυθεντικοποίηση του χρήστη.

Κατά την είσοδο σε μία εφαρμογή, το σύστημα ζητάει από το χρήστη το τηλεφωνικό νούμερο.

Ακόμη και συσκευές που δε λειτουργούν ως τηλέφωνα (π.χ. Wi-Fi-only tablet) να μπορούν να

ενεργοποιηθούν χρησιμοποιώντας τον αριθμό μιας άλλης συσκευής. Οι εφαρμογές αυτές

χρησιμοποιούν το αριθμό μόνο για την ταυτοποίηση του χρήστη και όχι για επικοινωνία μέσω

του παραδοσιακού δικτύου κινητής τηλεφωνίας. Ωστόσο το αρνητικό είναι ότι οι εφαρμογές

αυτές απαγορεύουν την είσοδο, μόνο σε όποιον δε διαθέτει τον αριθμό.

Στην ενότητα αυτή παρουσιάζεται μία έρευνα που έγινε το 2012 [5]. Σε αυτή την έρευνα

πραγματοποιήθηκαν έλεγχοι και επιθέσεις ασφαλείας σε εννέα εφαρμογές IM για κινητά

τηλέφωνα. Από τις επιθέσεις που έγιναν, προέκυψαν κενά ασφαλείας των εφαρμογών αυτών.

Ωστόσο ενδέχεται αυτά τα κενά ασφαλείας να έχουν καλυφθεί ή να καλυφθούν στο μέλλον.

Στις συγκεκριμένες εφαρμογές που αναλύονται, έχουν ληφθεί μέτρα για να αποτραπεί η

πρόσβαση σε μη εξουσιοδοτημένους χρήστες οι οποίοι προσποιούνται έναν άλλον χρήστη

προσπαθώντας να αυθεντικοποιηθούν με έναν αριθμό του οποίου δεν είναι κάτοχοι. Σε διάφορες

εφαρμογές οι οποίες χρησιμοποιούν τον αριθμό για την αρχική αυθεντικοποίηση, γίνεται η

επαλήθευση του χρήστη με την μέθοδο αποστολής SMS. Στον πίνακα 3-1 παρουσιάζονται οι

δυνατότητες που υποστηρίζουν οι επιλεγμένες πλατφόρμες κινητών τηλεφώνων οι οποίες

αναλύθηκαν.

Page 21: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

11

Πίνακας 3-1 Σύνοψη εφαρμογών με τα χαρακτηριστικά τους [5]

Μηχανισμός αυθεντικοποίησης και Υποκλοπή λογαριασμού

Από τις εφαρμογές που αναλύθηκαν, καμία δεν εξάγει τον αριθμό του τηλεφώνου από τη

συσκευή αλλά το ζητάει από τον χρήστη. Η αυθεντικοποίηση γίνεται με την αποστολή

ενός μηνύματος SMS το οποίο περιέχει έναν κωδικό και στη συνέχεια ζητείται από το

χρήστη να τον εισάγει στην εφαρμογή. Στην έρευνα που πραγματοποιήθηκε [5], έγινε

ανάλυση της επικοινωνίας μεταξύ συσκευής και του εξυπηρετητή κατά τη διάρκεια της

αρχικής εγκατάστασης και έγινε έλεγχος εάν ο επιτιθέμενος μπορεί να υποκλέψει

λογαριασμούς χρησιμοποιώντας τον αριθμό ενός άλλου χρήστη ως δικό του.

Διαχείριση μηνυμάτων και πλαστογράφηση ID αποστολέα

Σε αυτή τη φάση αναλύθηκε η επικοινωνία μεταξύ της συσκευής και του εξυπηρετητή

κατά τη διάρκεια ανταλλαγής μηνυμάτων. Εδώ ο επιτιθέμενος επιχειρεί να στείλει

μηνύματα με πλαστογραφημένο το ID του αποστολέα. Ο επιτιθέμενος, ενδέχεται να το

κάνει χωρίς να υποκλέψει το λογαριασμό του εξουσιοδοτημένου χρήστη. Η αλλοίωση

ενός μηνύματος κατά τη διάρκεια της μεταφοράς είναι μια απειλή, ωστόσο οι

περισσότερες εφαρμογές υποστηρίζουν κρυπτογραφημένη επικοινωνία με τον

εξυπηρετητή και μια τέτοιου είδους επίθεση συνήθως δεν είναι εφικτή.

Μη ζητηθείσα επικοινωνία

Οι περισσότερες υπηρεσίες πραγματοποιούν κλείσεις ή/και αποστέλλουν μηνύματα SMS

κατά τη διάρκεια της επαλήθευσης του χρήστη. Ο επιτιθέμενος μπορεί να κάνει χρήση

αριθμού ενός άλλου χρήστη στη διαδικασία της εγκατάστασης ώστε να αποστείλει

ενοχλητικά μηνύματα ή να πραγματοποιήσει κλήσεις στη συσκευή του θύματος, χωρίς να

αποκαλύψει την ταυτότητά του.

Enumeration

Οι περισσότερες εφαρμογές ανεβάζουν το βιβλίο διευθύνσεων του χρήστη στον

εξυπηρετητή και συγκρίνουν τις εγγραφές με μια λίστα από εγγεγραμμένους χρήστες

(εκτός από το EasyTalk που χρησιμοποιεί διαφορετικό μηχανισμό και αποστέλλει μόνο

Page 22: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

12

τον αριθμό όπως έχει πληκτρολογηθεί). Ο εξυπηρετητής επιστρέφει ένα υποσύνολο των

επαφών του χρήστη που χρησιμοποιούν την συγκεκριμένη υπηρεσία. Αναλύθηκε πως

μπορεί να χρησιμοποιηθεί αυτός ο μηχανισμός για να απαριθμήσει του χρήστες της

υπηρεσίας. Το κύριο πρόβλημα που προκύπτει είναι ότι ένας επιτιθέμενος μπορεί να

αντλήσει χρήσιμες πληροφορίες σχετικά με την συσκευή του χρήστη και το λειτουργικό

σύστημα. Αυτό δίνει τη δυνατότητα στον επιτιθέμενο να πραγματοποιήσει

εξειδικευμένες, όσον αφορά το λειτουργικό σύστημα, επιθέσεις.

Επεξεργασία μηνυμάτων Status

Σε κάποιες από τις εφαρμογές επιτρέπεται στο χρήστη να καθορίσει το status (online,

offline, busy) το οποίο κοινοποιείται στου υπόλοιπους χρήστες που έχει στη λίστα

διευθύνσεων. Σε αυτόν το έλεγχο λήφθηκαν υπόψη δύο απειλές. Η μία για αλλαγή του

status του χρήστη από τον επιτιθέμενο. Η δεύτερη σχετίζεται με την ιδιωτικότητα και

έναν design error. Δεν είναι μόνο πιθανό να μάθουμε εάν ένας χρήστης έχει εγκαταστήσει

την εφαρμογή, αλλά και το μήνυμα status ενός χρήστη είναι φανερό στους υπόλοιπους

χρήστες στων οποίων τη λίστα περιλαμβάνεται. Εφόσον δε χρειάζεται επικύρωση για την

αποθήκευση ενός αριθμού στην λίστα διευθύνσεων, ο επιτιθέμενος μπορεί πολύ εύκολα

να έχει πρόσβαση στα μηνύματα status όλων των χρηστών στις υπηρεσίες που είναι

απροστάτευτες σε τέτοιου είδους επιθέσεις.

Στον πίνακα 3-2 παρουσιάζεται μία σύνοψη με τις επιθέσεις ασφαλείας που

πραγματοποιήθηκαν και εάν ήταν επιτυχείς η όχι.

Πίνακας 3-2 Σύνοψη για τις επιθέσεις ασφάλειας [5]

3.1 Μηχανισμός αυθεντικοποίησης και υποκλοπή λογαριασμού

WhatsApp

Το WhatsApp messenger είναι μία από τις δημοφιλέστερες εφαρμογές IM. Την εφαρμογή

υπολογίζεται ότι τη χρησιμοποιούν εκατομμύρια χρήστες. Έχει καταγραφεί σε μια μέρα,

Page 23: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

13

ανταλλαγή άνω του ενός δισεκατομμυρίου μηνυμάτων, μεταξύ των χρηστών, μέσω της

εφαρμογής. Η έκδοσή του υπάρχει για τις πλατφόρμες Android, Blackberry, iOS και Symbian.

Για την προστασία από μη εξουσιοδοτημένους χρήστες αποστέλλεται ένας κωδικός 4 ψηφίων με

SMS και ο χρήστης τον εισάγει στην εφαρμογή. Παρατηρήθηκε ότι αυτή η διαδικασία είναι

ευάλωτη καθώς το PIN της αυθεντικοποίησης αρχικοποιείται στη συσκευή (ενώ, για λόγους

ασφαλείας θα έπρεπε να αρχικοποιείται στον εξυπηρετητή), αποστέλλεται στον εξυπηρετητή

μέσω μιας HTTPS σύνδεσης και ο εξυπηρετητής δημιουργεί και στέλνει το μήνυμα μέσω ενός

proxy στη συσκευή. Ο επιτιθέμενος μπορεί να χρησιμοποιήσει αυτόν τον μηχανισμό και μέσω

ενός proxy-server να υποκλέψει τον κωδικό της αυθεντικοποίησης. Έτσι ο επιτιθέμενος μπορεί να

αυθεντικοποιηθεί και να ανταλλάξει μηνύματα για λογαριασμό του εξουσιοδοτημένου χρήστη

και ο τελευταίος να μην έχει πρόσβαση στην εφαρμογή. Η διαδικασία αυτή φαίνεται στο σχήμα

3-1.

Σχήμα 3-1 Επίθεση κατά την αυθεντικοποίηση του WhatsApp [5]

Tango and Voypi

Οι εφαρμογές Tango και Voypi έχουν κάποιους κοινούς μηχανισμούς. Όπως συμβαίνει και με το

WhatsApp, οι εφαρμογές αυτές ζητούν τον αριθμό τηλεφώνου από το χρήστη για να γίνει η

εγγραφή και να καταχωρηθεί στο σύστημα. Εάν ο αριθμός ενός χρήστη δεν είναι

καταγεγραμμένος στο σύστημα, δε γίνεται καμία αυθεντικοποίηση. Η αυθεντικοποίηση με SMS

γίνεται μόνο όταν ο αριθμός έχει καταχωρηθεί στο σύστημα. Δηλαδή, εάν ένας αριθμός δεν είναι

καταχωρημένος στις εφαρμογές Tango και Voypi, κάποιος μπορεί να τον χρησιμοποιήσει χωρίς

ταυτοποίηση με SMS. Έτσι, εάν ο χρήστης (θύμα) δεν είναι εγγεγραμμένος στην υπηρεσία και

άρα δεν είναι καταχωρημένος στο σύστημα, ένας επιτιθέμενος μπορεί να υποδυθεί τον

συγκεκριμένο χρήστη γιατί δε θα γίνει καμία αυθεντικοποίηση.

Page 24: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

14

HeyTell

Η εφαρμογή δεν υποστηρίζει κανενός είδους αυθεντικοποίηση. Κατά τη διάρκεια της

εγκατάστασης ο χρήστης επιλέγει τον αριθμό κινητού από το βιβλίο διευθύνσεων ή δημιουργεί

νέα καταχώριση και η συσκευή συνδέεται με τον επιλεγμένο αριθμό χωρίς καμία επαλήθευση.

Επομένως μπορεί ο καθένας να δημιουργήσει λογαριασμό χρησιμοποιώντας οποιοδήποτε αριθμό.

WowTalk

Η εφαρμογή WowTalk βασίζει τον μηχανισμό εγγραφής, δηλαδή τη διαδικασία κατά την οποία

ένας χρήστης κάνει εγγραφή στην υπηρεσία, στην επαλήθευση μέσω SMS. O χρήστης εισάγει το

αριθμό τον οποίο αποστέλλει στον εξυπηρετητή. O εξυπηρετητής δημιουργεί τον κωδικό και τον

αποστέλλει πίσω στον χρήστη με SMS. Ωστόσο, ο εξυπηρετητής αποστέλλει τον κωδικό στη

συσκευή με HTTPS ώστε να ελέγξει εάν αυτό που θα εισάγει ο χρήστης είναι το σωστό.

Χρησιμοποιώντας SSL proxy ώστε να παρέμβουμε στην επικοινωνία με τον εξυπηρετητή

μπορούμε να αποκτήσουμε τον κωδικό αυτό. Με αυτόν τον τρόπο, μπορεί να γίνει υποκλοπή ενός

λογαριασμού WowTalk όπως φαίνεται στο σχήμα 3-2.

Σχήμα 3-2 Επίθεση στην εφαρμογή WowTalk [5]

EasyTalk

Η εφαρμογή EasyTalk χρησιμοποιεί SMS για την επαλήθευση του αριθμού τηλεφώνου. Μετά το

αίτημα καταχώρισης της συσκευής, ο διακομιστής δημιουργεί έναν κωδικό που τον αποστέλλει

τη συσκευή με SMS. Μόλις ο χρήστης λάβει αυτόν τον κωδικό, τον εισάγει στην εφαρμογή και

στη συνέχεια τον αποστέλλει πίσω στο διακομιστή για επαλήθευση. Ο διακομιστής απαντάει στη

συσκευή είτε με “ΟΚ” εάν ο κωδικός είναι σωστός, είτε με “ERROR” εάν είναι λάθος (σχήμα 3-

3). Ωστόσο έγινε δυνατή η αυθεντικοποίηση ενός client αλλοιώνοντας το μήνυμα του διακομιστή

Page 25: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

15

από “ERROR” σε “OK”. Ο διακομιστής δεν αντιλήφθηκε την αλλοίωση του μηνύματος και

διατήρησε τη συσκευή αυθεντικοποιημένη.

Σχήμα 3-3 Αυθεντικοποίηση EasyTalk [5]

Viber

Συγκριτικά με άλλες εφαρμογές, η εφαρμογή Viber χρησιμοποιεί έναν καλά σχεδιασμένο

μηχανισμό αυθεντικοποίησης, όπως φαίνεται στο σχήμα 3-4. Η εφαρμογή ζητά από το χρήστη

τον τηλεφωνικό αριθμό του και μόλις τον λάβει ο διακομιστής, δημιουργεί έναν κωδικό που τον

αποστέλλει με SMS στον χρήστη. Εναλλακτικά ο χρήστης μπορεί να ζητήσει μια τηλεφωνική

κλήση από το Viber, όπου ένας μηχανισμός δημιουργίας ομιλίας μεταδίδει στο χρήστη τον

κωδικό, με ένα ηχητικό μήνυμα. Στη συνέχεια ο χρήστης εισάγει τον κωδικό ο οποίος

αποστέλλεται πίσω στον διακομιστή για επαλήθευση. Κανένα ευαίσθητο δεδομένο

αυθεντικοποίησης δε μεταδίδεται μεταξύ της συσκευής και του διακομιστή.

Σχήμα 3-4 Αυθεντικοποίηση Viber [5]

Forfone and eBuddy XMS

Ο μηχανισμός αυθεντικοποίησης των εφαρμογών Forfone και eBuddy XMS είναι παρόμοιος με

αυτόν της εφαρμογής Viber και κατά συνέπεια δεν είναι τόσο ευάλωτος στις επιθέσεις που

βασίζονται στην παρεμπόδιση της επικοινωνίας μεταξύ της συσκευής και του διακομιστή.

Page 26: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

16

3.2 Αλλοίωση του ID του αποστολέα (Sender ID)

Παρόλο που αρκετές εφαρμογές διαθέτουν μηχανισμούς ασφαλείας, υπάρχουν περιπτώσεις

απάτης με τη χρήση του ID του αποστολέα (sender ID), δηλαδή τον μοναδικό αριθμό που

ταυτοποιεί κάθε χρήστη. Στις εφαρμογές Voypi και Forfone χρησιμοποιείται ένας μηχανισμός

που βασίζεται σε HTTPS requests.

Voypi

Το μη-κρυπτογραφημένο HTTP request που χρησιμοποιείται για τη δημιουργία των μηνυμάτων

που ανταλλάσσονται μεταξύ των χρηστών, έχει τέσσερις GET παραμέτρους: το νούμερο του

αποστολέα, το νούμερο του παραλήπτη, το μήνυμα και το time stamp. Δε χρειάζεται κανενός

είδους αυθεντικοποίηση για την αποστολή του μηνύματος αυτού και επομένως ο επιτιθέμενος

μπορεί να παραβιάσει το ID του αποστολέα.

Forfone

Στο πρωτόκολλο μηνυμάτων της εφαρμογής χρησιμοποιείται ένας επιπλέον identifier του

αποστολέα, για την αποστολή μηνυμάτων. Για την αυθεντικοποίηση χρησιμοποιούνται το IMSI

της κάρτας SIM στις συσκευές Android και το UDID (Unique Device Identifier) στις συσκευές

iOS. Παρόλο πού αυτή η επιπλέον παράμετρος κάνει δυσκολότερη την αλλοίωση ID του

αποστολέα, δεν μπορεί να θεωρηθεί ασφαλής μηχανισμός αυθεντικοποίησης καθώς αυτοί οι δύο

identifiers μπορούν να προσπελαστούν από μία εφαρμογή τρίτου κατασκευαστή. Στον πίνακα 3-

3 συνοψίζεται το σχέδιο του πρωτόκολλου μηνυμάτων του Voypi και του Forfone.

Πίνακας 3-3 Πρωτόκολλο μηνυμάτων Voypi και Forfone [5]

Page 27: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

17

3.3 Μη ζητηθείσα επικοινωνία

Όπως αναφέρθηκε προηγουμένως στις περισσότερες περιπτώσεις χρησιμοποιείται η αποστολή

SMS για την αυθεντικοποίηση. Ωστόσο αυτός ο μηχανισμός μπορεί να χρησιμοποιηθεί για την

αποστολή SMS από μη εξουσιοδοτημένους χρήστες. Στην εφαρμογή WhatsApp παρατηρήθηκε

κενό ασφάλειας το οποίο δίνει τη δυνατότητα αλλοίωσης ενός τέτοιου μηνύματος δίνοντας τη

δυνατότητα σε κάποιον να στείλει δωρεάν SMS οπουδήποτε.

Σύμφωνα με αυτήν την προσέγγιση, χρησιμοποιώντας δηλαδή τον μηχανισμό αυθεντικοποίησης,

μπορούμε να στέλνουμε ανεπιθύμητα μηνύματα σε έναν αριθμό κινητού με το SMS που περιέχει

τον κωδικό ενεργοποίησης. Παρόλα αυτά υπάρχουν κάποιοι έλεγχοι για ανεπιθύμητη

αλληλογραφία (spamming) και αποτροπή μαζικής αποστολής μηνυμάτων. Ωστόσο ένας

επιτιθέμενος είναι ικανός να στέλνει request, με μικρότερη συχνότητα, ώστε αυτά να μην

απορρίπτονται. Αυτή η προσέγγιση λειτουργεί με τις ακόλουθες εφαρμογές: WhatsApp, Viber,

Tango, eBuddy XMS, WowTalk, Voypi, Forfone και EasyTalk. Πάραυτα, μόνο στο WhatsApp

υπάρχει δυνατότητα στην παρέμβαση του περιεχομένου του SMS αυθεντικοποίησης, γιατί στις

υπόλοιπες εφαρμογές, αυτή τη δυνατότητα δεν είναι χρήσιμη. Στο σχήμα 3-5 βλέπουμε πως

συμβαίνει μια μη ζητηθείσα επικοινωνία.

Σχήμα 3-5 Ανεπιθύμητη επικοινωνία – Γενική προσέγγιση [5]

Viber

Η εφαρμογή μηνυμάτων Viber επιτρέπει την εκτέλεση ακόμη πιο ενοχλητικών επιθέσεων. Στην

περίπτωση που αποσταλεί το SMS για την αυθεντικοποίηση ενός χρήστη και ο νόμιμος

παραλήπτης δεν απαντήσει (με καταχώρηση του κωδικού που έλαβε), ο επιτιθέμενος μπορεί να

επιλέξει να γίνει αυθεντικοποίηση μέσω τηλεφωνικής κλήσης, όπως φαίνεται στο σχήμα 3-6.

Page 28: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

18

Σχήμα 3-6 ΑποστολήSMS και κλήσεις με το Viber [5]

WhatsApp

To WhatsApp παρουσιάζει ένα επιπλέον κενό ασφάλειας. Παρέχει τη δυνατότητα ο επιτιθέμενος

να μπορεί να στείλει δωρεάν SMS οπουδήποτε. Σύμφωνα με τον μηχανισμό αυθεντικοποίησης

της εφαρμογής, ο κωδικός αυθεντικοποίησης επιλέγεται από τον αποστολέα και αποστέλλεται (με

τη μορφή αρχικού κειμένου) στον διακομιστή του WhatsApp και αυτός με τη σειρά του τον

αποστέλλει με SMS πίσω στη συσκευή. Ο συγκεκριμένος κωδικός αποτελείται από ένα String με

τις λέξεις “WhatsApp code” ακολουθούμενο από τον κωδικό PIN που δημιουργείται από μια

γεννήτρια τυχαίων αριθμών στη συσκευή του αποστολέα. Παρεμβαίνοντας και αλλοιώνοντας

αυτό το μήνυμα με ένα άλλο αλφαριθμητικό, το μήνυμα παραδίδεται κανονικά στον χρήστη από

τον διακομιστή. Έτσι ένας μη εξουσιοδοτημένος χρήστης μπορεί να στείλει SMS με αυθαίρετο

περιεχόμενο στον στόχο. Αυτή η τεχνική μπορεί να χρησιμοποιηθεί είτε για δωρεάν επικοινωνία

είτε για αποστολή spam μηνυμάτων. Όπως φαίνεται στο σχήμα 3-7, το URL αίτημα για

αποστολή μηνύματος αυθεντικοποίησης έχει την παρακάτω μορφή:

https://s.whatsapp.net/client/iphone/ smsproxy.php?to=\<receiver\> &auth=\<text message\>.

Σχήμα 3-7 Δωρεάν SMS με το WhatsApp [5]

Page 29: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

19

3.4 Άλλα τρωτά σημεία

WhatsApp

Ένα πρόσθετο χαρακτηριστικό του WhatsApp είναι η δυνατότητα να δημιουργηθεί ένα μήνυμα

status, ένα μήνυμα δηλαδή που ενημερώνει το σύστημα για την κατάσταση του χρήστη (online,

offline, busy), παρόμοιο με αυτό που παράγουν άλλοι IM clients όπως το Skype. Παράλληλα,

αυτό το μήνυμα μπορεί να αναγνωσθεί από τις επαφές του χρήστη. Για αλλαγή στο μήνυμα status

δε χρειάζεται κανενός είδους αυθεντικοποίηση και έτσι ο καθένας μπορεί να αλλάξει το status

κάποιου άλλου χρήστη απλά στέλνοντας ένα μήνυμα HTTPS.

WowTalk

Όπως και στο WhatsApp έτσι και στο WowTalk παρέχεται η δυνατότητα ρύθμισης του status του

χρήστη με μια απλή εντολή HTTPS.

Voypi

Ακόμη έχουν εντοπιστεί κάποια επιπλέον τρωτά σημεία στην εφαρμογή Voypi. Υπάρχει

δυνατότητα αναζήτησης της λίστας των Voypi χρηστών, σε έναν άλλον χρήστη. Αυτό μπορεί να

επιτευχθεί με μία απλή εντολή HTTPS, χωρίς να χρειάζεται επιπλέον αυθεντικοποίηση, και με

τον διακομιστή να απαντά αποστέλλοντας τη λίστα με τους χρήστες του Voypi, που βρίσκονται

στη συσκευή του θύματος περιέχοντας ονόματα και τηλεφωνικούς αριθμούς. Επίσης ένα άλλο

τρωτό σημείο είναι ο επιτιθέμενος να ζητήσει να λάβει τα μηνύματα από άλλους χρήστες χωρίς

αυθεντικοποίηση. Ο client Voypi θα πρέπει να είναι ενεργός ώστε να μπορεί να παραλαμβάνει

μηνύματα. Όταν client Voypi είναι συνδεδεμένος, το Voypi κρατάει για μια περίοδο 7

δευτερολέπτων τα μηνύματα εσωτερικά για να παραλειφθούν από τον παραλήπτη. Όσο ένας

client δεν έχει παραλάβει ένα μήνυμα, έναν επιτιθέμενος μπορεί να κλέψει το μήνυμα αυτό. Σε

αυτήν την περίπτωση ο νόμιμος παραλήπτης δε θα μπορέσει να παραλάβει καθόλου το μήνυμα

που προορίζεται για αυτόν.

Page 30: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

20

3.5 Κρυπτογράφηση στη βάση δεδομένων του WhatsApp

Η εφαρμογή WhatsApp διατηρεί μια βάση δεδομένων στη συσκευή με πληροφορίες όπως η λίστα

επαφών και οι αποθηκευμένες συνομιλίες . H ασφάλεια παίζει σημαντικό ρόλο στην προστασία

της ιδιωτικότητας των χρηστών και αποτέλεσε αντικείμενο έρευνας για τους ερευνητές D.

Cortjens, A. Spruyt και W.F.C. Wieringa, η οποία δημοσιεύτηκε το Δεκέμβριο του 2011 [6]. Στην

έρευνα αυτή αναλύεται η πιθανότητα πρόσβασης στα δεδομένα μιας κρυπτογραφημένης βάσης

του WhatsApp και σκοπός της έρευνας είναι να αποσαφηνιστούν οι παρακάτω παράμετροι:

Τι είδους κρυπτογράφηση χρησιμοποιείται για τις βάσεις δεδομένων του WhatsApp στα

λειτουργικά συστήματα του Android, BlackBerry και iPhone.

Πόσο δυνατή είναι η κρυπτογράφηση στα λειτουργικά συστήματα του Android,

BlackBerry και iPhone.

Με ποιο τρόπο δημιουργείται το κρυπτογραφικό κλειδί στα συστήματα του Android και

BlackBerry.

Πού καταχωρείται το κρυπτογραφικό κλειδί στα συστήματα του Android και BlackBerry.

Ποιες είναι οι διαφορές μεταξύ των λειτουργικών συστημάτων του Android, BlackBerry

και iPhone αναφορικά με την κρυπτογράφηση των βάσεων δεδομένων.

Η πιθανότητα αποκρυπτογράφησης της βάσης δεδομένων του WhatsApp.

Για την εξαγωγή των συμπερασμάτων σχεδιάστηκαν διαφορετικά σενάρια από τους ερευνητές,

με διαφορετικές παραμέτρους σχετικά με την κρυπτογράφηση της βάσης δεδομένων του

WhatsApp. Τελικά, κάποια από αυτά μας έδωσαν αρκετά χρήσιμα συμπεράσματα σχετικά με τη

διαδικασία της κρυπτογράφησης και πως αυτή υλοποιείται. Το επίπεδο ασφάλειας της

κρυπτογράφησης μελετήθηκε με την ανάλυση εντροπίας (entropy analysis) με τη χρήση του

CrypTool και με συμπίεση αρχείων. Η τοποθεσία του κρυπτογραφικού κλειδιού μελετήθηκε με

ανάλυση λογισμικού και με τη χρήση από-μεταγλωττιστών (decompilers). Υπάρχουν αρκετές

διαφορές ανάμεσα στα λειτουργικά συστήματα του Android, BlackBerry και iPhone, αναφορικά

με την κρυπτογράφηση των βάσεων δεδομένων του WhatsApp. Στον πίνακα 3-4 παρουσιάζονται

σχηματικά αυτές οι διαφορές. Σε κάθε γραμμή του πίνακα περιγράφεται καθεμία από τις

παραμέτρους που τέθηκαν παραπάνω.

Page 31: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

21

Android BlackBerry iPhone

General

OS Android BlackBerry iOS

Encryption

Entropy Low High High

Algorithm AES AES AES

Key Size 192-bit 265-bit 265-bit

Key Storage software package OS OS

Decryption

Possible? yes, by a created

Python script

yes, by chip-of

(very complex)

yes, by UFED

Physical Analyzer

Πίνακας 3-4 Σύγκριση υλοποίησης του WhatsApp στα Android, BlackBerry και iPhone [6]

Ο πίνακας σύγκρισης δείχνει ότι υπάρχει μια συσχέτιση μεταξύ των διαφορών. Ο αλγόριθμος που

χρησιμοποιήθηκε στα διαφορετικά λειτουργικά συστήματα είναι κυρίως ο AES. Ο συγκεκριμένος

αλγόριθμος θεωρείται ασφαλής εφόσον βέβαια υλοποιηθεί σωστά. Ο τρόπος υλοποίησης του

αλγορίθμου προσδιορίζει τον δείκτη ασφάλειας του συστήματος. Αυτό είναι το σημείο όπου το

σύστημα του Android αποτυγχάνει. Το κλειδί καταχωρείται σε μία από τις κλάσεις του πακέτου

του λογισμικού και είναι καθολικό για κάθε Android. Στις υλοποιήσεις του BlackBerry και του

iPhone γίνεται μέσω του λειτουργικού συστήματος και το κλειδί αποθηκεύεται σε μια

προστατευμένη τοποθεσία. Αυτή η υλοποίηση είναι αρκετά καλύτερη, γιατί σε μία BlackBerry ή

iPhone συσκευή δεν είναι δυνατή η πρόσβαση σε αυτήν την τοποθεσία. Το λειτουργικό σύστημα

του Android προσφέρει έναν παρόμοιο τρόπο αποθήκευσης κλειδιών, αλλά δεν αξιοποιείται.

Αυτό προσδίδει στην υλοποίηση στο Android ένα πιθανό ρίσκο. Αυτό θεωρείται ρίσκο μεσαίου

επιπέδου, γιατί παρόλο που το κλειδί βρίσκεται σε κίνδυνο, εξακολουθεί να απαιτείται φυσική

πρόσβαση στη συσκευή ή στην κάρτα μνήμης της συσκευής.

Παρόλα αυτά, όλα τα δεδομένα είναι δυνατόν να αποκρυπτογραφηθούν με τη σωστή γνώση της

εφαρμογής και του λειτουργικού συστήματος. Σύμφωνα με την έρευνα που έγινε με τη χρήση του

UFED Physical Analyzer, διαπιστώθηκε οτι το συγκεκριμένο πρόγραμμα έχει τη δυνατότητα να

δημιουργήσει μια διαμόρφωση της συσκευής του iPhone και μπορεί να αποκωδικοποιήσει

(decode) τις πληροφορίες σε δεδομένα τέτοια ώστε να μπορεί κάποιος να τα διαβάσει. Το UFED

Physical Analyzer μπορεί επίσης να αποκρυπτογραφήσει τα chip-off (disordered 2) δεδομένα από

την BlackBerry συσκευή, αλλά για αυτήν τη διαδικασία το chip πρέπει να εξαχθεί από τη

Page 32: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

22

συσκευή. Ακόμη, το αποτέλεσμα της έρευνας, ήταν η εν μέρει αποκρυπτογράφηση της βάσης

δεδομένων του WhatsApp στη συσκευή Android με το Python script που δημιουργήθηκε.

Παρακάτω αναφέρονται συνοπτικά κάποια ευρήματα της έρευνας για τα τρία λειτουργικά

συστήματα που αναλύθηκαν.

Android

Η υλοποίηση του WhatsApp στην πλατφόρμα του Android χρησιμοποιεί μια

κρυπτογράφηση AES 192-bit για τον φάκελο της βάσης δεδομένων. Ωστόσο αυτή η

υλοποίηση δεν έγινε με τρόπο ώστε να αποφευχθούν τα λάθη και τα κενά ασφάλειας. Η

καταχώρηση του κλειδιού στο πακέτο λογισμικού δεν αποτελεί αρκετά ασφαλή λύση.

Έχει αποδειχθεί ότι είναι πιθανή η εξαγωγή του κρυπτογραφικού κλειδιού από το πακέτο

λογισμικού. Με ένα Python script καταστάθηκε δυνατή η αποκρυπτογράφηση του

αρχείου της βάσης δεδομένων και η πρόσβαση στα δεδομένα μέσα σε αυτήν.

BlackBerry

Το περιβάλλον του BlackBerry παίζει μεγάλο ρόλο στην κρυπτογράφηση της βάσης

δεδομένων. Η ανάλυση στην κάρτα microSD, έδειξε μια μεγάλη εντροπία, δηλαδή

αρκετά δυνατή κρυπτογράφηση σε ικανοποιητικό επίπεδο. Ο REM φάκελος χρησιμοποιεί

κρυπτογράφηση AES 256-bit, αλλά χωρίς το σωστό κλειδί (συσκευή ή password) το

αρχείο της βάσης δεδομένων είναι αδύνατον να αποκρυπτογραφηθεί. Σε συγκεκριμένες

περιπτώσεις είναι πιθανή η εξαγωγή αυτών των κρυπτογραφημένων φακέλων στην

αρχική αποκρυπτογραφημένη μορφή, αλλά μόνο εάν η BlackBerry συσκευή είναι

κομμάτι του δικτύου του BlackBerry Enterprise Server.

iPhone

Η πλατφόρμα του iPhone χρησιμοποιεί hardware κρυπτογράφηση. Η hardware

κρυπτογράφηση χρησιμοποιεί κλειδί AES 256-bit, και μπορεί να ενισχυθεί με την

ενεργοποίηση προστασίας δεδομένων. Υπάρχει ήδη λογισμικό το οποίο μπορεί

χρησιμοποιηθεί σε iPhone και να αποκρυπτογραφήσει το περιεχόμενο. Αυτό

περιλαμβάνει την βάση δεδομένων του WhatsApp η οποία μπορεί εύκολα να

προσπελαστεί.

Page 33: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

23

ΚΕΦΑΛΑΙΟ 4 - Η ΕΦΑΡΜΟΓΗ MILC

Η εφαρμογή MILC είναι μια εφαρμογή κοινωνικής δικτύωσης, ανταλλαγής άμεσων μηνυμάτων

(Instant Messaging) και αλληλεπίδρασης των χρηστών μεταξύ τους με χρήση σύγχρονων

μεθόδων, γραφικών και λειτουργικού περιβάλλοντος. Η εφαρμογή έχει σκοπό την χρήση της από

χρήστες οι οποίοι είναι φοιτητές του Πανεπιστημίου Αιγαίου και επιθυμούν να επικοινωνήσουν

μεταξύ τους με άμεσα μηνύματα (chat), να ανταλλάξουν αρχεία και γενικότερα να

αλληλεπιδράσουν με άλλους χρήστες.

Πρόσβαση στην εφαρμογή έχουν τα μέλη του Πανεπιστημίου. Δηλαδή μόνο όσοι είναι φοιτητές

του Πανεπιστημίου ή καταχωρημένοι στο σύστημα και στις βάσεις δεδομένων του

Πανεπιστημίου μπορούν να χρησιμοποιήσουν την εφαρμογή. Για να εισέλθει στην εφαρμογή ο

κάθε χρήστης, χρησιμοποιεί το μοναδικό όνομα χρήστη (username) και έναν κωδικό (password)

που του έχουν χορηγηθεί από το Πανεπιστήμιο, και αφού γίνει επαλήθευση των στοιχείων που

έχει εισάγει, στη συνέχεια του δίνεται η δυνατότητα να εισέλθει στο σύστημα και να ανοίξει η

εφαρμογή. Επίσης, ο χρήστης έχει την δυνατότητα να επιλέξει ένα ψευδώνυμο με το οποίο θα

εμφανίζεται στου υπόλοιπους χρήστες καθώς και την κατάσταση που θα εμφανίζεται το προφίλ

του (Online, Away, Busy).

Αφού ο χρήστης εισέλθει στο σύστημα και επαληθευτούν τα στοιχεία του, μπορεί να δει την

λίστα των χρηστών που είναι εκείνη τη στιγμή συνδεδεμένοι με την εφαρμογή (MILCers) και να

επιλέξει να επικοινωνήσει μαζί τους σε μία ιδιωτική συνομιλία άμεσων μηνυμάτων. Επίσης, ο

κάθε χρήστης μπορεί να δει στο χάρτη την τοποθεσία που έχει ο ίδιος ορίσει, εφόσον το επιθυμεί

και το επιτρέπει, αλλά και την τοποθεσία άλλων χρηστών, όσοι από αυτούς έχουν επιτρέψει την

εμφάνιση της τοποθεσίας τους στο χάρτη. Ακόμη μπορεί να στείλει ένα κοινό μήνυμα που

μπορούν να το δουν όλοι οι συνδεδεμένοι χρήστες χρησιμοποιώντας την καρτέλα Broadcasts.

Όλα τα μηνύματα που αποστέλλονται μέσω της καρτέλας Broadcasts είναι φανερά προς όλους

του χρήστες. Κάθε φορά που εισέρχεται ένας νέος χρήστης και κάθε φορά που ένας χρήστης

λαμβάνει κάποιο μήνυμα από κάποιον άλλο χρήστη, ειδοποιείται κατάλληλα με τη βοήθεια

γραφικών ή/και ήχων. Όποτε ένας χρήστης το επιθυμεί μπορεί να αποσυνδεθεί από την

εφαρμογή, απλά κλείνοντας το παράθυρο και επιλέγοντας «Yes» στο παράθυρο διαλόγου που

εμφανίζεται. Επιλέγοντας το κλείσιμο και τον τερματισμό της εφαρμογής, το πρόγραμμα κλείνει

και σταματάει η σύνδεσή του με τον διακομιστή.

Page 34: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

24

4.1 Ασφάλεια του MILC

Θεμελιώδης αρχή της εφαρμογής είναι η ασφάλεια και η ιδιωτικότητα (security, privacy).

Σημαντικό ρόλο παίζουν τόσο η ασφάλεια των επικοινωνιών όσο και των δεδομένων. Και εξίσου

σημαντικό ρόλο έχει η ιδιωτικότητα των χρηστών. Για τη προστασία της ασφάλειας, της

γνησιότητας και της ακεραιότητας των δεδομένων καθώς επίσης της πιστοποίησης και της

αυθεντικότητας των χρηστών χρησιμοποιήθηκαν όσο το δυνατόν πιο σύγχρονες και πιο

αποδοτικές μέθοδοι και τεχνικές ασφαλείας πληροφοριακών και επικοινωνιακών συστημάτων.

Για το λόγο αυτό χρησιμοποιούνται πρωτόκολλα επικοινωνίας και μέθοδοι κρυπτογράφησης που

διασφαλίζουν την επικοινωνία τόσο μεταξύ του κάθε χρήστη με το διακομιστή, όσο και μεταξύ

των χρηστών.

Το μοντέλο ασφάλειας που χρησιμοποιείται για την πραγματοποίηση ασφαλούς επικοινωνίας

ανάμεσα στους χρήστες και τον διακομιστή είναι η Υποδομή Δημόσιου Κλειδιού - PKI (Public

Key Infrastructure), το οποίο είναι ένα μοντέλο ασύμμετρης κρυπτογράφησης. Σύμφωνα με το

μοντέλο αυτό κάθε παραλήπτης έχει ένα δημόσιο κλειδί (Public Key) που είναι κοινοποιημένο σε

όλους και ένα ιδιωτικό κλειδί (Private Key) που το γνωρίζει μόνο αυτός. Κάθε ζεύγος κλειδιών

είναι μοναδικό. Τα δεδομένα κρυπτογραφούνται με το δημόσιο κλειδί και αποκρυπτογραφούνται

μόνο με το ιδιωτικό κλειδί, μονοσήμαντα. Έτσι ο αποστολέας κρυπτογραφεί τα δεδομένα που

θέλει να στείλει στον παραλήπτη με το δημόσιο κλειδί του παραλήπτη, το οποίο είναι

κοινοποιημένο. Όταν ο παραλήπτης λάβει το κρυπτογραφημένο μήνυμα, το αποκρυπτογραφεί με

το ιδιωτικό του κλειδί και εξάγει το πρωτότυπο μήνυμα.

Η ασύμμετρη κρυπτογράφηση χρησιμοποιείται για την εγκαθίδρυση επικοινωνίας με συμμετρική

κρυπτογράφηση. Στη συμμετρική κρυπτογράφηση ο αποστολέας και ο παραλήπτης έχουν ένα

κοινό μυστικό κλειδί που το γνωρίζουν μόνο αυτοί οι δύο (Secret Key). Το μυστικό κλειδί

χρησιμοποιείται και για την κρυπτογράφηση αλλά και για την αποκρυπτογράφηση ενός

μηνύματος. Έτσι, αφού στην αρχή με τη βοήθεια της ασύμμετρης κρυπτογράφησης γίνει η

ανταλλαγή των μυστικών κλειδιών, η επικοινωνία γίνεται με συμμετρική κρυπτογράφηση.

Όπως φαίνεται στον πίνακα 4-1, κάθε χρήστης έχει ένα ζεύγος κλειδιών (Cpu, Cpr) για την

ασύμμετρη κρυπτογράφηση με τον αλγόριθμο RSA. Επίσης ένα ζεύγος κλειδών έχει και ο

διακομιστής (Spu, Spr). Επίσης για κάθε χρήστη υπάρχει ένα sKeyi για την επικοινωνία του με τον

διακομιστή και ένα cKeyip για την επικοινωνία με έναν άλλον χρήστη.

Page 35: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

25

Πίνακας 4-1 Επεξήγηση συμβόλων στο πρωτόκολλο του MILC [9]

4.2 Ασφάλεια επικοινωνίας μεταξύ Server - Client

Για την ασφάλεια μεταξύ του διακομιστή και ενός χρήστη χρησιμοποιούνται όπως αναφέραμε

δύο διαφορετικές μέθοδοι κρυπτογράφησης.

Κρυπτογράφηση με χρήση RSA (Ασύμμετρη Κρυπτογράφηση).

Η χρήση του αλγορίθμου κρυπτογράφησης RSA γίνεται για να στείλει αρχικά ο χρήστης

το δημόσιο κλειδί του (Cpu), μαζί με το όνομα πρόσβασης (username) τον κωδικό

πρόσβασης (password) και το ψευδώνυμο (alias) στον διακομιστή. O χρήστης, γνωρίζει

ήδη το δημόσιο κλειδί του διακομιστή (Spu) καθώς αυτό εξάγεται μέσα από το

πιστοποιητικό (Certificate) το οποίο είναι ενσωματωμένο στην εφαρμογή. Μόλις ο

διακομιστής λάβει το μήνυμα με δημόσιο κλειδί του χρήστη (Cpu), το αποκρυπτογραφεί

με το ιδιωτικό κλειδί του (Spu) με τον αλγόριθμο RSA. Έπειτα ο διακομιστής δημιουργεί

το συμμετρικό κλειδί (sKeyi) για την μετέπειτα επικοινωνία μεταξύ διακομιστή και

χρήστη, και του το αποστέλλει κρυπτογραφώντας το μήνυμα με το δημόσιο κλειδί (Cpu)

του χρήστη που μόλις έχει λάβει, με τον αλγόριθμο RSA. Ο χρήστης που παραλαμβάνει

το μήνυμα, το αποκρυπτογραφεί με το ιδιωτικό κλειδί του (Cpr) με τον αλγόριθμο RSA.

Κρυπτογράφηση με χρήση του αλγορίθμου AES (Συμμετρική Κρυπτογράφηση).

Αφού ο χρήστης παραλάβει το μυστικό κλειδί - Secret Key (sKeyi) για την επικοινωνία

του με τον διακομιστή, η μεταξύ τους επικοινωνία στη συνέχεια γίνεται με συμμετρική

κρυπτογράφηση. Τα δεδομένα που είναι για αποστολή, κρυπτογραφούνται από τον

αποστολέα με τον αλγόριθμο AES με τη χρήση του μυστικού κλειδιού και

αποκρυπτογραφούνται πάλι με τη χρήση του ίδιου μυστικού κλειδιού από τον παραλήπτη

με τη χρήση AES. Το μυστικό κλειδί το γνωρίζουν μόνο ο αποστολέας και ο παραλήπτης

Page 36: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

26

δηλαδή μόνο ο διακομιστής και ο χρήστης. Έτσι χρήστης λαμβάνει όλες τις πληροφορίες

με τους χρήστες που είναι ήδη συνδεδεμένοι στην εφαρμογή.

Κανένας άλλος δεν πρέπει να είναι σε θέση να γνωρίζει τα μηνύματα που αποστέλλονται μεταξύ

του διακομιστή και του χρήστη. Στο σχήμα 4-1 η διαδικασία και το πρωτόκολλο που

ακολουθείται για την ανταλλαγή κλειδιών και την εγκατάσταση της επικοινωνίας μεταξύ ενός

χρήστη και του διακομιστή.

Σχήμα 4-1 Αυθεντικοποίηση και ανταλλαγή κλειδιών στο MILC [9]

4.3 Ασφάλεια μεταξύ των χρηστών

Όπως για την ασφάλεια της επικοινωνίας μεταξύ του server και του χρήστη, έτσι και για την

ασφάλεια της επικοινωνίας μεταξύ των χρηστών χρησιμοποιούνται δύο διαφορετικές μέθοδοι

κρυπτογράφησης. Επειδή μεταξύ των χρηστών παρεμβάλλεται πάντα ο server έχουμε διπλή

κρυπτογράφηση. Στο σημείο αυτό, η επικοινωνία μεταξύ του χρήστη και του διακομιστή έχει ήδη

Page 37: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

27

εγκατασταθεί, και πλέον γίνεται με συμμετρική κρυπτογράφηση (AES). Αρχικά το μήνυμα

κρυπτογραφείται για την επικοινωνία του ενός χρήστη με τον άλλον και στη συνέχεια το

κρυπτογραφημένο μήνυμα επανα-κρυπτογραφείται για να το παραλάβει ο διακομιστής. Η εν

λόγω διαδικασία εξηγείται παρακάτω.

Κρυπτογράφηση με χρήση RSA (Ασύμμετρη Κρυπτογράφηση)

Η χρήση του αλγορίθμου κρυπτογράφησης RSA γίνεται για να στείλει αρχικά ο χρήστης

(αποστολέας) το μυστικό κλειδί του (cKeyip) στον δεύτερο χρήστη (παραλήπτης). O

πρώτος χρήστης (αποστολέας), λαμβάνει το δημόσιο κλειδί (Cpu) του δεύτερου χρήστη

από τον διακομιστή, το οποίο κοινοποιείται σε όλους του συνδεδεμένους χρήστες. Μόλις

ο πρώτος χρήστης λάβει το δημόσιο κλειδί του δεύτερου χρήστη (παραλήπτη),

δημιουργεί το μυστικό συμμετρικό κλειδί (cKeyip) για την επικοινωνία με τον δεύτερο

χρήστη. Αφού κρυπτογραφήσει το sKeyip με το δημόσιο κλειδί του παραλήπτη (Cpu), το

στέλνει στον παραλήπτη μέσω του διακομιστή. Για να το στείλει όμως στον διακομιστή,

παίρνει το κρυπτογραφημένο μήνυμα και το ξανά κρυπτογραφεί με το sKeyi, το μυστικό

κλειδί για την επικοινωνία με τον διακομιστή. Ο διακομιστής αφού το

αποκρυπτογραφήσει, το κρυπτογραφεί με το μυστικό κλειδί sKeyi για την επικοινωνία

του το τον δεύτερο χρήστη και του το στέλνει. Ο δεύτερος χρήστης το παραλαμβάνει και

αφού κάνει αποκρυπτογράφηση του μηνύματος που έλαβε από τον διακομιστή με το

sKeyi (AES), ξανακάνει αποκρυπτογράφηση του μηνύματος με το ιδιωτικό του κλειδί

(RSA). Έτσι πλέον οι δύο χρήστες έχουν ένα μυστικό κλειδί cKeyip που το γνωρίζουν

μόνο αυτοί και κανένας άλλος, ούτε ο διακομιστής. Στο εξής η επικοινωνία γίνεται με τον

αλγόριθμο AES.

Κρυπτογράφηση με χρήση AES (Συμμετρική Κρυπτογράφηση)

Αφού οι δύο χρήστες έχουν το μυστικό κλειδί cKeyip για την μεταξύ τους επικοινωνία,

στη συνέχεια χρησιμοποιείται συμμετρική κρυπτογράφηση. Τα δεδομένα που είναι για

αποστολή, κρυπτογραφούνται από τον αποστολέα με τον αλγόριθμο AES με τη χρήση

του μυστικού κλειδιού cKeyip και επειδή παρεμβάλλεται ο διακομιστής ξανά

κρυπτογραφούνται με το sKeyi, το μυστικό κλειδί για την επικοινωνία με το. Ο

διακομιστής αφού το αποκρυπτογραφήσει, το κρυπτογραφεί με το μυστικό κλειδί sKeyi

για την επικοινωνία του το τον δεύτερο χρήστη και του το αποστέλλει. Ο παραλήπτης

λαμβάνει το μήνυμα από τον διακομιστή και αφού το αποκρυπτογραφήσει με το μυστικό

κλειδί sKeyi που έχει για την επικοινωνία του με τον διακομιστή, ξανακάνει

αποκρυπτογράφηση με το μυστικό κλειδί cKeyip που έχει για την επικοινωνία μεταξύ των

δύο χρηστών. Τελικά εξάγει το αρχικό μήνυμα.

Το δημόσιο κλειδί του διακομιστή του γνωρίζει ο κάθε χρήστης. Επίσης το δημόσιο κλειδί του

κάθε χρήστη, το γνωρίζει ο διακομιστής γιατί το λαμβάνει με την εκκίνηση της επικοινωνίας

μεταξύ τους και στη συνέχεια το κοινοποιεί και σε όλους τους υπόλοιπους συνδεδεμένους

χρήστες. Επιπλέον, για την επικοινωνία του με τον διακομιστή, κάθε χρήστης έχει ένα μοναδικό

μυστικό κλειδί το οποίο είναι διαφορετικό με αυτό των υπόλοιπων χρηστών. Τέλος κάθε ζευγάρι

Page 38: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

28

χρηστών έχει ένα μοναδικό μυστικό κλειδί για την επικοινωνία μεταξύ τους, και για κάθε ζεύγος

χρηστών, το μυστικό κλειδί είναι διαφορετικό.

Στο σχήμα 4-2, φαίνεται σχηματικά η διαδικασία και το πρωτόκολλο που ακολουθείται για την

ανταλλαγή κλειδιών και την εγκαθίδρυση της επικοινωνίας (chat) μεταξύ δύο χρηστών.

Σχήμα 4-2 Εγκαθίδρυση επικοινωνίας δύο χρηστών στο MILC [9]

Page 39: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

29

ΚΕΦΑΛΑΙΟ 5 - Η ΑΣΦΑΛΕΙΑ ΣΤΟ BLACKBERRY

Στην πλατφόρμα του Blackberry σημαντική θέση έχει η ασφάλεια των δεδομένων και της

επικοινωνίας. Υπάρχουν αρκετές τεχνικές ασφάλειας και πολλές μέθοδοι που διασφαλίζουν την

ασφαλή λειτουργία μιας Blackberry συσκευής και την ιδιωτικότητα των χρηστών.

Τα ενσωματωμένα χαρακτηριστικά ασφάλειας και ένα διαρκώς αυξανόμενο πλήθος εργαλείων

διαχείρισής τους, έχουν καταστήσει τις συσκευές της BlackBerry αρκετά έμπιστες σε μερικούς

από τους πιο ασφαλείς οργανισμούς στον κόσμο. Αυτά τα χαρακτηριστικά ασφάλειας έχουν

επίσης αναγάγει την BlackBerry σε μία από τις πιο πρωτοπόρες εταιρίες στις πιστοποιήσεις

ασφαλείας των κινητών συσκευών.

Πρωταρχικό μέλημα των κατασκευαστών του BlackBerry, είναι να προστατεύσει τις συσκευές

όταν χρησιμοποιούνται τόσο σε προσωπικό όσο και σε επαγγελματικό επίπεδο. Η Research In

Motion (RIM) είναι η εταιρία η οποία είναι υπεύθυνη για το λογισμικό των BlackBerry

συσκευών. Η εταιρία αναπτύσσει εργαλεία που παρέχουν στις επιχειρήσεις σύγχρονες λύσεις.

Ακόμη, στόχος της εταιρίας είναι να αναπτύξει καινοτόμες τεχνολογίες που προσφέρουν

προστασία για τα δεδομένα μιας εταιρείας αλλά και των δικτύων μέσω των οποίων διακινούνται

τα δεδομένα, χωρίς να θέτουν σε κίνδυνο την εμπειρία του τελικού χρήστη. Αυτό σημαίνει ότι οι

επιχειρήσεις μπορούν να προστατεύσουν τα περιουσιακά τους στοιχεία από επιθέσεις ασφάλειας,

ενώ στους υπαλλήλους τους, παρέχεται ένα πολύ καλό επίπεδο ασφάλειας.

Τα έξυπνα κινητά της BlackBerry έχουν σχεδιαστεί ώστε να παρέχουν ένα ικανοποιητικό επίπεδο

προστασίας των δεδομένων, των προσωπικών πληροφοριών, και των αποθηκευτικών χώρων από

μη εξουσιοδοτημένη πρόσβαση. Επίσης έχουν σχεδιαστεί για να παρέχουν ασφαλείς συνδέσεις

στο ασύρματο δίκτυο και σε άλλες συσκευές. Οι επιλογές ασφάλειας για μια συσκευή BlackBerry

μπορούν να αλλαχθούν ανά πάσα στιγμή, όπως η ρύθμιση ενός κωδικού πρόσβασης και η

ενεργοποίηση κρυπτογράφησης για τα δεδομένα και τα αρχεία, με σκοπό την προστασία της

συσκευής από μη εξουσιοδοτημένη πρόσβαση και χρήση.

Page 40: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

30

5.1 Χαρακτηριστικά – Δυνατότητες ασφάλειας

Σύνδεση και πλοήγηση στο διαδίκτυο

Οι BlackBerry συσκευές δημιουργούν μια κρυπτογραφημένη επικοινωνία στις ιστοσελίδες των

διάφορων τραπεζών και στις ιστοσελίδες αγορών που χρησιμοποιούν κρυπτογράφηση και οι

χρήστες ανταλλάσουν ευαίσθητα προσωπικά δεδομένα, όπως είναι το ηλεκτρονικό κατάστημα

BlackBerry App World. Χρησιμοποιώντας μια κρυπτογραφημένη σύνδεση, ειδικά στις

διαδικτυακές τραπεζικές συναλλαγές, στις συναλλαγές ηλεκτρονικού εμπορίου και σε άλλες

ασύρματες συναλλαγές στις κινητές συσκευές και ηλεκτρονικούς υπολογιστές, αυξάνεται η

προστασία σε κάθε είδους κλοπής της ταυτότητας και μη εξουσιοδοτημένης χρήσης των

εμπιστευτικών και απόρρητων οικονομικών δεδομένων. Μπορεί να προσδιοριστεί ανά πάσα

στιγμή εάν τα δεδομένα που αποστέλλονται ή λαμβάνονται είναι προστατευμένα, κατά τη χρήση

του προγράμματος πλοήγησης του BlackBerry. Όταν γίνεται χρήση κρυπτογράφησης σε μία

επικοινωνία, εμφανίζεται πάντα το κατάλληλο εικονίδιο κλειδώματος στην γραμμή διευθύνσεων

στην οθόνη του προγράμματος περιήγησης.

BlackBerry ID

Το BlackBerry ID είναι μια υπηρεσία μονής υπογραφής ταυτότητας (single sign-on), ψηφιακής

πιστοποίησης και υπογραφής, η οποία παρέχει έναν εύκολο τρόπο πρόσβασης σε πολλαπλές

ιστοσελίδες με BlackBerry προϊόντα, υπηρεσίες και εφαρμογές. Μετά τη δημιουργία του

BlackBerry ID, μπορεί κανείς να χρησιμοποιήσει μια διεύθυνση ηλεκτρονικού ταχυδρομείου και

έναν κωδικό για να εισέλθει ή/και να κάνει εγγραφή σε μια οποιοδήποτε BlackBerry συσκευή η

οποία υποστηρίζει BlackBerry ID.

Προστασία των ασύρματων συνδέσεων (Wi-Fi)

Μία συσκευή που έχει ενεργοποιημένη ασύρματη σύνδεση στο διαδίκτυο, μπορεί να

δημιουργήσει μία αξιόπιστη και ασφαλή σύνδεση. Για την προστασία της επικοινωνίας μέσα στα

διάφορα ανοιχτά δίκτυα, οι συσκευές υποστηρίζουν τη δημιουργία κρυπτογραφημένων

συνδέσεων στην υποδομή του BlackBerry για να εγκατασταθεί μια σύνδεση για πλοήγηση στο

διαδίκτυο. Επίσης, οι συσκευές μπορούν να υποστηρίξουν πολλαπλές μεθόδους ασφάλειας οι

Page 41: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

31

οποίες είναι σχεδιασμένες για την κρυπτογράφηση των επικοινωνιών πάνω από ένα ασύρματο

δίκτυο μεταξύ ενός κινητού τηλεφώνου και ενός σημείου πρόσβασης (access point) ή ενός

τείχους προστασίας δικτύου. Τα BlackBerry κινητά τηλέφωνα έχουν σχεδιαστεί για να

απορρίπτουν τις εισερχόμενες συνδέσεις, να υποστηρίζουν περιορισμένα τις επικοινωνίες σε ένα

περιβάλλον ασύρματων δικτύων, και να προλαμβάνουν συνδέσεις ομότιμου δικτύου (ad-hoc

networking).

Προστασία από ανεπιθύμητη αλληλογραφία (spam mail)

Εάν μια συσκευή συνδέεται με τις υπηρεσίες διαδικτύου του BlackBerry, τότε η συσκευή

χρησιμοποιεί ένα σύστημα προστασίας (antispam), πού είναι σχεδιασμένο ώστε να μπλοκάρει τα

ανεπιθύμητα μηνύματα που αποστέλλονται στην ηλεκτρονική διεύθυνση του Blackberry. Αυτό το

χαρακτηριστικό βοηθάει στην προστασία ενάντια στα ενοχλητικά μηνύματα και στην πιθανή

απειλή της ιδιωτικότητας, καθώς επίσης και στην αποτροπή λήψης μηνυμάτων τα οποία δεν

προορίζονται για τον συγκεκριμένο παραλήπτη.

Συνημμένα αρχεία

Οι συσκευές BlackBerry δεν εκτελούν εφαρμογές που παραλαμβάνονται ως συνημμένα αρχεία σε

ηλεκτρονικά μηνύματα. Μια συσκευή επεξεργάζεται τα συνημμένα αρχεία και τα μετατρέπει σε

ένα ειδικό τύπο, τέτοιο ώστε να προστατεύει τη συσκευή από πιθανή ζημιά που μπορεί να

προκληθεί από τον επισυναπτόμενο κώδικα, όπως για παράδειγμα οι μακροεντολές (macros). Για

την προστασία του κινητού του από τα συνημμένα αρχεία που η συσκευή αποθηκεύει, ο χρήστης

μπορεί να ενεργοποιήσει την κρυπτογράφηση.

Συσκευή ανάγνωσης έξυπνων καρτών (BlackBerry Smart Card Reader)

Η συσκευή ανάγνωσης έξυπνων καρτών BlackBerry (BlackBerry Smart Card Reader) είναι μια

πρόσθετη συσκευή, που όταν χρησιμοποιείται κοντά σε έναν υπολογιστή με ενεργοποιημένο το

Bluetooth ή σε ένα BlackBerry κινητό τηλέφωνο με ενεργοποιημένο το Bluetooth, επιτρέπει να

γίνει αυθεντικοποίηση με τη χρήση μια έξυπνης κάρτας και να αποκτήσει πρόσβαση σε ένα

Blackberry κινητό ή σε έναν υπολογιστή. Η συσκευή ανάγνωσης έξυπνων καρτών BlackBerry

επιτρέπει σε έναν χρήστη να ταυτοποιηθεί σε ένα κινητό Blackberry ή σε ένα υπολογιστή

χρησιμοποιώντας την έξυπνη κάρτα και με τη χρήση ενός κωδικού (smart card password).

Page 42: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

32

5.2 Επιλογές ασφάλειας

Χρήση Μυστικού Κωδικού (password)

H χρήση ενός κωδικού βοηθάει στην προστασία του Blackberry κινητού από μη

εξουσιοδοτημένη χρήση. Επίσης μπορεί να ρυθμιστεί το κινητό ώστε να κλειδώνει αυτόματα σε

κάποιο χρονικό διάστημα (π.χ. σε 30 δευτερόλεπτα), ή να κλειδώνει όταν τοποθετείται σε μια

θήκη. Συνήθως, όταν πληκτρολογούμε λανθασμένα έναν κωδικό περισσότερες από δέκα

συνεχόμενες φορές, τότε το κινητό έχει προγραμματιστεί ώστε να διαγράφει οριστικά όλα τα

αποθηκευμένα δεδομένα και όλα τα δεδομένα των εφαρμογών. Ο χρήστης μπορεί να επιλέξει

πόσες προσπάθειες εισαγωγής κωδικού μπορούν να επιτραπούν, πριν το σύστημα ασφαλείας του

κινητού διαγράψει όλα τα καταχωρημένα δεδομένα. Εάν η συσκευή συνδέεται με κάποιο τρόπο

με τον BlackBerry Enterprise Server που υποστηρίζει αυτή τη λειτουργία, μπορεί να γίνει μια

ειδοποίηση η οποία θα υποδηλώνει ότι ο χρήστης ξεκλειδώνει το τηλέφωνο του χωρίς τη θέλησή

του, απλά μετακινώντας τον πρώτο χαρακτήρα του κωδικού στο τέλος. Εάν για παράδειγμα ο

κωδικός στο κινητό είναι “blackberry”, για να σταλεί μια ειδοποίηση ότι βρίσκεται υπό απειλή θα

πληκτρολογούσε “lackberryb”.

Έλεγχος στις εφαρμογές

Τα BlackBerry κινητά παρέχουν προστασία από κακόβουλο λογισμικό και spyware και είναι

σχεδιασμένα να αποτρέπουν την εξάπλωση αυτών των κακόβουλων απειλών σε άλλες

εφαρμογές. Μπορεί ένας χρήστης να κατεβάσει εφαρμογές τρίτου κατασκευαστή για το κινητό

του από διάφορες τοποθεσίες του διαδικτύου. Μια εφαρμογή τρίτου κατασκευαστή μπορεί να

επικοινωνήσει και να μοιράσει δεδομένα σε μια άλλη εφαρμογή ενός τηλεφώνου. Όταν γίνεται

λήψη μιας εφαρμογής θα πρέπει να είναι έμπιστη η πηγή ή να ορισθούν κάποιες άδειες

πρόσβασης. Οι άδειες πρόσβασης για μία εφαρμογή μπορούν να ορισθούν και να αλλαχθούν έτσι

ώστε να περιορισθεί η πρόσβαση όπως φαίνεται στον πίνακα 5-1.

Page 43: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

33

Resource Περιγραφή

Δυνατότητες για

προχωρημένους

Ρύθμιση εάν μια εφαρμογή τρίτου κατασκευαστή μπορεί να

εκτελέσει εξεζητημένες λειτουργίες, όπως διαχείριση

εφαρμογών ή ρυθμίσεις στην πλοήγηση στο διαδίκτυο.

Ρυθμίσεις εμφάνισης Ρύθμιση εάν μια εφαρμογή τρίτου κατασκευαστή μπορεί να

αλλάξει λειτουργίες που επηρεάζουν την εμφάνιση η

συμπεριφορά του κινητού, όπως κλείδωμα του κινητού όταν

είναι σε αδράνεια.

Συνδεσιμότητα Ρύθμιση εάν μια εφαρμογή τρίτου κατασκευαστή μπορεί να

πραγματοποιήσει κλήσεις, να στείλει γραπτά μηνύματα, να

πλοηγηθεί στο διαδίκτυο και να χρησιμοποιήσει διάφορα

χαρακτηριστικά συνδεσιμότητας. Κάποιες εφαρμογές

ενδέχεται να στείλουν πληροφορίες σε εταιρίες τρίτων, ή να

δημιουργήσουν χρεώσιμες συνδέσεις χρησιμοποιώντας τον

πάροχο.

Τοποθεσία Ρύθμιση εάν μια εφαρμογή τρίτου κατασκευαστή μπορεί να

ζητήσει την τοποθεσία GPS. Κάποιες εφαρμογές ενδέχεται να

στείλουν αυτές τις πληροφορίες σε εταιρίες τρίτων, ώστε να

χρησιμοποιηθούν για στοχευμένη διαφήμιση.

Προσωπικές πληροφορίες Ρύθμιση εάν μια εφαρμογή τρίτου κατασκευαστή μπορεί να

έχει πρόσβαση σε περιεχόμενο, όπως η διεύθυνση

ηλεκτρονικού ταχυδρομείου, επαφές, αρχεία ήχου, αρχεία

βίντεο, και άλλα αρχεία. Κάποιες εφαρμογές ενδέχεται να

στείλουν αυτές τις πληροφορίες σε εταιρίες τρίτων.

Δεδομένα ασφαλείας Ρύθμιση εάν μια εφαρμογή τρίτου κατασκευαστή μπορεί να

έχει πρόσβαση σε εμπιστευτικά δεδομένα πού είναι

αποθηκευμένα στα αρχεία ασφαλείας (Secure Element) του

τηλεφώνου, όπως αριθμοί πιστωτικών καρτών, κουπόνια,

κάρτες κ.α. Κάποιες συσκευές ενδέχεται να μη

χρησιμοποιούν δεδομένα ασφαλείας, ωστόσο αυτό

εξαρτάται από το μοντέλο της συσκευής,

Πίνακας 5-1 Ρυθμίσεις πρόσβασης εφαρμογών BlackBerry [10]

Page 44: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

34

Προστασία γεωγραφικών δεδομένων - Τοποθεσίας

Οι BlackBerry συσκευές διαθέτουν ενσωματωμένους ελέγχους ασφάλειας για τις πληροφορίες

του GPS και τα γεωγραφικά δεδομένα. Ιστοσελίδες, εφαρμογές τρίτου κατασκευαστή και

ενσωματωμένες εφαρμογές ο οποίες υποστηρίζουν υπηρεσίες που χρησιμοποιούν γεωγραφικά

δεδομένα, μπορούν να ανιχνεύσουν την τοποθεσία, ή να αναφέρουν την τοποθεσία σε ένα

εξυπηρετητή. Υπάρχουν οι κατάλληλες επιλογές όπου ρυθμίζεται ποιες εφαρμογές έχουν

δικαίωμα να ζητήσουν και να επεξεργαστούν την τοποθεσία της συσκευής. Υπάρχει η

δυνατότητα να μπλοκαριστούν οι εφαρμογές τρίτου κατασκευαστή από την πρόσβαση σε

πληροφορίες σχετικά με την τοποθεσία από GPS.

Προστασία συνδέσεων με Bluetooth

Η χρήση της τεχνολογίας Bluetooth, μπορεί να ενεργοποιήσει μια σύνδεση ανάμεσα σε μια

Blackberry συσκευή με ενεργοποιημένο το Bluetooth, και μια άλλη συσκευή με Bluetooth σε

ακτίνα δέκα μέτρων. Το κινητό δημιουργεί ένα Bluetooth προφίλ, όπου καθορίζεται πως

συνδέονται και επικοινωνούν οι εφαρμογές του κινητού με μια άλλη συσκευή μέσω Bluetooth.

Υπάρχουν οι εξής επιλογές για τα μέτρα ασφαλείας:

Απενεργοποίηση του Bluetooth του κινητού

Ρύθμιση εάν θα γίνει κρυπτογράφηση των δεδομένων που θα σταλούν από το κινητό μέσω

της σύνδεσης Bluetooth.

Μπορεί να ζητηθεί να γίνει σύνδεση με μια άλλη Bluetooth συσκευή. Ενδέχεται σε αυτήν

περίπτωση, να χρειαστεί ένας κωδικός πρόσβασης για να ολοκληρωθεί η διασύνδεση.

Ρύθμιση ώστε η συσκευή να ειδοποιεί το χρήστη κάθε φορά που μια ξένη συσκευή

επιχειρεί να συνδεθεί με το κινητό μέσω Bluetooth.

Προστασία κωδικών που αποθηκεύει το κινητό

Μπορεί να γίνει η χρήση του Password Keeper το οποίο αποθηκεύει τους κωδικούς στη συσκευή.

Το Password Keeper είναι σχεδιασμένο για να προστατεύει του κωδικούς ασφαλείας

χρησιμοποιώντας ένα Password Keeper κωδικό. Ο χρήστης χρειάζεται να θυμάται μόνο τον

Password Keeper κωδικό. Την πρώτη φορά που θα ανοιχθεί το Password Keeper στο κινητό,

πρέπει να δημιουργηθεί ένας αντίστοιχος κωδικός. Το Password Keeper είναι σχεδιασμένο να

κρυπτογραφεί τις πληροφορίες που καταχωρούνται σε αυτό, και όταν ο χρήστης πληκτρολογεί

τον Password Keeper κωδικό, αποκρυπτογραφούνται αυτές οι πληροφορίες. Εάν ο αριθμός των

Page 45: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

35

επιτρεπόμενων προσπαθειών εισαγωγής στο Password Keeper ξεπεραστεί, τα δεδομένα δεν

μπορούν να είναι προσβάσιμα, μέχρι να εισαχθούν εκ νέου οι πληροφορίες ήταν αρχικά

αποθηκευμένες.

Το Password Keeper δίνει τη δυνατότητα για το παρακάτω:

Πληκτρολόγηση ενός κωδικού και πληροφορίες ταυτοποίησης

Γεννήτρια τυχαίων κωδικών, τέτοιων ώστε να καθιστούν τον κωδικό πιο ασφαλή

Αντιγραφή κωδικών και επικόλλησή τους σε μια ιστοσελίδα που ζητάει την συμπλήρωσή τους

5.3 Κρυπτογράφηση των δεδομένων

Στις BlackBerry συσκευές υποστηρίζεται η κρυπτογράφηση δεδομένων, με τη χρήση

συμμετρικών και ασύμμετρων κρυπτογραφικών αλγόριθμων και κρυπτογραφικών κλειδιών, ώστε

να προστατευτούν τα αποθηκευμένα δεδομένα. Όταν η κρυπτογράφηση, τίθεται σε ισχύ από τις

ρυθμίσεις ασφαλείας, η συσκευή κρυπτογραφεί δεδομένα που βρίσκονται στο κινητό όπως για

παράδειγμα πληροφορίες του προγράμματος πλοήγησης, μηνύματα, καταχωρίσεις ημερολογίου,

συμπεριλαμβανομένων και των δεδομένων που λαμβάνονται κατά τη διάρκεια που το κινητό

είναι κλειδωμένο. Όταν το κινητό κλειδώνεται με έναν κωδικό και το τηλέφωνο έχει

ασφαλισμένα δεδομένα, εμφανίζεται ένας δείκτης στο πάνω μέρος της οθόνης. Εάν κάποιο

κακόβουλο λογισμικό επιχειρήσει να εισέλθει στα δεδομένα κατευθείαν από μία εσωτερική

εφαρμογή του κινητού, δε θα μπορέσει διότι δεν μπορεί να αποκρυπτογραφήσει και να διαβάσει

τα δεδομένα χωρίς να γνωρίζει τον κωδικό του τηλεφώνου. Μπορεί να γίνει προσαρμοσμένη

ρύθμιση του επιπέδου ασφαλείας της κρυπτογράφησης ρυθμίζοντας το επίπεδο της

κρυπτογράφησης ή τον χρόνο της κρυπτογράφησης. Μεγαλύτερο επίπεδο ασφάλειας

κρυπτογράφησης σημαίνει και πιο χρονοβόρα διαδικασία κρυπτογράφησης. Επίσης, όσο

μεγαλύτερος είναι ένας κωδικός τόσο μεγαλύτερο είναι το επίπεδο ασφαλείας που παρέχεται.

Παρεμπόδιση μηνυμάτων

Μπορεί να γίνει ρύθμιση ενός ενσωματωμένου τείχους προστασίας στην κινητή συσκευή ώστε να

μπλοκάρονται τα ανεπιθύμητα μηνύματα, όπως εισερχόμενα μηνύματα κειμένου ή μηνύματα

ηλεκτρονικού ταχυδρομείου. Γίνεται ωστόσο να ρυθμιστούν και να καταχωρηθούν κάποιες

εξαιρέσεις για κάποιες επαφές, κάποιους συγκεκριμένους αριθμούς ή διευθύνσεις.

Page 46: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

36

Καθαρισμός μνήμης

Αυτόματα, το κινητό τηλέφωνο αδειάζει συνεχώς την προσωρινή μνήμη για να διαγράψει

ευαίσθητα δεδομένα που δε χρησιμεύουν πλέον.

Η συσκευή μπορεί να προβεί επιπροσθέτως στις ακόλουθες διαδικασίες καθαρισμού:

Αντικατάσταση μνήμης

Εκτέλεση της εφαρμογής καθαρισμού μνήμης περιοδικά, όπου καλούνται οι εφαρμογές να

αδειάζουν οποιαδήποτε cache, απελευθέρωση μνήμης και αυτόματη αντικατάσταση της

ελεύθερης μνήμης

Καθαρισμός αποθηκευμένων ρυθμίσεων ενεργοποιημένης κρυπτογράφησης

Μια εφαρμογή τρίτου κατασκευαστή εγγράφεται μαζί με την εφαρμογή καθαρισμού

Διαγραφή όλων των δεδομένων της κινητής συσκευής

Μια συσκευή BlackBerry διαγράφει όλα τα δεδομένα όταν γίνονται δέκα αποτυχημένες

απόπειρες εισαγωγής κωδικού. Επίσης αυτό μπορεί να γίνει όταν γίνεται γενικός καθαρισμός του

συστήματος και μπορεί να ρυθμιστεί ώστε να διαγράφονται και όλα τα δεδομένα από εφαρμογές

τρίτου κατασκευαστή.

Κρυπτογράφηση δεδομένων από άκρο σε άκρο (end-to-end)

Στο BlackBerry Enterprise Solution προσφέρονται δύο επιλογές κρυπτογράφησης μεταφοράς, η

Advanced Encryption Standard (AES) και η Triple Data Encryption Standard (Triple DES), για

όλα τα δεδομένα που διακινούνται δια μέσου του BlackBerry Enterprise Server και των

BlackBerry κινητών τηλεφώνων, όπως βλέπουμε στο σχήμα 5-2. Συνήθως ο BlackBerry

Enterprise Server χρησιμοποιεί τον πιο δυνατό αλγόριθμο που υποστηρίζεται από τον ίδιο και την

BlackBerry συσκευή με την οποία επικοινωνεί, για την κρυπτογράφηση στο επίπεδο μεταφοράς

(transport layer). Ένα κλειδί κρυπτογράφησης δεδομένων μεταφοράς για τη συσκευή

δημιουργείται από τον BlackBerry Enterprise Server και αποστέλλεται στη BlackBerry συσκευή

χρησιμοποιώντας ένα ασφαλές πρωτόκολλο δύο κατευθύνσεων. Αυτό το μυστικό κλειδί

καταχωρείται μόνο στο λογαριασμό του συνδεδεμένου χρήστη και στη BlackBerry συσκευή. Ο

χρήστης της συσκευής μπορεί να επιλέξει να δημιουργήσει το κλειδί ασύρματα οποιαδήποτε

στιγμή. Τα δεδομένα που αποστέλλονται στη BlackBerry συσκευή είναι κρυπτογραφημένα από

Page 47: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

37

τον BlackBerry Enterprise Server χρησιμοποιώντας το κλειδί, το οποίο το εξάγει από το

λογαριασμό ηλεκτρονικού ταχυδρομείου του χρήστη. Οι κρυπτογραφημένες πληροφορίες

μεταδίδονται με ασφάλεια μέσω του δικτύου προς το κινητό. Στη συνέχεια, οι πληροφορίες

αποκρυπτογραφούνται με τη χρήση του κλειδιού το οποίο είναι ήδη αποθηκευμένο στο κινητό.

Τα δεδομένα παραμένουν κρυπτογραφημένα κατά τη μεταφορά και ποτέ δεν

αποκρυπτογραφούνται έξω από το τείχος προστασίας του συστήματος.

Σχήμα 5-1 Ασφάλεια στο BlackBerry Enterprise Server [11]

Ασφαλείς συνδέσεις με προγράμματα πλοήγησης

Η υπηρεσία BlackBerry MDS Connection Service (σχήμα 5-3) επιτρέπει στους χρήστες

BlackBerry κινητών τηλεφώνων να έχουν πρόσβαση στο διαδίκτυο ή στο intranet μιας εταιρίας.

Επίσης δίνεται στους χρήστες και στις εφαρμογές η δυνατότητα να συνδεθούν στους

εξυπηρετητές της εταιρίας. Ένα BlackBerry κινητό μπορεί να έχει πρόσβαση στους εξυπηρετητές

από το διαδίκτυο, όμως αυτό εξαρτάται και από τις ρυθμίσεις ασφαλείας. Οι BlackBerry

συσκευές υποστηρίζουν HTTPS σε proxy mode χρησιμοποιώντας έναν proxy server ή σε direct

mode χρησιμοποιώντας TLS.

Page 48: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

38

Σχήμα 5-2 BlackBerry MDS Connection Service [11]

Page 49: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

39

ΚΕΦΑΛΑΙΟ 6 - ΤΟ SDK ΤΟΥ BLACKBERRY

Σε αυτήν την ενότητα θα αναφερθούμε στο περιβάλλον μέσα από το οποίο γίνεται ο

προγραμματισμός σε java για τις εφαρμογές της πλατφόρμας του Blackberry. Το πρόγραμμα που

χρησιμοποιείται για τον προγραμματισμό και την υλοποίηση του κώδικα σε γλώσσα

προγραμματισμού java, είναι το Eclipse IDE (Integrated Development Environment).

Το Eclipse είναι ένα περιβάλλον το οποίο υποστηρίζει πολλές γλώσσες προγραμματισμού και

είναι γραμμένο κυρίως σε java. Επιπλέον μπορεί να υποστηρίξει και άλλου είδους

προγραμματισμό σε γλώσσες όπως Ada, C, C++, COBOL, Fortran, Haskell, Perl, PHP, Python,

R, Ruby ( Ruby on Rails framework), Scala, Clojure, Groovy, και Scheme αλλά και προγράμματα

του Mathematica. Τα περιβάλλοντα που υποστηρίζει μεταξύ άλλων είναι τα Eclipse Java

Development Tools (JDT) για Java, Eclipse CDT για C/C++ και Eclipse PDT για PHP. Το

Eclipse SDK (το οποίο περιλαμβάνει το Java Development Tools) έχει φτιαχτεί αποκλειστικά για

Java προγραμματιστές.

Το περιβάλλον του SDK που έχει το java plug-in για το Blackberry φαίνεται στο σχήμα 6-1.

Page 50: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

40

Σχήμα 6-1 Το περιβάλλον του Eclipse

Το Eclipse, έχοντας εγκατεστημένο το SDK (Software Development Kit) με το java plug-in μας

δίνει τη δυνατότητα να αναπτύξουμε κώδικα και προγράμματα για το Blackberry όπως επίσης και

να τρέξουμε τις διάφορες εφαρμογές μας σε προσομοιωτή κινητού (emulator). Έχουμε τη

δυνατότητα να «κατεβάσουμε» από το διαδίκτυο και να κάνουμε δοκιμές με προσομοιωτή του

μοντέλου της συσκευής που επιθυμούμε. Οι περισσότερες δοκιμές για την εφαρμογή MILC

BlackBerry έγιναν με την τη χρήση του προσομοιωτή του μοντέλου Blackberry 9800.

Στον προσομοιωτή έχουμε τη δυνατότητα να κάνουμε και εικονική επεξεργασία και διαχείριση

αρχείων ενός κινητού Blackberry χρησιμοποιώντας μία εικονική κάρτα μνήμης, ένα image file ή

έναν φάκελο τοπικά στον υπολογιστή από τον οποίο τρέχει η προσομοίωση. Στο σχήμα 6-2,

φαίνεται πώς μας εμφανίζει το SDK τον προσομοιωτή.

Page 51: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

41

Σχήμα 6-2 Ο προσομοιωτής του BlackBerry

Page 52: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

42

ΚΕΦΑΛΑΙΟ 7 - ΑΣΦΑΛΕΙΑ ΕΦΑΡΜΟΓΩΝ ΣΤΟ BLACKBERRY

Η Research in Motion (RIM) παρέχει στους προγραμματιστές του Blackberry αρκετές επιλογές

για να την προστασία των δεδομένων και την ανάπτυξη ασφαλών εφαρμογών.

7.1 Δυνατότητες ασφάλειας εφαρμογών

Αυθεντικοποίηση

Οι χρήστες κινητών τηλεφώνων Blackberry μπορούν να ρυθμίσουν μυστικούς κωδικούς στη

συσκευή που χρησιμοποιούν. Όταν ένας κωδικός (π.χ. κωδικός πρόσβασης) είναι ενεργός, θα

πρέπει να τον εισάγουν για να αποκτήσουν πρόσβαση στη συσκευή. Επιπλέον μπορεί να γίνει

μια διαδικασία αυθεντικοποίησης σε μια σύνδεση μεταξύ μιας εφαρμογής και ενός διακομιστή,

στο διαδίκτυο ή στο intranet χρησιμοποιώντας βασική αυθεντικοποίηση HTTP ή HTTPS .

Κρυπτογράφηση

Κατά την διαδικασία της κρυπτογράφησης δημιουργούνται δεδομένα τα οποία είναι αδύνατον να

αναγνωσθούν εάν δεν αποκρυπτογραφηθούν. Υπάρχουν αρκετοί τρόποι που μπορεί να γίνει

κρυπτογράφηση δεδομένων σε μία εφαρμογή. Στο πίνακα 7-1, παρουσιάζονται κάποια

παραδείγματα.

Page 53: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

43

Μέθοδος

Κρυπτογράφησης

Περιγραφή

RIM

Cryptographic

API

Το συγκεκριμένο API βοηθάει στην κρυπτογράφηση των

δεδομένων, στη διαχείριση των κρυπτογραφικών κλειδιών, και

στην ψηφιακή υπογραφή και αυθεντικοποίηση των δεδομένων.

Επίσης βοηθάει στη δημιουργία ασφαλών συνδέσεων.

Προστασία

περιεχομένου

Το Content Protection API το οποίο είναι κομμάτι του RIM

Cryptographic API, παρέχει μια λύση για κρυπτογράφηση

αντικειμένων String ή byte array. Το Content Protection API

λειτουργεί με το Content Protection framework στα κινητά

Blackberry. Το framework πρέπει να έχει ενεργοποιημένη κάποια

πολιτική κανόνων ή ένα Option Setting.

SQLite

κρυπτογράφηση

To Database API (βάση δεδομένων) περιλαμβάνει λειτουργίες

κρυπτογράφησης για SQLite βάσεις δεδομένων

Κρυπτογράφηση

καρτών

αποθήκευσης

Αυτή η λειτουργία βασίζεται στο σύστημα JSR 75. Η

συγκεκριμένη λειτουργία μας επιτρέπει να κρυπτογραφήσουμε

δεδομένα τα οποία είναι αποθηκευμένα σε μία εξωτερική κάρτα

μνήμης (microSD) και σε ενσωματωμένα μέσα

αποθήκευσης(eMMC)

Πίνακας 7-1 Παραδείγματα BlackBerry εφαρμογών κρυπτογράφησης [13]

Περιορισμοί πρόσβασης

Μπορούμε να περιορίσουμε άλλες εφαρμογές σε ένα Blackberry κινητό από το να έχουν

πρόσβαση σε δεδομένα στη δικιά μας εφαρμογή. Το πώς μπορεί να υλοποιηθεί αυτό εξαρτάται

από το πώς είναι αποθηκευμένα τα δεδομένα. Στον πίνακα 7-2 φαίνεται ένα σχεδιάγραμμα

σχετικά με την αποθήκευση των δεδομένων και τον περιορισμό της πρόσβασης.

Page 54: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

44

Τοποθεσία

Αποθήκευσης

Δεδομένων

Πως μπορεί να περιοριστεί η πρόσβαση

Αρχεία

Μπορούμε να περιορίσουμε την πρόσβαση στα αρχεία στο σύστημα

αρχείων με κλειδιά υπογραφής κώδικα τα οποία χρησιμοποιούνται σε

συνδυασμό με την κλάση ControlledAccess.

SQLite

databases

To Database API παρέχει την επιλογή Protected security, η οποία

καθιστά τη βάση δεδομένων διαθέσιμη μόνο σε εφαρμογές που είναι

υπογεγραμμένες με το ίδιο κλειδί υπογραφής κώδικα.

Persistent

store

Μπορούμε να περιορίσουμε την πρόσβαση σε αντικείμενα με τα κλειδιά

υπογραφής κώδικα χρησιμοποιώντας τα σε συνδυασμό με την κλάση

ControlledAccess.

Record

store

Μπορούμε να αποθηκεύσουμε δεδομένα ιδιωτικά ώστε οι άλλες

εφαρμογές στο κινητό τηλέφωνο να μην μπορούν να τα προσπελάσουν.

Runtime

store

Μπορούμε να περιορίσουμε την πρόσβαση σε αντικείμενα στο runtime

store με τη χρήση κλειδιών υπογραφής κώδικα χρησιμοποιώντας τα σε

συνδυασμό με την κλάση ControlledAccess.

Πίνακας 7-2 Αποθήκευση και πρόσβαση στα δεδομένα [13]

Προστασία μεταφοράς

Μπορούμε να προστατεύσουμε τα δεδομένα κατά τη μεταφορά τους, μέσα από τα πρωτόκολλα

ασφαλών συνδέσεων (πίνακας 7-3).

Page 55: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

45

API Transport Security

RIM

Cryptographic

API

Το RIM Cryptographic περιλαμβάνει τα API TLS, WTLS, και τα SSL

APIs τα οποία μας βοηθούν στη δημιουργία ασφαλών συνδέσεων

Πίνακας 7-3 Προστασία δεδομένων κατά τη μεταφορά [13]

Προστασία περιεχομένου

Η προστασία του περιεχομένου βοηθάει στην περίπτωση κλοπής ενός Blackberry τηλεφώνου και

παράνομης αντιγραφής των δεδομένων, το οποίο είναι πιθανό να συμβεί ακόμη και όταν τα

δεδομένα είναι κρυπτογραφημένα και το τηλέφωνο είναι κλειδωμένο. Η προστασία περιεχομένου

κρυπτογραφεί τα δεδομένα με τέτοιο τρόπο ώστε το κλειδί της κρυπτογράφησης να μην είναι

προσβάσιμο όταν το τηλέφωνο είναι κλειδωμένο.

Page 56: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

46

7.2 RIM Cryptographic API

Το RIM Cryptographic API είναι μια συλλογή κλάσεων που βοηθάει του προγραμματιστές και

παρέχει λύσεις ασφάλειας για τις εφαρμογές. Έχουμε την δυνατότητα να κρυπτογραφήσουμε και

να αποκρυπτογραφήσουμε δεδομένα, να δημιουργήσουμε ψηφιακές υπογραφές και να τις

επαληθεύσουμε και επίσης να δημιουργήσουμε ασφαλείς συνδέσεις και να διαχειριστούμε

κρυπτογραφικά κλειδιά. Το RIM Cryptographic API βρίσκεται στο πακέτο

net.rim.device.api.crypto και αποτελείται από επιμέρους τμήματα που παρουσιάζονται

συνοπτικά στον πίνακα 7-4.

Πίνακας 7-4 RIM Cryptography API components [11]

Στον πίνακα 7-4, βλέπουμε ότι το RIM Cryptographic API αποτελείται από τρία επιμέρους κύρια

API, το Secure Messaging API, το Secure Connection API και το Key Management API, και

τέσσερα επιπλέον API, το Certificate API, το ASN.1 API , το OID API και το Cryptographic

Primitives API.

Το Secure Messaging API περιέχει το CMS (Cryptographic Message Syntax) API παρέχει τις

λειτουργίες που χρειάζονται για τη δημιουργία ασφαλών εφαρμογών ανταλλαγής μηνυμάτων. Το

Secure Connection API περιέχει το TLS (Transport Layer Security) API, το WTLS (Wireless

Transport Layer Security) API, και το SSL (Secure Sockets Layer) API και παρέχει τις

λειτουργίες που χρειάζονται για τη δημιουργία και διαχείριση ασφαλών συνδέων μεταξύ ενός

Page 57: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

47

client και ενός εξυπερετητή (server). Το Secure Messaging API και το Secure Connection API

καθορίζουν την λειτουργικότητα του πρωτοκόλλου καθώς περιέχουν τον απαραίτητο κώδικά για

την υλοποίηση ασφαλούς επικοινωνίας.

Το Key Management API περιέχει το βασικό κρυπτογραφικό πλαίσιο που χρειάζεται για τη

δημιουργία ασφαλών εφαρμογών. Η επεξεργασία και ο διαμοιρασμός κλειδιών γίνεται από το

KeyStore API, ενώ τα κλειδιά κωδικοποιούνται με τη χρήση του Encoding API. Το Certificate

API περιέχει όλες τις απαραίτητες λειτουργίες για την επεξεργασία των πιστοποιητικών. Το OID

(Object Identifier) API περιέχει τις λειτουργίες που χρειάζονται για τη διαχείριση κάποιων

βασικών Object IDs. Το ASN.1 (Abstract Syntax Notation) API παρέχει το μηχανισμό για τη

διαμόρφωση και ανάλυση των δεδομένων που χρησιμοποιούνται μαζί με τα κρυπτογραφικά

πρωτόκολλα.

Στο χαμηλότερο επίπεδο, το Cryptographic Primitives API περιέχει τα κυριότερα εργαλεία που

χρειάζονται για την υλοποίηση των κρυπτογραφικών αλγορίθμων. Το API περιέχει τα κλειδιά,

τον κώδικά αυθεντικοποίησης μηνυμάτων (MACS - Message Authentication Codes), τα

κρυπτογραφήματα και άλλες λειτουργίες που σχετίζονται με τη συμμετρική αλλά και με την

ασύμμετρη κρυπτογραφία, όπως οι αλγόριθμοι συμμετρικού κλειδιού (πίνακας 7-5) και οι

αλγόριθμοι δημόσιου κλειδιού (πίνακας 7-6). Επιπλέον, αυτό το API περιέχει αλγορίθμους όπως

συναρτήσεις σύνοψης και γεννήτριες ψευδό-τυχαίων αριθμών (PRNGs - Pseudo Random

Number Generators), στοιχεία τα οποία χρειάζονται από άλλα κομμάτια του API (πίνακας 7-7).

Πίνακας 7-5 Αλγόριθμοι συμμετρικού κλειδιού [11]

Page 58: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

48

Πίνακας 7-6 Αλγόριθμοι δημόσιου κλειδιού [11]

Πίνακας 7-7 Επιπλέον αλγόριθμοι του Cryptographic Primitives API [11]

Το RIM Cryptographic API είναι σχεδιασμένο για χρήση από οποιονδήποτε που επιθυμεί να

δημιουργήσει ασφαλείς εφαρμογές, ανεξάρτητα από τη γνώση που έχει πάνω σε έννοιες

ασφάλειας ή προγραμματισμό χαμηλού επιπέδου. Επίσης μπορεί να χρησιμοποιηθεί για να

παρέχει ασφάλεια σε οποιοδήποτε πρόγραμμα ανεξαρτήτως μεγέθους η πολυπλοκότητας. Αυτό

μπορεί να επιτευχθεί με τη χρήση ευέλικτων κρυπτογραφικών αλγορίθμων οι οποίοι μπορούν να

υλοποιηθούν με πολλές διαφορετικές μεθόδους και προσεγγίσεις. Για παράδειγμα, το Crypto API

περιέχει μία πληθώρα από κρυπτογραφικούς αλγόριθμους που μπορούν να υλοποιηθούν

μεμονωμένα ως ένας αλγόριθμος χαμηλού επιπέδου ή ως μέρος μιας μεγαλύτερης,

προσαρμοσμένης διαδικασίας. Αυτή η διαδικασία ενθυλακώνεται σε ένα αντικείμενο το οποίο

καλείται “factory”. Με την ενσωμάτωση των διαφορετικών επιμέρους επιπέδων στο API, το

σύστημα μπορεί να προσαρμόζεται και να γίνεται αρκετά πιο ευέλικτο.

Page 59: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

49

ΚΕΦΑΛΑΙΟ 8 - Η ΥΛΟΠΟΙΗΣΗ ΤΟΥ MILC

Στο κεφάλαιο αυτό, περιγράφεται η υλοποίηση της εφαρμογής MILC στο Blackberry. Αρχικά

παρατίθενται τα στοιχεία με τις κλάσεις του κώδικα και κάποιες σημαντικές συναρτήσεις ενώ στη

συνέχεια παρουσιάζεται η διεπαφή της εφαρμογής. Στο παράρτημα παρουσιάζεται όλος ο

κώδικας ο οποίος είναι γραμμένος σε γλώσσα προγραμματισμού java, όπως έχει υλοποιηθεί για

την εφαρμογή του MILC.

Στις περισσότερες εκδόσεις του MILC που έχουν υλοποιηθεί, υποστηρίζεται η χρήση χαρτών, η

αποστολή και η λήψη γεωγραφικών δεδομένων καθώς και η αναπαράσταση των δεδομένων

αυτών πάνω στον χάρτη. Στην υλοποίηση του MILC για το Blackberry δεν υποστηρίζεται αυτή η

δυνατότητα. Γενικά, δεν ήταν εφικτή η χρήση και επεξεργασία γεωγραφικών δεδομένων καθώς

και η χρήση χαρτών, κατά την υλοποίηση της εφαρμογής. Το γεγονός αυτό οφείλεται στο

πρόβλημα που παρουσιάζει το SDK του Blackberry στο Eclipse, στις εκδόσεις στις οποίες

πραγματοποιήθηκαν οι δοκιμές. Πιο συγκεκριμένα, στις εφαρμογές οι οποίες περιέχουν χάρτες

παρατηρήθηκε πρόβλημα το οποίο δεν επιτρέπει την εκτέλεση των εν λόγω εφαρμογών. Δηλαδή,

οι χάρτες δεν εμφανίζονται στον προσομοιωτή (emulator) του Blackberry και επιπλέον όταν

κάποιος χρήστης επιχειρήσει να ανοίξει μια εφαρμογή που εμφανίζει έναν χάρτη, το σύστημα

αποτυγχάνει και εμφανίζεται ένα exception (map exception).

Ύστερα από έρευνα, παρατηρήθηκε οτι όσοι προγραμματιστές επιχείρησαν να αναπτύξουν

εφαρμογές με χάρτες, αντιμετώπισαν το ίδιο πρόβλημα. Δεν μπορούσαν δηλαδή να εκτελέσουν

τις εφαρμογές αυτές στον προσομοιωτή. Σύμφωνα με τους τεχνικούς της RIM (Research In

Motion), αυτό είναι ένα πρόβλημα (bug) που υπάρχει στις εκδόσεις του SKD στις οποίες έγιναν

οι δοκιμές και αναμένεται, στις επόμενες εκδόσεις, αυτό το πρόβλημα να έχει επιλυθεί.

8.1 Οι κλάσεις και οι συναρτήσεις

Η υλοποίηση του MILC σε java αποτελείται από έντεκα διαφορετικές κλάσεις. Η κλάση MILC

είναι η αρχική κλάση με τη main( ) συνάρτηση που διαχειρίζεται τα events και αρχικοποιεί την

πρώτη οθόνη και την τοποθετεί στη στοίβα. Οι τρείς κλάσεις LoginScreen, MilcScreen,

ChatsScreen είναι οι τρείς διαφορετικές οθόνες που χρησιμοποιούνται. Η κλάση Connect είναι

μία runnable κλάση, δηλαδή ένα Thread, που διαχειρίζεται τα μηνύματα του διακομιστή τα οποία

λαμβάνονται συνεχώς μέσω του δικτύου. Η κλάση Messages είναι για την αποστολή αλλά και τη

διαχείριση των ληφθέντων μηνυμάτων. Η κλάση Friends είναι για την διαχείριση των φίλων και η

Page 60: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

50

κλάση Conversations για τη διαχείριση των συνομιλιών. Η κλάση WhereAmI είναι για τα

γεωγραφικά δεδομένα και δύο ακόμη βοηθητικές κλάσεις, μία για την κωδικοποίηση των

μηνυμάτων(string, byte array) Base64, και μία για την επεξεργασία των αλφαριθμητικών,

StringTokenizer.

Οι κλάσεις απαριθμούνται παρακάτω:

1. MILC.class

2. LoginScreen.class

3. MilcScreen.class

4. ChatsScreen.class

5. Connect.class

6. Messages.class

7. Friends.class

8. Conversations.class

9. WhereAmI.class

10. StringTokenizer.class

11. Base64.class

Στη συνέχεια (σχήμα 8-1), παρατίθεται το διάγραμμα κλάσεων σχηματικά με τις βασικές

συναρτήσεις και μεταβλητές.

Page 61: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

51

MILC

version

boolians

------------

MILC()

LoginScreen

username

password

alias

MilcScreen

Connect

-------------

LoginScreen()

ButtonListener()

Close()

MilcScreen

Buttons

tab managers

Broadcasts tab

Friends tab

Chats tab

-----------------

MilcScreen()

ButtonsListener()

DisplayBroadcast()

DisplayFriends()

DisplayChats()

Connect

inputStrem

outputStream

serverPublicKey

Thread

------------------

Connect()

run()

Messages

myPrivateKey

myPublicKey

skey

------------------

handleMessage()

sendMessage()

WhereAmI

latitude

longitude

--------------

sendLocation()

StringTokenizer

split()

replaceAll()

Base64

encode()

decode()

Conversations

conversations

chats

-----------------

StartSession()

HandlePublicKey()

HandleSecretKey()

Friends

friends

Public Keys

Secret Keys

---------

handleFriend()

initializeList()

ChatsScreen

CurrentChat

Thread

----------------

ChatsScreen()

displayChat()

run()

Σχήμα 8-1 Διάγραμμα κλάσεων MILC BlackBerry

Page 62: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

52

8.2 Η διεπαφή της εφαρμογής με τον χρήστη (interface)

Το πρόγραμμα ξεκινάει με την main( ) συνάρτηση της κλάσης MILC. Η κλάση κάνει extend

UiApplication το οποίο επιτρέπει τη διαχείριση των οθονών και γενικά των GUI και των events.

Στη συνέχεια, τοποθετείται στη στοίβα η κλάση LoginScreen όπου εμφανίζεται η οθόνη όπου ο

χρήστης καλείται να εισάγει τα στοιχεία του στα κατάλληλα πεδία, όπως φαίνεται στο σχήμα 8-2.

Σχήμα 8-2 Αρχική οθόνη (MILC Login Screen)

Μόλις πατηθεί το κουμπί Login γίνεται ο έλεγχος των στοιχείων που έχει εισάγει ο χρήστης. Εάν

τα στοιχεία πληρούν τις προϋποθέσεις καλείται η κλάση Connect και η κλάση MilcScreen όπου

εμφανίζει την κυρίως οθόνη της εφαρμογής. Κατά την εισαγωγή στην οθόνη αυτή, εμφανίζεται

ένα μήνυμα (Dialog Alert), το οποίο καλωσορίζει τον χρήστη στην εφαρμογή όπως φαίνεται στο

σχήμα 8-3.

Page 63: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

53

Σχήμα 8-3 Παράθυρο διαλόγου για είσοδο στο MILC

Στη συνέχεια ανοίγει η κυρίως οθόνη (σχήμα 8-4) όπου ο χρήστης αλληλεπιδρά με την εφαρμογή

επιλέγοντας μια από τις διαθέσιμες καρτέλες. Επειδή το Blackberry, στην έκδοση του

λειτουργικού που υλοποιήθηκε δεν υποστηρίζει καρτέλες, η οθόνη στο επάνω μέρος αποτελείται

από μία σειρά από κουμπιά. Κάτω από την οθόνη τοποθετείται ένας manager (Vertical Filed

Manager) όπου τοποθετούνται κάθετα το ένα κάτω από το άλλο, όπως μια λίστα, τα διάφορα

πεδία που εμείς θέλουμε. Εφόσον έχουμε τρία διαφορετικά κουμπιά, έχουμε και τρείς

διαφορετικούς managers. Κάθε φορά που γίνεται κλικ σε ένα από τα τρία κουμπιά, τοποθετείται

και ο κατάλληλος manager.

Σχήμα 8-4 Κύρια οθόνη του MILC (MILC Screen)

Page 64: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

54

Όταν εισέρχεται ένας νέος χρήστης στο σύστημα, εμφανίζεται στην καρτέλα MILCers (σχήμα 8-

4). Εάν, εκείνη τη στιγμή βρισκόμαστε σε μια άλλη καρτέλα από την καρτέλα MILCers, τότε το

κουμπί MILCers γίνεται κόκκινο, όπως βλέπουμε στο σχήμα 8-5.

Σχήμα 8-5 Ειδοποίηση για την είσοδο νέου χρήστη

Το κουμπί επανέρχεται στην κανονική του εμφάνιση όταν το πατήσουμε και δούμε την

ανανεωμένη λίστα με τους MILCers (σχήμα 8-6).

Σχήμα 8-6 Επαναφορά κουμπιού MILCers στην αρχική μορφή

Page 65: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

55

Στην καρτέλα με τα δημόσια μηνύματα (broadcasts) εμφανίζονται τα μηνύματα που στέλνουν οι

χρήστες από αυτήν την καρτέλα, και εμφανίζονται δημόσια σε όλους του υπόλοιπους χρήστες.

Κάθε φορά που ένας χρήστης πληκτρολογεί και στέλνει ένα μήνυμα broadcast αυτό εμφανίζεται

στην καρτέλα Broadcasts. Για να σταλεί ένα τέτοιο μήνυμα, ο χρήστης γράφει αυτό το μήνυμα

μέσα στο πλαίσιο, στο κάτω μέρος της οθόνης και στη συνέχεια πατάει enter, ή το κεντρικό

κουμπί του scroll ball (σχήμα 8-7).

Σχήμα 8-7 Broadcasts συνομιλία

Όταν ένας χρήστης στείλει ένα δημόσιο μήνυμα (broadcast) οι υπόλοιποι συνδεδεμένοι χρήστες

ειδοποιούνται κατάλληλα. Έτσι όταν για παράδειγμα βρισκόμαστε στην οθόνη με τους MILCers,

το κουμπί για την καρτέλα με τα broadcasts γίνεται κόκκινο (σχήμα 8-8). Το κουμπί επανέρχεται

στην αρχική του εμφάνιση μόλις το πατήσουμε ξανά.

Page 66: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

56

Σχήμα 8-8 Ειδοποίηση λήψης Broadcast μηνύματος

Για να ξεκινήσει μια ιδιωτική συνομιλία με έναν χρήστη, επιλέγουμε τον χρήστη από την λίστα

MILCers. Όταν κάνουμε κλικ εμφανίζεται το (σχήμα 8-9), που ρωτάει τον χρήστη εάν όντως

θέλει να ξεκινήσει μια ιδιωτική συνομιλία με τον επιλεγμένο χρήστη.

Σχήμα 8-9 Παράθυρο διαλόγου Start Chat Session

Εάν επιλέξουμε «ΟΚ» τότε γίνεται η ανταλλαγή κλειδιών και το όνομα του χρήστη εμφανίζεται

στη λίστα της καρτέλας Chats. Εάν επιλέξουμε «Cancel» δε συμβαίνει τίποτα. Το ίδιο συμβαίνει

και όταν ένας άλλος χρήστης στείλει σε εμάς ένα ιδιωτικό μήνυμα, δηλαδή εμφανίζεται το όνομα

του χρήστη στην καρτέλα Chats. Όταν δε βρισκόμαστε στην καρτέλα με τα chats και προστίθεται

Page 67: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

57

σε αυτήν ένας χρήστης, τότε το κουμπί γίνεται κόκκινο (σχήμα 8-10) και επανέρχεται στην

κανονική του εμφάνιση μόλις το πατήσουμε.

Σχήμα 8-10 Προσθήκη χρήστη στα Chats

Στην καρτέλα «chats» εμφανίζεται η λίστα με του άλλους χρήστες με τους οποίος έχουμε επιλέξει

να κάνουμε μια ιδιωτική συνομιλία (σχήμα 8-11). Εάν ένας χρήστης μας στείλει ένα ιδιωτικό

μήνυμα (private chat) και δεν υπάρχει στη λίστα, τότε προστίθεται μόλις παραληφθεί το μήνυμα

που μας έχει στείλει.

Σχήμα 8-11 Λίστα χρηστών Chats

Page 68: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

58

Στη συνέχεια, για να ανοίξει η οθόνη με την ιδιωτική συνομιλία με έναν χρήστη, θα πρέπει να τον

επιλέξουμε από την καρτέλα «Chats», και στο παράθυρο διαλόγου «Private Chat» που θα μας

ανοίξει, να επιλέξουμε την πρώτη επιλογή «Open» για να ανοίξει η οθόνη με την συνομιλία όπως

βλέπουμε στο σχήμα 8-12.

Σχήμα 8-12 Παράθυρο διαλόγου Private Chat

Εάν επιλέξουμε «Cancel» δε γίνεται τίποτα, ενώ εάν επιλέξουμε «Remove», τότε ο χρήστης

αφαιρείται από τη λίστα και δεν εμφανίζεται στην καρτέλα «Chats», όπως φαίνεται στο σχήμα 8-

13.

Page 69: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

59

Σχήμα 8-13 Άδειασμα της λίστας Chats

Ωστόσο εάν θέλουμε, με την ίδια διαδικασία που περιγράφηκε προηγουμένως, μπορούμε να

επαναπροσθέσουμε ένα χρήστη στη λίστα «Chats». Επίσης, επαναπροστίθεται αυτόματα ο

συγκεκριμένος χρήστης, εάν μας στείλει κάποιο ιδιωτικό μήνυμα. Εάν από το παράθυρο

διαλόγου «Private Chat» που θα ανοίξει, επιλέξουμε την πρώτη επιλογή «Open», ανοίγει η οθόνη

με την ιδιωτική συνομιλία (σχήμα 8-14). Στο επάνω μέρος της οθόνης εμφανίζεται το όνομα του

χρήστη που έχει επιλεγεί για την ιδιωτική συνομιλία, ενώ στο πλαίσιο κάτω μπορούμε να

γράψουμε το μήνυμα που θέλουμε να στείλουμε, και πατώντας enter ή το κεντρικό κουμπί του

scroll ball, το μήνυμα αποστέλλεται.

Σχήμα 8-14 Οθόνη Private Chat

Page 70: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

60

Η συνομιλία εμφανίζεται πάνω από το πλαίσιο που εισάγουμε τα μηνύματα, σε μορφή λίστας, και

κάθε νέο μήνυμα που αποστέλλεται ή παραλαμβάνεται, εμφανίζεται στο τέλος της λίστας όπως

φαίνεται στο σχήμα 8-15.

Σχήμα 8-15 Ιδιωτική συνομιλία (Private Chat)

Όταν πατήσουμε το πλήκτρο backspace εμφανίζεται ένα μήνυμα διαλόγου που μας προειδοποιεί

ότι θα κλείσει η οθόνη ιδιωτικής συνομιλίας.

Page 71: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

61

Σχήμα 8-16 Παράθυρο διαλόγου Chat will be closed

Ωστόσο η συνομιλία παραμένει αποθηκευμένη, όσο η εφαρμογή παραμένει ανοιχτή, και εάν ο

χρήστης μας στείλει ένα μήνυμα ιδιωτικής συνομιλίας, το κουμπί «Chats» γίνεται κόκκινο

(σχήμα 8-17).

Σχήμα 8-17 Ειδοποίηση λήψης Private Chat

Page 72: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

62

Έτσι μόλις ανοίξουμε ξανά την οθόνη της ιδιωτικής συνομιλίας, προβάλλεται η συνομιλία με τα

μηνύματα που έχουν ανταλλαχθεί μέχρι εκείνη τη στιγμή, μαζί με το τελευταίο μήνυμα που

παραλείφθηκε (σχήμα 8-18).

Σχήμα 8-18 Επαναφορά ιδιωτικής συνομιλίας

Όταν ο χρήστης πατήσει το κουμπί “back” της συσκευής, κλείνει η οθόνη, του εμφανίζεται το

μήνυμα “Disconnect MILC!” (σχήμα 8-19) και στη συνέχεια οδηγείται πίσω στην αρχική οθόνη

Login Screen. Παράλληλα αποστέλλεται στον διακομιστή το μήνυμα “Disconnect” και έτσι ο

χρήστης και η εφαρμογή αποσυνδέεται.

Page 73: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

63

Σχήμα 8-19 Παράθυρο διαλόγου Disconnect MILC

Τέλος όταν ένας χρήστης τερματίσει την εφαρμογή, εμφανίζεται το μήνυμα ειδοποίησης “Exit

MILC” όπως παρουσιάζεται στο σχήμα 8-20.

Σχήμα 8-20 Παράθυρο διαλόγου Exit MILC

Page 74: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

64

8.3 Κρυπτογραφικοί αλγόριθμοι

Πολύ σημαντικό ρόλο παίζουν οι μέθοδοι κρυπτογράφησης που είναι και ο σκοπός αυτής της

εφαρμογής. Όπως αναφέραμε στο κεφάλαιο 4, γίνεται διπλή κρυπτογράφηση για την ανταλλαγή

μηνυμάτων τόσο μεταξύ του χρήστη και του server όσο και των χρηστών μεταξύ τους. Στην

διαδικασία λοιπόν αυτή υλοποιείται και συμμετρική και ασύμμετρη κρυπτογράφηση. Για την

ασύμμετρη κρυπτογράφηση χρησιμοποιείται ο αλγόριθμος RSA ενώ για τη συμμετρική

κρυπτογράφηση χρησιμοποιείται ο αλγόριθμος AES. Επίσης κατά τη διαδικασία της ασύμμετρης

κρυπτογραφίας γίνεται και έλεγχος της ψηφιακής υπογραφής.

Ασύμμετρη κρυπτογράφηση με RSA

Ο αλγόριθμος RSA χρησιμοποιεί δύο διαφορετικά κλειδιά. Το δημόσιο κλειδί και το ιδιωτικό

κλειδί. Το δημόσιο κλειδί είναι για να κρυπτογραφεί, και το ιδιωτικό κλειδί που είναι για να

αποκρυπτογραφεί.

Κρυπτογράφηση με RSA

Ο αλγόριθμος δέχεται σαν είσοδο ένα δημόσιο κλειδί RSA και τα δεδομένα σε έναν πίνακα bytes.

Επιστρέφει το κρυπτογραφημένο μήνυμα σε έναν πίνακα bytes. Εδώ ο αλγόριθμος χρησιμοποίει

PKCS1 κωδικοποίηση για το Formatter Engine.

static byte[] RSAencrypt( PublicKey publicKey, byte[] plaintext ) throws CryptoException, IOException { // Create the encryptor engine.

RSAEncryptorEngine engine = new RSAEncryptorEngine( (RSAPublicKey) publicKey );

//Use the PKCS1 padding for the encryption. The PKCS1FormatterEngine class //provides the PKCS1 encoding functionality on a block by block basis.The block //length is the size of the modulus of an EncryptorEngine minus the overhead. PKCS1FormatterEngine fengine = new PKCS1FormatterEngine(engine); ByteArrayOutputStream output = new ByteArrayOutputStream(); BlockEncryptor encryptor = new BlockEncryptor( fengine, output ); encryptor.write( plaintext ); // Write out the data. encryptor.close(); output.close(); return output.toByteArray(); }

Page 75: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

65

Αποκρυπτογράφηση με RSA

Ο αλγόριθμος δέχεται ως είσοδο ένα ιδιωτικό κλειδί RSA και τα δεδομένα που είναι για

αποκρυπτογράφηση σε έναν πίνακα bytes. Επιστρέφει το αποκρυπτογραφημένο, δηλαδή το

αρχικό μήνυμα σε έναν πίνακα bytes. Όπως και στον “RSAencrypt” , ο αλγόριθμος χρησιμοποίει

PKCS1 κωδικοποίηση για το Formatter Engine.

/** * Decrypt the ciphertext passed into this method using the public key. The plaintext should * be returned from the method. * @param privateKey an RSAPrivateKey that should be used for decrypting the data. * @param ciphertext the data to be decrypted. * @return the plaintext or decrypted data. */ private static byte[] RSAdecrypt( RSAPrivateKey privateKey, byte[] ciphertext ) throws CryptoException, IOException { // Create the decryptor engine. RSADecryptorEngine engine = new RSADecryptorEngine( privateKey ); // Use the PKCS1 padding. PKCS1UnformatterEngine uengine = new PKCS1UnformatterEngine(engine); ByteArrayInputStream input = new ByteArrayInputStream( ciphertext ); BlockDecryptor decryptor = new BlockDecryptor( uengine, input ); // Now, read in the data. byte[] temp = new byte[ 100 ]; DataBuffer buffer = new DataBuffer(); for( ;; ) { int bytesRead = decryptor.read( temp ); buffer.write( temp, 0, bytesRead ); if( bytesRead < 100 ) { // We ran out of data. break; } } return buffer.getArray(); }

Page 76: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

66

Αυθεντικοποίηση

Η αυθεντικοποίηση αποτελεί κομμάτι της ασύμμετρης κρυπτογραφίας και για το σκοπό αυτό

υπάρχουν αλγόριθμοι για τη δημιουργία ψηφιακής υπογραφής από έναν αποστολέα και για την

επαλήθευσή της από τον παραλήπτη.

Ψηφιακή Υπογραφή

Η συνάρτηση “sing” χρησιμοποιείται για την ψηφιακή υπογραφή δεδομένων με τη χρήση του

ενός ιδιωτικού κλειδιού RSA. Ο αλγόριθμος δέχεται ως είσοδο το κλειδί RSA και τα δεδομένα

προς υπογραφή σε μορφή πίνακα bytes και επιστρέφει ένα πίνακα bytes, ο οποίος αποτελεί τα

δεδομένα της ψηφιακής υπογραφής.

/** * Use the data and the private key to produce a signature that will provide data integrity * and data authentication. * @param privateKey the private key to use for signing the data. * @param data the data to be signed. * @return the signature. */ private static byte[] sign( RSAPrivateKey privateKey, byte[] data ) throws CryptoException { // Create the PKCS1 signature signer. This is the standard // method used to create a signature with an RSA key. //Note that by default this uses a SHA digest. PKCS1SignatureSigner signer = new PKCS1SignatureSigner( privateKey ); signer.update( data ); byte[] signature = new byte[ signer.getLength() ]; signer.sign( signature, 0 ); return signature; }

Επαλήθευση Ψηφιακής Υπογραφής – Verification

Η συνάρτηση “verifySignature” χρησιμοποιείται για την επαλήθευση της ψηφιακής υπογραφής.

Δέχεται ως είσοδο το δημόσιο κλειδί (Public Key) της οντότητας που δημιούργησε την ψηφιακή

υπογραφή, τα δεδομένα με τα οποία σχετίζεται η υπογραφή σε μορφή πίνακα bytes, και την

υπογραφή επίσης σε πίνακα bytes. Επιστρέφει μια μεταβλητή Boolean της οποίας η τιμή είναι

“true” εάν ο αλγόριθμός επαληθεύει την υπογραφή και “false” σε αντίθετη περίπτωση.

Page 77: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

67

/** * Use the data and the public key to verifying that the signature is correct. * @param publicKey the Public Key to use for verification. * @param data the data that the signature was created with. * @param signature the signature on the data. * @return a boolean indicating whether or not the signature is valid. */

private static boolean verifySignature(PublicKey publicKey, byte[] data, byte[] signature ) throws CryptoException { PKCS1SignatureVerifier verifier = new PKCS1SignatureVerifier( (RSAPublicKey) publicKey , signature, 0 ); verifier.update( data ); return verifier.verify(); }

Συμμετρική Κρυπτογράφηση με AES

Ο συμμετρικός αλγόριθμος χρησιμοποιεί ένα μυστικό συμμετρικό κλειδί τόσο για την

κρυπτογράφηση, όσο και για την αποκρυπτογράφηση των δεδομένων.

Κρυπτογράφηση με τον αλγόριθμο AES

Η συνάρτηση του αλγορίθμου δέχεται ως είσοδο το συμμετρικό κλειδί AESkey, και τα δεδομένα

(αρχικό κείμενο) που πρόκειται να κρυπτογραφηθούν σε μορφή πίνακα bytes. Επιστρέφει έναν

πίνακα bytes ο οποίος αποτελεί τα κρυπτογραφημένα δεδομένα.

private static byte[] AESencrypt( AESKey aeskey, byte[] data ) throws CryptoException, IOException { // Create the AES key to use for encrypting the data. // This will create an AES key using as much of the keyData // as possible. // Now, we want to encrypt the data. // First, create the encryptor engine that we use for the actual // encrypting of the data. AESEncryptorEngine engine = new AESEncryptorEngine(aeskey); // Since we cannot guarantee that the data will be of an equal block // length we want to use a padding engine (PKCS5 in this case). PKCS5FormatterEngine fengine = new PKCS5FormatterEngine(engine); // Create a BlockEncryptor to hide the engine details away. ByteArrayOutputStream output = new ByteArrayOutputStream();

Page 78: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

68

BlockEncryptor encryptor = new BlockEncryptor(fengine, output); encryptor.write(data); encryptor.close(); output.close(); // Now, the encrypted data is sitting in the ByteArrayOutputStream. // We simply want to retrieve it. return output.toByteArray(); }

Αποκρυπτογράφηση με τον αλγόριθμο AES

Η συνάρτηση του αλγορίθμου, δέχεται ως είσοδο το συμμετρικό κλειδί AES key, και τα

κρυπτογραφημένα δεδομένα που πρόκειται να αποκρυπτογραφηθούν σε μορφή πίνακα bytes.

Επιστρέφει έναν πίνακα bytes ο οποίος αποτελεί τα αποκρυπτογραφημένα δεδομένα, δηλαδή το

αρχικό μήνυμα.

private static byte[] AESdecrypt( AESKey aeskey, byte[] ciphertext ) throws CryptoException, IOException { // Now, create the decryptor engine. AESDecryptorEngine engine = new AESDecryptorEngine( aeskey ); // Since we cannot guarantee that the data will be of an equal //block length // we want to use a padding engine (PKCS5 in this case). PKCS5UnformatterEngine uengine = new PKCS5UnformatterEngine( engine ); // Create the BlockDecryptor to hide the decryption details away. ByteArrayInputStream input = new ByteArrayInputStream( ciphertext ); BlockDecryptor decryptor = new BlockDecryptor( uengine, input ); // Now, read in the data. Remember that the last 20 bytes //represent the SHA1 hash of the decrypted data. byte[] temp = new byte[ 100 ]; DataBuffer buffer = new DataBuffer(); for( ;; ) { int bytesRead = decryptor.read( temp ); buffer.write( temp, 0, bytesRead ); if( bytesRead < 100 ) { // We ran out of data. break; } } byte[] plaintext = buffer.getArray(); // Now, hash the plaintext and compare against the // hash that we found in the decrypted data. return plaintext; }

Page 79: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

69

ΒΙΒΛΙΟΓΡΑΦΙΑ

[1] David Lane, Supervisor: Philip Evans, “Instant Messaging Security”, project submitted in

partial fulfillment of the requirements of the MSc degree in IT security of the University of

Westminster, December 2003

[2] Paul Festa. Icq logs spark corporate nightmare. CNET News.com, March 2001. Thousands of

confidential messages between the CEO of an Internet company and top executives have been

posted on the Web.

[3] Charles P. Pfleeger. “Security in Computing”. Prentice Hall PTR, second edition, September

1996. Hardcover: 592 pages; Dimensions (in inches): 1.00 x 9.50 x 7.25 Publisher: Prentice Hall

PTR; 2nd edition (September 16, 1996).

[4] FOSK and Surge. Trillian info for 2600. Unknown, 2003

[5] Sebastian Schrittwieser, Peter Fruhwirt, Peter Kieseberg, Manuel Leithner, Martin Mulazzani,

Markus Huber, Edgar Weippl, “Guess Who’s Texting You? Evaluating the Security of

Smartphone Messaging Applications” SBA Research gGmbH Vienna, Austria 2012

[6] D. Cortjens, A. Spruyt, W.F.C. Wieringa, “WhatsApp Database Encryption”, Project Report

31th of December, 2011

[7] Matt Sexton Karen Scarfone, Murugiah Souppaya, “Guide to Storage Encryption

Technologies for End User Devices”, Number SP800-111. NIST National Institute of Standards

and Technology, Gaithersburg, MD 20899-8930, November 2007

[8] Stelios Avramidis, MILC SYMBIAN, B.Sc. Thesis, University of Aegean, Samos, 2011

[9] Athanasios Loukas and Dimitrios Damopoulos and Sofia A. Menesidou and Maria E. Skarkala

and Georgios Kambourakis and Stefanos Gritzalis, “MILC: A secure and privacy-preserving

mobile instant locator with chatting”, Springer Science+Business Media, LLC 2010

[10] http://docs.blackberry.com/en/smartphone_users/deliverables/39933/

[11] http://us.blackberry.com/business/topics/security

[12] http://www.eclipse.org/

[13] http://developer.blackberry.com/

[14] http://www.blackberry.com/developers/docs/7.0.0api/

Page 80: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

70

ΠΑΡΑΡΤΗΜΑ I - ΚΩΔΙΚΑΣ

MILC.java

package mypackage; import net.rim.device.api.ui.UiApplication; public class MILC extends UiApplication { static String version="2.1", hostOS = System.getProperty("os.name"), alias; static boolean sendLoc=true, notSound, locSound, bSound, eSound=true, splash=true; static MILC app; public static void main(String args[]) { app = new MILC (); app.enterEventDispatcher(); } public MILC() { // Create login screen. LoginScreen loginscreen= new LoginScreen(); pushScreen(loginscreen); } }

Page 81: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

71

LoginSceen.java

package mypackage; import net.rim.device.api.ui.Color; import net.rim.device.api.ui.Field; import net.rim.device.api.ui.FieldChangeListener; import net.rim.device.api.ui.Font; import net.rim.device.api.ui.UiApplication; import net.rim.device.api.ui.XYEdges; import net.rim.device.api.ui.component.BasicEditField; import net.rim.device.api.ui.component.ButtonField; import net.rim.device.api.ui.component.CheckboxField; import net.rim.device.api.ui.component.Dialog; import net.rim.device.api.ui.component.LabelField; import net.rim.device.api.ui.component.ObjectChoiceField; import net.rim.device.api.ui.component.PasswordEditField; import net.rim.device.api.ui.component.SeparatorField; import net.rim.device.api.ui.container.MainScreen; import net.rim.device.api.ui.container.VerticalFieldManager; import net.rim.device.api.ui.decor.Background; import net.rim.device.api.ui.decor.BackgroundFactory; import net.rim.device.api.ui.decor.Border; import net.rim.device.api.ui.decor.BorderFactory; public class LoginScreen extends MainScreen{ LabelField title = new LabelField("Welcome MILCer!", FIELD_HCENTER ); Border myBorder = BorderFactory.createSimpleBorder(new XYEdges(15, 16, 15, 16),Border.STYLE_FILLED); String choices[] = {"Online","Away","Busy"}; BasicEditField username = new BasicEditField(); PasswordEditField pwd = new PasswordEditField(); static BasicEditField alias = new BasicEditField(); ObjectChoiceField status = new ObjectChoiceField("Status:",choices,0); CheckboxField checkbox = new CheckboxField("Remember me!", false); XYEdges padding = new XYEdges(10, 10, 10, 10); int lineStyle = Border.STYLE_SOLID; int color = Color.DARKSLATEGRAY; Border roundedBorder = BorderFactory.createRoundedBorder(padding,color,lineStyle); SeparatorField spfield = new SeparatorField(); ButtonField mySubmitButton = new ButtonField("Login", Field.FIELD_HCENTER){ public int getPreferredWidth() { return 150; }

Page 82: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

72

protected void onUnfocus(){ this.setFocus(); } }; FieldChangeListener listener = new FieldChangeListener() { public void fieldChanged(Field field, int context) { //------------- if(alias.getTextLength() == 0){ alias.setText(username.getText()); } if(alias.getText().indexOf("`") > -1) { alias.setText( StringTokenizer.replaceAll(alias.getText(), "`", "'")); } if (username.getTextLength() == 0 || pwd.getTextLength()==0) { Dialog.alert("One or more fields are empty!"); } else { if(!(alias.getText().indexOf(" ") > -1 ) && !( pwd.getText().indexOf(" ") > -1 ) && !( pwd.getText().indexOf(" ") > -1 ) ) { if(alias.getText().length()<=15 && alias.getText().length()>1){ if(alias.getText().length()>3 && alias.getText().substring(0,4).equalsIgnoreCase("milc")) { Dialog.alert("Alias already in use!"); } else { //Open a new Screen MilcScreen milcScreen = new MilcScreen(); Connect conn = new Connect( username.getText(), pwd.getText(), alias.getText(), status.getSelectedIndex() + 1 ); conn.start(); UiApplication.getUiApplication().pushScreen(milcScreen); MILC.alias = alias.getText(); } } else { Dialog.alert("Alias must be between 2 and 15 characters"); } } else

Page 83: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

73

{ Dialog.alert("Fields must not contain spaces!"); } } } }; VerticalFieldManager vfm = new VerticalFieldManager(); public LoginScreen() { //------ TITLE ------ title.setBorder(myBorder); title.setFont(Font.getDefault().derive(Font.BOLD)); setTitle(title); Background bg = BackgroundFactory.createSolidBackground(Color.LIGHTGRAY); this.getMainManager().setBackground(bg); //--------- MAIN SCREEN ---- LabelField usernameLabel = new LabelField("Username: ",USE_ALL_WIDTH | USE_ALL_HEIGHT); username.setBackground(BackgroundFactory.createSolidTransparentBackground(Color.WHITE, 255)); username.setBorder(roundedBorder); LabelField passwordLabel = new LabelField("Password: ", FIELD_VCENTER); pwd.setBackground(BackgroundFactory.createSolidTransparentBackground(Color.WHITE, 255)); pwd.setBorder(roundedBorder); LabelField aliasLabel = new LabelField("Alias: ",USE_ALL_WIDTH | USE_ALL_HEIGHT); alias.setBackground(BackgroundFactory.createSolidTransparentBackground(Color.WHITE, 255)); alias.setBorder(roundedBorder); //-- ADD FIELDS TO THE VERTICAL FIELD MANAGER ----- vfm.add(usernameLabel); vfm.add(username); vfm.add(passwordLabel); vfm.add(pwd);

Page 84: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

74

vfm.add(spfield); vfm.add(aliasLabel); vfm.add(alias); vfm.add(status); vfm.add(checkbox); vfm.add(mySubmitButton); //--- ADD MANAGER TO SCREEN -------- add(vfm); //---- CUSTOMIZE FIELDS ----- mySubmitButton.setFocus(); mySubmitButton.setChangeListener(listener); spfield.setMargin(25,0,20,0); status.setMargin(10,120,0,0); vfm.setMargin(10,20,0,20); } public boolean onSavePrompt() { return true; } public void close() { // Display a farewell message before closing the application Dialog.alert("Exit MILC"); super.close(); } }

Page 85: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

75

MilcScreen.java

package mypackage; import java.util.Calendar; import java.util.Vector; import net.rim.device.api.crypto.PublicKey; import net.rim.device.api.system.Characters; import net.rim.device.api.system.Display; import net.rim.device.api.ui.Color; import net.rim.device.api.ui.Field; import net.rim.device.api.ui.FocusChangeListener; import net.rim.device.api.ui.Graphics; import net.rim.device.api.ui.Manager; import net.rim.device.api.ui.UiApplication; import net.rim.device.api.ui.XYEdges; import net.rim.device.api.ui.component.BasicEditField; import net.rim.device.api.ui.component.ButtonField; import net.rim.device.api.ui.component.Dialog; import net.rim.device.api.ui.component.ListField; import net.rim.device.api.ui.component.ListFieldCallback; import net.rim.device.api.ui.component.RichTextField; import net.rim.device.api.ui.component.SeparatorField; import net.rim.device.api.ui.component.TextField; import net.rim.device.api.ui.container.HorizontalFieldManager; import net.rim.device.api.ui.container.MainScreen; import net.rim.device.api.ui.container.VerticalFieldManager; import net.rim.device.api.ui.decor.Background; import net.rim.device.api.ui.decor.BackgroundFactory; import net.rim.device.api.ui.decor.Border; import net.rim.device.api.ui.decor.BorderFactory; public class MilcScreen extends MainScreen { //------------------------------------------------------ //------------------------------------------------------ //---------- PUBLIC variables ------------------- public static Vector _friends_Vector; public static ListField _friends_listField; public static Vector _chats_Vector; public static ListField _chats_listField; PublicKey puKey; HorizontalFieldManager hManager; SeparatorField separator; static VerticalFieldManager vfm_messages;

Page 86: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

76

private static ButtonField tab1_btn; private static ButtonField tab2_btn; private static ButtonField tab3_btn; //------------------------------------------------------ //------------------------------------------------------ //------------------------------------------------------ //------------------------------------------------------ private VerticalFieldManager tabArea; private VerticalFieldManager tab1Manager; private VerticalFieldManager tab2Manager; private VerticalFieldManager tab3Manager; private Background focus_bg = null; private Background unfocus_bg = null; public MilcScreen() { super( Manager.NO_VERTICAL_SCROLL ); hManager = new HorizontalFieldManager(); //-- Buttons ------------------------------------- tab1_btn = new ButtonField("MILCers", ButtonField.FOCUSABLE | ButtonField.HIGHLIGHT_SELECT | ButtonField.CONSUME_CLICK); tab2_btn= new ButtonField("Chats", ButtonField.FOCUSABLE | ButtonField.HIGHLIGHT_SELECT | ButtonField.CONSUME_CLICK); tab3_btn = new ButtonField("Broadcasts", ButtonField.FOCUSABLE | ButtonField.HIGHLIGHT_SELECT | ButtonField.CONSUME_CLICK); //-- TAB Managers ------------------------------------------- tab1Manager = new VerticalFieldManager(); tab2Manager = new VerticalFieldManager(); tab3Manager = new VerticalFieldManager(); tab1_btn.setFocusListener(tablistener); tab2_btn.setFocusListener(tablistener); tab3_btn.setFocusListener(tablistener); hManager.add(tab1_btn); hManager.add(tab2_btn); hManager.add(tab3_btn); separator = new SeparatorField(); add(hManager); add(separator);

Page 87: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

77

// -- Initialize TAB Managers -------------------------------- tab1Manager = getFriendList(); tab2Manager = getChatsList(); tab3Manager = getBroadcasts(); //-- Add the first tab in the main Manager ---- tabArea = tab1Manager; add(tabArea); focus_bg = tab1_btn.getBackground(); Dialog.alert("Welcome to MILC!"); }// Main Screen Constructor End // --- Buttons(tabs) Listener ----------------------------------- FocusChangeListener tablistener = new FocusChangeListener() { public void focusChanged(Field field, int eventType) { if (tabArea != null) { if (eventType == FOCUS_GAINED) { if (field == tab1_btn) { delete(tabArea); tabArea = tab1Manager; add(tabArea); tab1_btn.setBackground(focus_bg); } else if (field == tab2_btn) { delete(tabArea); tabArea = tab2Manager; add(tabArea); tab2_btn.setBackground(focus_bg); } else if (field == tab3_btn) { delete(tabArea); tabArea = tab3Manager; add(tabArea); tab3_btn.setBackground(focus_bg); } } if (eventType == FOCUS_LOST ) { if (field == tab1_btn) { tab1_btn.setBackground(unfocus_bg);

Page 88: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

78

} if (field == tab3_btn) { tab3_btn.setBackground(unfocus_bg); } if (field == tab2_btn) { tab2_btn.setBackground(unfocus_bg); } } } } }; //----------------------------------------------------------- //-- GET VFM Broadcasts ------------------------------------- //----------------------------------------------------------- public VerticalFieldManager getBroadcasts(){ VerticalFieldManager vfm = new VerticalFieldManager(Manager.USE_ALL_HEIGHT | Manager.NO_VERTICAL_SCROLL); HorizontalFieldManager hfm = new HorizontalFieldManager(Manager.USE_ALL_HEIGHT | Manager.NO_VERTICAL_SCROLL); VerticalFieldManager vfm_fields = new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL | Manager.FIELD_BOTTOM); final HorizontalFieldManager hfm_input_field = new HorizontalFieldManager(Field.FIELD_RIGHT ); vfm_messages = new VerticalFieldManager(Manager.FIELD_BOTTOM); BasicEditField myField = new BasicEditField(TextField.NO_NEWLINE) { protected void paint(Graphics g) { if (getTextLength() == 0) { g.setColor(Color.LIGHTGRAY); g.drawText("Broadcast Text", 0, 0); } g.setColor(Color.BLACK); super.paint(g); } protected boolean keyChar(char key, int status, int time) { if (key == Characters.ENTER) { //Handle the broadcast message handle_my_BroadcastMessage(this.getText()); //Clear the input text box this.setText(""); return true; // We've consumed the event.

Page 89: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

79

} return super.keyChar(key, status, time); } public boolean invokeAction(int action) { switch(action) { case ACTION_INVOKE: // Trackball click. //Handle the broadcast message handle_my_BroadcastMessage(this.getText()); //Clear the input text box this.setText(""); return true; // We've consumed the event. } return super.invokeAction(action); } }; Border myBorder = BorderFactory.createRoundedBorder(new XYEdges(10, 10, 10, 10)); myField.setBorder(myBorder); hfm_input_field.add(myField ); HorizontalFieldManager hfm_messages = new HorizontalFieldManager( Manager.USE_ALL_HEIGHT | Manager.VERTICAL_SCROLL){ protected void sublayout(int maxWidth, int maxHeight){ maxHeight = Display.getHeight() - hfm_input_field.getPreferredHeight() - hManager.getPreferredHeight() - 3*separator.getPreferredHeight(); super.sublayout(maxWidth, maxHeight); setExtent(maxWidth,maxHeight); } }; hfm_messages.add(vfm_messages); vfm_fields.add(hfm_messages); vfm_fields.add(hfm_input_field); hfm.add(vfm_fields); vfm.add(hfm); hfm_input_field.setBackground(BackgroundFactory.createSolidBackground(Color.LIGHTBLUE)); hfm_messages.setBackground(BackgroundFactory.createSolidBackground(Color.LAVENDER)); return vfm; } //-- Handle My BroadCast Messages that I send -------------------------

Page 90: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

80

public void handle_my_BroadcastMessage(String broadcast_text){ if(broadcast_text.length() > 0 && Connect.connected){ //----Prepare to Send ------------- if(broadcast_text.indexOf("`")>-1) { broadcast_text = StringTokenizer.replaceAll(broadcast_text, "`", "'"); } Messages.sendMessage("Chat`Broadcasts`"+broadcast_text); //--------------------display the message to Screen---- displayBroadcastMessage( MILC.alias , broadcast_text); } } //-- Prepare to Display BroadCast Message ----------------------------- public static void displayBroadcastMessage(String from, String broadcastText){ //---Prepare to display-------------- Calendar time = Calendar.getInstance(); final String broadcast = from +" ("+time.get(Calendar.HOUR_OF_DAY)+":"+time.get(Calendar.MINUTE)+"): "+broadcastText; UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { displayBroadcast(broadcast); } }); } //-- Display Broadcast Message public static void displayBroadcast(String text) { RichTextField field = new RichTextField(text, Field.FOCUSABLE); vfm_messages.add(field); field.setFocus(); if(!tab3_btn.isFocus()) { tab3_btn.setBackground(BackgroundFactory.createSolidBackground(Color.RED)); } } //------------------------------------------------------------------ //-- GET Friend List ---------------------------------------------- //------------------------------------------------------------------

Page 91: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

81

public VerticalFieldManager getFriendList(){ VerticalFieldManager vfm = new VerticalFieldManager (Manager.USE_ALL_WIDTH|Field.FOCUSABLE); _friends_Vector = new Vector(); _friends_listField = new ListField(ListField.HIGHLIGHT_SELECT){ public boolean invokeAction(int action) { switch(action) { case ACTION_INVOKE: // Trackball click. if( this.isEmpty()) { return true; // We've consumed the event. } else{ //Open Dialog box // Ask user if wants to get a private chat Session UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { String choices[] = {"OK","Cancel"}; Dialog dialog = new Dialog("Start Chat Session?",choices,null,0,null); if(dialog.doModal() == 0) { //add milcer to the Chats list Conversations.startChatSession( (String) _friends_Vector.elementAt(_friends_listField.getSelectedIndex()) ); } } }); return true; // We've consumed the event. } } return super.invokeAction(action); } }; FriendsListCallback _callback = new FriendsListCallback(); _friends_listField.setCallback(_callback); vfm.add(_friends_listField); reloadFriendsList();

Page 92: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

82

return vfm; } //-- Add friend to List ------------------------------------------ public static void addFriendToList(String milcer) { try{ if(milcer != null) { _friends_Vector.addElement(milcer); if(!tab1_btn.isFocus()) { tab1_btn.setBackground(BackgroundFactory.createSolidBackground(Color.RED)); } } UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { reloadFriendsList(); } }); }catch(Exception ef) { Messages.writeLog("AddFriend Exeption: "+ef); } } //-- Remove Friend From List --------------------------------------- public static void removeFriend(String milcer) { try{ //remove the item from the vector _friends_Vector.removeElement(milcer); //re-draw the listField UiApplication.getUiApplication().invokeLater(new Runnable() { public void run(){ reloadFriendsList(); } }); }catch(Exception ef) { Messages.writeLog("removeFriend Exeption: "+ef);

Page 93: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

83

} } //-- Reload Friends List ------------------------------------------- public static void reloadFriendsList() { try{ _friends_listField.setSize(_friends_Vector.size()); }catch(Exception er) { Messages.writeLog("ReloadList Exeption: "+er); } } //-- List Callback ------------------------------------------ private class FriendsListCallback implements ListFieldCallback { public void drawListRow(ListField list, Graphics g, int index, int y, int w) { String text = (String)_friends_Vector.elementAt(index); g.drawText(text, 0, y, 0, w); } public Object get(ListField list, int index) { return _friends_Vector.elementAt(index); } public int indexOfList(ListField list, String prefix, int string) { return _friends_Vector.indexOf(prefix, string); } public int getPreferredWidth(ListField list) { return Display.getWidth(); } } //----------------------------------------------------------------- //-- GET Chats List ---------------------------------------------- //----------------------------------------------------------------- public VerticalFieldManager getChatsList(){ VerticalFieldManager vfm = new VerticalFieldManager (Manager.USE_ALL_WIDTH|Field.FOCUSABLE); _chats_Vector = new Vector(); _chats_listField = new ListField(ListField.HIGHLIGHT_SELECT){

Page 94: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

84

public boolean invokeAction(int action) { switch(action) { case ACTION_INVOKE: // Trackball click. if( this.isEmpty()) { return true; // We've consumed the event. } else{ //Open Dialog box //Ask user if wants to get a private chat Session //Or if he wants to remove the chat from list UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { String choices[] = {"Open","Remove","Cancel"};// Dialog dialog = new Dialog("Private Chat:",choices,null,0,null); switch(dialog.doModal()) { case 0: displayChatScreen(_chats_listField.getSelectedIndex()); break; case 1: removeFromChatList(_chats_listField.getSelectedIndex()); break; ///---- delete Chat From Chats ---------- } } }); return true; // We've consumed the event. } } return super.invokeAction(action); } }; ChatsListCallback _callbackChats = new ChatsListCallback(); _chats_listField.setCallback(_callbackChats); vfm.add(_chats_listField); reloadChatsList(); return vfm; } //-- Add milcer to Chats List ------------------------------------------ public static void addToChatList(String milcer) {

Page 95: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

85

try{ if(milcer != null) { if(!_chats_Vector.contains(milcer)) { _chats_Vector.addElement(milcer); UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { reloadChatsList(); } }); } tab2_btn.setBackground(BackgroundFactory.createSolidBackground(Color.RED)); } }catch(Exception ef) { Messages.writeLog("AddChat Exeption: "+ef); } } //-- Remove Chat From List --------------------------------------- public static void removeFromChatList(int index) { try{ //check if the index is valid if( index > -1 && index < _chats_Vector.size() ){ //remove the item from the vector _chats_Vector.removeElementAt(index); //re-draw the listField UiApplication.getUiApplication().invokeLater(new Runnable() { public void run(){ reloadChatsList(); } }); } }catch(Exception ef) { Messages.writeLog("removeFromChat Exeption: "+ef); } }

Page 96: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

86

//-- Reload Chat List ------------------------------------------- public static void reloadChatsList() { try{ _chats_listField.setSize(_chats_Vector.size()); }catch(Exception er) { Messages.writeLog("ReloadChats Exeption: "+er); } } //-- Chat List Callback ------------------------------------------ private class ChatsListCallback implements ListFieldCallback { public void drawListRow(ListField list, Graphics g, int index, int y, int w) { String text = "Chat with: " + (String)_chats_Vector.elementAt(index); g.drawText(text, 0, y, 0, w); } public Object get(ListField list, int index) { return _chats_Vector.elementAt(index); } public int indexOfList(ListField list, String prefix, int string) { return _chats_Vector.indexOf(prefix, string); } public int getPreferredWidth(ListField list) { return Display.getWidth(); } } //-------------------------------------- //------- Display Chat Screen ---------- //-------------------------------------- public void displayChatScreen(int index) { String selected_milcer = (String) _chats_Vector.elementAt(index); ChatScreen chatScreen = new ChatScreen(selected_milcer); UiApplication.getUiApplication().pushScreen(chatScreen); }

Page 97: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

87

// -- On CLOSE ------------------ public void close() { // Display a farewell message before closing the application Dialog.alert("Disconnect MILC!"); Connect.connected=false; Messages.sendMessage("Disconnect`"); super.close(); } // -- OnSavePrompt ---------------- public boolean onSavePrompt() { return true; } }

Page 98: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

88

Connect.java

package mypackage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import javax.microedition.io.Connector; import javax.microedition.io.StreamConnection; import net.rim.device.api.crypto.BadPaddingException; import net.rim.device.api.crypto.BlockEncryptor; import net.rim.device.api.crypto.CryptoException; import net.rim.device.api.crypto.InvalidCryptoSystemException; import net.rim.device.api.crypto.InvalidKeyException; import net.rim.device.api.crypto.NoSuchAlgorithmException; import net.rim.device.api.crypto.PKCS1FormatterEngine; import net.rim.device.api.crypto.PublicKey; import net.rim.device.api.crypto.RSACryptoSystem; import net.rim.device.api.crypto.RSAEncryptorEngine; import net.rim.device.api.crypto.RSAKeyPair; import net.rim.device.api.crypto.RSAPublicKey; import net.rim.device.api.crypto.certificate.Certificate; import net.rim.device.api.crypto.certificate.CertificateFactory; import net.rim.device.api.crypto.certificate.CertificateParsingException; import net.rim.device.api.crypto.encoder.EncodedKey; import net.rim.device.api.crypto.encoder.PublicKeyEncoder; import net.rim.device.api.io.ConnectionClosedException; import net.rim.device.api.ui.component.Dialog; public class Connect implements Runnable { public static boolean connected=false; volatile static Thread listening; private String message; private String publicKey; public static PublicKey serverPublicKey; //private boolean stop = false; public InputStream is; static PrintStream os; public Connect(String uname, String pass, String alias, int status) {

Page 99: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

89

//-- Create Certificates ---------------------- try{ RSAKeyPair mykeypair = new RSAKeyPair( new RSACryptoSystem( 1024 )); Messages.my_prKey = mykeypair.getRSAPrivateKey(); //------- MY private key Messages.my_puKey = mykeypair.getRSAPublicKey(); //--------MY public key encodedKey = PublicKeyEncoder.encode(Messages.my_puKey); byte[] publicKeySend = encodedKey.getEncodedKey(); publicKey = Base64.encode(publicKeySend); //------------------------------------------------------- //--Extract Server Public Key from the stored Certificate //------------------------------------------------------- InputStream stream = getClass().getResourceAsStream("/other/milc.crt"); Certificate cf = CertificateFactory.getInstance("X509",stream); serverPublicKey = cf.getPublicKey(); } catch(NoSuchAlgorithmException e){ System.out.println("createCerts: "+e); Dialog.alert("createCerts 1: "+e); } catch(CertificateParsingException e){ System.out.println("createCerts: "+e); Dialog.alert("createCerts 2: "+e); } catch(InvalidCryptoSystemException e){ System.out.println("createCerts: "+e); Dialog.alert("createCerts 3: "+e); } catch(Exception e){ System.out.println("createCerts: "+e); Dialog.alert("createCerts 4: "+e); } // Start Connection ------------------------------------------ try { StreamConnection stream_connection = (StreamConnection) Connector.open("socket://195.251.166.50:6556;deviceside=true"); os = new PrintStream(stream_connection.openOutputStream() ); is = stream_connection.openInputStream();

Page 100: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

90

//--------------------------------- //--------------------------------- //---------- RSA ------------------ //--------------------------------- //--------------------------------- message = "de"+MILC.version+" "+uname+" "+pass+" "+alias+" "+status;

byte[] ciphertext = RSAencrypt( serverPublicKey, message.getBytes("UTF-8") ); message = Base64.encode(ciphertext); //------------ Send first connection string to Server -------------- os.println(message+" "+publicKey); os.flush(); } catch (ConnectionClosedException e){ System.out.println("run3: "+e); Dialog.alert("run3: "+e); //MILC.disconnected(""); } catch (IOException e) { System.out.println("run4: "+e); Dialog.alert("run4: "+e); //MILC.disconnected(""); } catch (InvalidKeyException e) { System.out.println("run5: "+e); Dialog.alert("run5: "+e); //MILC.disconnected(""); } catch (IllegalArgumentException e) { System.out.println("run6: "+e); //e.getMessage(); Dialog.alert("run6: "+e); //MILC.disconnected(""); } catch (BadPaddingException e) { System.out.println("run7: "+e); Dialog.alert("run7: "+e); //MILC.disconnected(""); } catch (Exception e) { System.out.println("run1: "+e); Dialog.alert("run1: "+e); //MILC.disconnected(""); } } //------ Constructor Connect() END----- /** * * Start the client thread

Page 101: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

91

* * */ //-------------------------------- //-------------------------------- //--------- RUN --------------- //-------------------------------- //-------------------------------- public void start() { Thread t = new Thread(this); t.start(); } public void run() { try { String reply; reply = get_reply(); if(reply!=null){ Messages.handleMessage(reply); //first Server reply while (true) { reply = get_reply(); if (reply!=null) { Messages.handleMessage(reply); } } } else { Dialog.alert("Reply:NULL"); stop(); } } catch (SecurityException ioe) { Dialog.alert("SecurityException:"+ioe); } catch (Exception e) { Dialog.alert("Exeption 4:"+e); } } /** * Close all open streams */

Page 102: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

92

private void stop() { try { //stop = true; if (is != null) { is.close(); } if (os != null) { os.close(); } } catch (IOException ioe) { Dialog.alert("Exeption stop:"+ioe); } } public String get_reply() { int ch = 0; String reply=null; StringBuffer buffer = new StringBuffer(); try { while ((ch = is.read()) != -1 && ch != '\n') { buffer.append((char) ch); if (ch == -1) { break; } } reply = buffer.toString(); } catch (IOException ex) { ex.printStackTrace(); Dialog.alert("Io exeption:"+ex); } buffer.delete(0, buffer.length()); return reply; } static byte[] RSAencrypt( PublicKey publicKey, byte[] plaintext ) throws CryptoException, IOException { // Create the encryptor engine.

Page 103: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

93

RSAEncryptorEngine engine = new RSAEncryptorEngine( (RSAPublicKey) publicKey ); // Use the PKCS1 padding for the encryption. The PKCS1FormatterEngine class provides //the PKCS1 encoding functionality on a block by block basis. The block length //is the size of the modulus of an EncryptorEngine minus the overhead. PKCS1FormatterEngine fengine = new PKCS1FormatterEngine(engine); ByteArrayOutputStream output = new ByteArrayOutputStream(); BlockEncryptor encryptor = new BlockEncryptor( fengine, output ); // Write out the data. encryptor.write( plaintext ); encryptor.close(); output.close(); return output.toByteArray(); } }

Page 104: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

94

Messages.java

package mypackage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStream; import java.util.Calendar; import java.util.Vector; import javax.microedition.io.Connector; import javax.microedition.io.file.FileConnection; import net.rim.device.api.crypto.AESDecryptorEngine; import net.rim.device.api.crypto.AESEncryptorEngine; import net.rim.device.api.crypto.AESKey; import net.rim.device.api.crypto.BlockDecryptor; import net.rim.device.api.crypto.BlockEncryptor; import net.rim.device.api.crypto.CryptoException; import net.rim.device.api.crypto.PKCS1SignatureVerifier; import net.rim.device.api.crypto.PKCS1UnformatterEngine; import net.rim.device.api.crypto.PKCS5FormatterEngine; import net.rim.device.api.crypto.PKCS5UnformatterEngine; import net.rim.device.api.crypto.PublicKey; import net.rim.device.api.crypto.RSADecryptorEngine; import net.rim.device.api.crypto.RSAPrivateKey; import net.rim.device.api.crypto.RSAPublicKey; import net.rim.device.api.crypto.RandomSource; import net.rim.device.api.ui.component.Dialog; import net.rim.device.api.util.DataBuffer; public class Messages { public static RSAPublicKey my_puKey; public static RSAPrivateKey my_prKey; static private AESKey skey; public static Vector notifications = new Vector(); static int counter=0; public static void handleMessage(String mess) throws InterruptedException{ if(mess.equals("Failed1")) Dialog.alert("Alias already in use!"); else if(mess.equals("Failed2")) Dialog.alert("Username and/or Password doesn't match!"); else{ if(counter==0){ try{ counter++; //StringTokenization

Page 105: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

95

String[] arrString = StringTokenizer.split(mess," "); String key = arrString[0]; String signature = arrString[1]; // ------Decrypt the key -------- //------------------------------- //------------- RSA ------------ //------------------------------- byte[] tmp = RSAdecrypt( my_prKey, Base64.decode(key) ); String skey_str = new String(tmp, "UTF-8"); byte[] encodedKey = Base64.decode(skey_str); skey = new AESKey(encodedKey,0,128); //------------------------------------------------------------- //----- SIGNATURE VERIFICATION ------------------------------ //------------------------------------------------------------- //------------------------------------------------------------- //verify the digital sign of Server using the Server public key //------------------------------------------------------------- boolean verify = verifySignature( Connect.serverPublicKey , Base64.decode(key), Base64.decode(signature) ); if(verify){ Connect.connected=true; } else{ Messages.sendMessage("Disconnect`"); Connect.connected=false; writeLog("Signature Verification Failed!"); Dialog.alert("Signature Verification Failed!"); } } catch(Exception e){ writeLog("Exeption:"+e); } } else{ byte[] temp = null; try{ // DECRYPT the Server message -- //------------------------------- //------------- AES ------------ //------------------------------- // Decrypt the data. temp = AESdecrypt( skey, Base64.decode(mess) ); mess = new String(temp,"UTF-8");

Page 106: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

96

} catch(Exception e){ Dialog.alert("Decrypt:"+e); } //------------------------------------------ //------- Handle Message ------------------- //------------------------------------------ if(mess.startsWith("Friends`")){ mess = mess.substring(8); if(mess.startsWith("in") || mess.startsWith("out") || mess.startsWith("change")){ Friends.handleFriends(mess); } else{ Friends.friendsList(mess); } } else if(mess.startsWith("Update`")){ mess = mess.substring(7); //alert: mess } else if(mess.startsWith("Chat`")){ mess = mess.substring(5); int first = mess.indexOf("`"); String from = mess.substring(0,first); mess = mess.substring(first+1); if(from.equals("Broadcasts")){ first = mess.indexOf("`"); from = mess.substring(0, first); mess = mess.substring(first+1); if(!Friends.friends.contains(from)) sendMessage("Friends`"); //Display the broadcast message to Broadcasts tab MilcScreen.displayBroadcastMessage(from,mess); } else{ if(!Friends.friends.contains(from)) sendMessage("Friends`"); if( mess.indexOf("`")>-1 ) //if contains "`" { //a Friend has sent the Secret Key for new Conversation //Decrypt the Secret Key and reply to Private Chat Request Conversations.handleSecretKey(from, mess); } else{ // Else, session already exists, Secret key is already stored try{

Page 107: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

97

if(Conversations.sKeys.containsKey(from)) { //------- AES -------------------- //-------------------------------- //- Decrypt received private chat- AESKey friend_key = (AESKey) Conversations.sKeys.get(from); temp = AESdecrypt( friend_key , Base64.decode(mess) ); mess = new String(temp,"UTF-8"); if(mess.equals("OK`")){ //Session established //Add friend to Chats List Conversations.friend_chat_connected.put((String)from,(String)"connected"); MilcScreen.addToChatList(from); } else{ Calendar time = Calendar.getInstance(); mess=from+" ("+time.get(Calendar.HOUR_OF_DAY)+":"+time.get(Calendar.MINUTE)+"): "+mess; Conversations.handleReceivedChat(from,mess); } } else{ writeLog("sKey is missing from user: "+from); Conversations.handleSecretKey(from,mess ); } } catch(Exception e){ writeLog("Decrypt Chat: "+e); Conversations.handleSecretKey(from,mess ); } } } } else if(mess.startsWith("BroadLoc`")){ mess = mess.substring(9); int first = mess.indexOf("`"); String from = mess.substring(0, first); mess = mess.substring(first+1); } else if(mess.startsWith("Location`")){ mess = mess.substring(9); int first = mess.indexOf("`"); String from = mess.substring(0, first); mess = mess.substring(first+1);

Page 108: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

98

// placePOIs(mess); } else if(mess.startsWith("Public`")){ String[] str = StringTokenizer.split(mess,"`"); String from = str[1]; String puKey = str[2]; //handle public key received Conversations.handlePublicKey(from, puKey); } else if(mess.equals("Disconnect`")){ Connect.connected=false; } else if(mess.equals("Exist`")){ // Already Connected writeLog("User Exists"); Dialog.alert("User Exists!"); } else if(mess.equals("Check`")){ sendMessage("OK`"); } else if(mess.startsWith("SM`")){ //handleSM } } } } public static void sendMessage(String Title, String friend, String mess){ try{ byte[] temp=null; if(mess.equals("New`")){ //For new messages and start conversation with a friend, //It is created a new AES key and is sent encrypted //with asymmetric RSA using the friend public key // Create the key we want to use for encryption and decryption. // Note that the RandomSource class provides cryptographically random // data which is suitable for use when creating keys. This is different // than using the Random class. // //We need a 16 byte length array. //With 16 bytes we can produce a key of 128 bits length byte[] key_bytes = RandomSource.getBytes( 16 ); //Construct the AES Symmetric key of 128 bits length AESKey aeskey = new AESKey(key_bytes,0,128); //Store the Secret Key-----------------

Page 109: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

99

Conversations.sKeys.put(friend, aeskey); //------------------------------------------------------ //----------RSA----------------------------------------- //------------------------------------------------------ //----Encrypt ----------Using the FRIEND public key ---- //extract Public Key from Friends //and encrypt the message(which contains the Secret Key) mess = Base64.encode(key_bytes); temp = Connect.RSAencrypt((PublicKey) Conversations.puKeys.get(friend),mess.getBytes("UTF-8")); mess = Base64.encode(temp)+"`"; } else{ //IF there is already established the connection with a friend //we use the symmetric Secret Key and the AES algorithm //------------------------------------------------------ //---------- AES ------------------------------ //------------------------------------------------------ //----Encrypt ----------Using the friend SYMMETRIC key - temp = AESencrypt( (AESKey) Conversations.sKeys.get(friend), mess.getBytes("UTF-8") ); mess = Base64.encode(temp); } sendMessage(Title+"`"+friend+"`"+mess); } catch(Exception e){ writeLog("Send2Friend Exeption: " +e); } } static void sendMessage(String mess){ try{ //------------------------------------------------------ //---------- AES ---------------------------------- //------------------------------------------------------ //----Encrypt using server Secret key------------------- byte[] encrypted = AESencrypt( skey, mess.getBytes("UTF-8") ); mess = Base64.encode(encrypted); Connect.os.println(mess);

Page 110: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

100

Connect.os.flush(); } catch(Exception e){ Connect.connected=false; writeLog("sendMessage Exception: " +e); System.out.println("sendMessage Exception: " +e); } } /** * Decrypt the ciphertext passed into this method using the public key. The plaintext should * be returned from the method. * @param privateKey an RSAPrivateKey that should be used for decrypting the data. * @param ciphertext the data to be decrypted. * @return the plaintext or decrypted data. */ public static byte[] RSAdecrypt( RSAPrivateKey privateKey, byte[] ciphertext ) throws CryptoException, IOException { // Create the decryptor engine. RSADecryptorEngine engine = new RSADecryptorEngine( privateKey ); // Use the PKCS1 padding. PKCS1UnformatterEngine uengine = new PKCS1UnformatterEngine(engine); ByteArrayInputStream input = new ByteArrayInputStream( ciphertext ); BlockDecryptor decryptor = new BlockDecryptor( uengine, input ); // Now, read in the data. byte[] temp = new byte[ 100 ]; DataBuffer buffer = new DataBuffer(); for( ;; ) { int bytesRead = decryptor.read( temp ); buffer.write( temp, 0, bytesRead ); if( bytesRead < 100 ) { // We ran out of data. break; } } return buffer.getArray(); }

Page 111: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

101

private static byte[] AESencrypt( AESKey aeskey, byte[] data ) throws CryptoException, IOException { // Create the AES key to use for encrypting the data. // This will create an AES key using as much of the keyData // as possible. // Now, we want to encrypt the data. // First, create the encryptor engine that we use for the actual // encrypting of the data. AESEncryptorEngine engine = new AESEncryptorEngine(aeskey); // Since we cannot guarantee that the data will be of an equal block // length we want to use a padding engine (PKCS5 in this case). PKCS5FormatterEngine fengine = new PKCS5FormatterEngine(engine); // Create a BlockEncryptor to hide the engine details away. ByteArrayOutputStream output = new ByteArrayOutputStream(); BlockEncryptor encryptor = new BlockEncryptor(fengine, output); encryptor.write(data); encryptor.close(); output.close(); // Now, the encrypted data is sitting in the ByteArrayOutputStream. // We simply want to retrieve it. return output.toByteArray(); } private static byte[] AESdecrypt( AESKey aeskey, byte[] ciphertext ) throws CryptoException, IOException { // Now, create the decryptor engine. AESDecryptorEngine engine = new AESDecryptorEngine( aeskey ); // Since we cannot guarantee that the data will be of an equal block length // we want to use a padding engine (PKCS5 in this case). PKCS5UnformatterEngine uengine = new PKCS5UnformatterEngine(engine); // Create the BlockDecryptor to hide the decryption details away. ByteArrayInputStream input = new ByteArrayInputStream( ciphertext ); BlockDecryptor decryptor = new BlockDecryptor( uengine, input ); // Now, read in the data. Remember that the last 20 bytes represent the SHA1 hash of the decrypted data. byte[] temp = new byte[ 100 ]; DataBuffer buffer = new DataBuffer(); for( ;; ) { int bytesRead = decryptor.read( temp ); buffer.write( temp, 0, bytesRead ); if( bytesRead < 100 ) { // We ran out of data. break;

Page 112: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

102

} } byte[] plaintext = buffer.getArray(); // Now, hash the plaintext and compare against the hash that we found in the decrypted data. return plaintext; } /** * Use the data and the public key to verifying that the signature is correct. * @param publicKey the Public Key to use for verification. * @param data the data that the signature was created with. * @param signature the signature on the data. * @return a boolean indicating whether or not the signature is valid. */ private static boolean verifySignature(PublicKey publicKey, byte[] data, byte[] signature ) throws CryptoException { PKCS1SignatureVerifier verifier = new PKCS1SignatureVerifier( (RSAPublicKey) publicKey , signature, 0 ); verifier.update( data ); return verifier.verify(); } public static void writeLog(String str) { try { FileConnection fc = (FileConnection)Connector.open("file:///SDCard/x_Log.txt"); // If no exception is thrown, then the URI is valid, but the file may or may not exist. if (!fc.exists()) { fc.create(); // create the file if it doesn't exist } PrintStream ps = new PrintStream(fc.openOutputStream(fc.fileSize())); ps.println(str + "\r\n"); ps.close(); fc.close(); } catch (IOException ioe) { System.out.println(ioe.getMessage() ); } } }

Page 113: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

103

Friends.java

package mypackage; import java.util.Hashtable; import java.util.Vector; import net.rim.device.api.ui.UiApplication; public class Friends { public static Vector friends = new Vector(); public static Hashtable friendStatus = new Hashtable(); public static Hashtable pref = new Hashtable(); public static void handleFriends(String message){ String[] arrayString = StringTokenizer.split(message,"`"); String state = arrayString[0]; String user = arrayString[1]; if(state.equals("in")){ int status=1; //Check if there is status if(arrayString.length>2) status = Integer.parseInt(arrayString[2]); //Check If user exist in Friends or Chats List if(MilcScreen._chats_Vector.contains(user)) { MilcScreen.removeFromChatList( MilcScreen._chats_Vector.indexOf(user) ); } if(MilcScreen._friends_Vector.contains(user)) { MilcScreen.removeFriend(user); } //-- Add user to list Friends -- MilcScreen.addFriendToList(user); friends.addElement(user); friendStatus.put(user, new Integer(status)); pref.put(user, new Integer(3));

Page 114: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

104

//Update Friends Keys -- if(Conversations.puKeys.containsKey(user)) Conversations.puKeys.remove(user); if(Conversations.sKeys.containsKey(user)) Conversations.sKeys.remove(user); } else if(state.equals("out")){ //Check and delete user from Friends and Chats List if(MilcScreen._chats_Vector.contains(user)) { MilcScreen.removeFromChatList( MilcScreen._chats_Vector.indexOf(user) ); } if(MilcScreen._friends_Vector.contains(user)) { MilcScreen.removeFriend(user); } friends.removeElement(user); friendStatus.remove(user); pref.remove(user); //Update Friend List if(Conversations.puKeys.containsKey(user)) Conversations.puKeys.remove(user); if(Conversations.sKeys.containsKey(user)) Conversations.sKeys.remove(user); Conversations.friend_chat_connected.put((String)user,(String)"disconnected"); if(Conversations.chats.contains(user Messages.notifications.removeElement(user); } else if(state.equals("change")){ int status = Integer.parseInt(arrayString[2]); friendStatus.put(user, new Integer(status)); //new FriendsRender(); } } public static void friendsList(String message){ //Empty the list try{ MilcScreen._friends_Vector.removeAllElements(); UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { MilcScreen.reloadFriendsList();

Page 115: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

105

} }); } catch(Exception e) { Messages.writeLog("Friends.freindslist exception: " +e); } friends.removeAllElements(); friendStatus.clear(); String[] arrayStr = StringTokenizer.split(message,"`"); int len = arrayStr.length; if(len==1) { len=0; } int i=0; while(i<len){ String tmp = arrayStr[i]; i++; int status = Integer.parseInt(arrayStr[i]); if(!tmp.equalsIgnoreCase( LoginScreen.alias.getText() )){ try{ //-- Add user to list Friends -- MilcScreen.addFriendToList(tmp); } catch(Exception e) { Messages.writeLog("exception 2: " +e); } //Add friends to the list friends.addElement(tmp); friendStatus.put(tmp, new Integer(status)); pref.put(tmp, new Integer(3)); } i++; } WhereAmI.sendSplash(); } }

Page 116: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

106

Conversations.java

package mypackage; import java.util.Hashtable; import java.util.Vector; import net.rim.device.api.crypto.AESKey; import net.rim.device.api.crypto.PublicKey; import net.rim.device.api.crypto.encoder.PublicKeyDecoder; public class Conversations { static int j=0; public static Vector chats = new Vector(); //------------------<String> public static Hashtable messages = new Hashtable(); //----<String,String> public static Hashtable last_chat_received = new Hashtable(); //-------<String,String> //indicates if a milcer is connected and has sent key confirmation public static Hashtable friend_chat_connected = new Hashtable(); //-------<String,String> public static Hashtable puKeys = new Hashtable(); //-----<String,PublicKey> public static Hashtable sKeys = new Hashtable(); //--<String,SecretKeySpec> static int error=0; public static void startChatSession(String friend) { if(!Conversations.puKeys.containsKey(friend)) { Messages.sendMessage("Public`"+friend); } else { if(!Conversations.sKeys.containsKey(friend)) Messages.sendMessage("Chat",friend,"New`"); else MilcScreen.addToChatList(friend); } } //Handle the requested public key, //in order to start a new conversation that we requested //After,we create and send secret key to friend

Page 117: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

107

public static void handlePublicKey(String from, String puKey){ try{ if(Conversations.puKeys.containsKey(from)) Conversations.puKeys.remove(from); puKey = puKey.trim(); //decode Public Key byte[] temp = Base64.decode(puKey); PublicKey decodedKey = PublicKeyDecoder.decode(temp, "X509"); Conversations.puKeys.put(from, decodedKey); if(!Conversations.sKeys.containsKey(from)) Messages.sendMessage("Chat",from,"New`"); } catch(Exception e){ Messages.writeLog("handlePublicKey Exception: "+e); } } //Handle the Secret key received //Store the Secret Key from Friend who has requested to private chat public static void handleSecretKey(String from, String mess){ try{ mess = mess.substring(0, mess.lastIndexOf('`')); //Decrypt the encrypted message(Secret Key) with RSA //by using my Private Key byte[] tmp = Messages.RSAdecrypt( Messages.my_prKey, Base64.decode(mess) ); String skey_str = new String(tmp, "UTF-8"); byte[] encodedKey = Base64.decode(skey_str); AESKey sKey = new AESKey(encodedKey,0,128); //Store the received private key to the hashtable of Secret Keys Conversations.sKeys.put(from, sKey); //send confirmation message to Friend who has requested private chat Messages.sendMessage("Chat",from,"OK`"); Conversations.friend_chat_connected.put((String)from,(String)"connected"); } catch(Exception e){

Page 118: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

108

Messages.writeLog("Exception handleSecretKey: "+e); //check if there is already stored any Secret Key from previous session if(Conversations.sKeys.containsKey(from)) Conversations.sKeys.remove(from); if(error++==10) Connect.connected = false; } } public static void handleReceivedChat(String from, String chat_message){ String str; //-- ADD chat_message to messages stored if((String) messages.get(from)!=null) { str = (String) messages.get(from) +"\n"+ chat_message; } else{ str = chat_message; } messages.put(from, str); //-- ADD chat_message to last_chat_received if((String) Conversations.last_chat_received.get(from)!=null && (String) Conversations.last_chat_received.get(from)!="") { str = (String) Conversations.last_chat_received.get(from) +"\n"+ chat_message; } else{ str = chat_message; } last_chat_received.put(from, str); MilcScreen.addToChatList(from); } }

Page 119: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

109

ChatScreen.java

package mypackage; import java.util.Calendar; import net.rim.device.api.system.Characters; import net.rim.device.api.system.Display; import net.rim.device.api.ui.Color; import net.rim.device.api.ui.Field; import net.rim.device.api.ui.Graphics; import net.rim.device.api.ui.Manager; import net.rim.device.api.ui.UiApplication; import net.rim.device.api.ui.XYEdges; import net.rim.device.api.ui.component.BasicEditField; import net.rim.device.api.ui.component.Dialog; import net.rim.device.api.ui.component.LabelField; import net.rim.device.api.ui.component.RichTextField; import net.rim.device.api.ui.component.TextField; import net.rim.device.api.ui.container.HorizontalFieldManager; import net.rim.device.api.ui.container.MainScreen; import net.rim.device.api.ui.container.VerticalFieldManager; import net.rim.device.api.ui.decor.BackgroundFactory; import net.rim.device.api.ui.decor.Border; import net.rim.device.api.ui.decor.BorderFactory; //------------------------------------------------------ //------------------------------------------------------ // ------ Public Class Private Chat Screen ------------- //------------------------------------------------------ //------------------------------------------------------ public class ChatScreen extends MainScreen implements Runnable { LabelField titlefield; static VerticalFieldManager vfm_messages; HorizontalFieldManager hfm_input_field ; VerticalFieldManager vfm_fields; HorizontalFieldManager hfm; final String milcer; public String str_tmp; ChatScreen(String friend) { super(Manager.USE_ALL_WIDTH | Manager.NO_VERTICAL_SCROLL); titlefield = new LabelField("Chat with Milcer: " + friend ,Field.NON_FOCUSABLE); setTitle(titlefield); milcer = friend; hfm = new HorizontalFieldManager(Manager.USE_ALL_HEIGHT | Manager.NO_VERTICAL_SCROLL); vfm_fields = new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL | Manager.FIELD_BOTTOM);

Page 120: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

110

hfm_input_field = new HorizontalFieldManager(Field.FIELD_RIGHT ); vfm_messages = new VerticalFieldManager(Manager.FIELD_BOTTOM); BasicEditField myField = new BasicEditField(TextField.NO_NEWLINE) { protected void paint(Graphics g) { if (getTextLength() == 0) { g.setColor(Color.LIGHTGRAY); g.drawText("Write a private message", 0, 0); } g.setColor(Color.BLACK); super.paint(g); } protected boolean keyChar(char key, int status, int time) { if (key == Characters.ENTER) { displayChatMessage_my(milcer, this.getText()); //Clear the input text box this.setText(""); return true; // We've consumed the event. } return super.keyChar(key, status, time); } public boolean invokeAction(int action) { switch(action) { case ACTION_INVOKE: // Trackball click. displayChatMessage_my( milcer , this.getText()); //Clear the input text box this.setText(""); return true; // We've consumed the event. } return super.invokeAction(action); } }; Border myBorder = BorderFactory.createRoundedBorder(new XYEdges(10, 10, 10, 10)); myField.setBorder(myBorder); hfm_input_field.add(myField ); HorizontalFieldManager hfm_messages = new HorizontalFieldManager( Manager.USE_ALL_HEIGHT | Manager.VERTICAL_SCROLL){ protected void sublayout(int maxWidth, int maxHeight){ maxHeight = Display.getHeight() - hfm_input_field.getPreferredHeight() - titlefield.getPreferredHeight(); super.sublayout(maxWidth, maxHeight); setExtent(maxWidth,maxHeight); } };

Page 121: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

111

hfm_messages.add(vfm_messages); vfm_fields.add(hfm_messages); vfm_fields.add(hfm_input_field); hfm.add(vfm_fields); add(hfm); hfm_input_field.setBackground(BackgroundFactory.createSolidBackground(Color.SKYBLUE)); hfm_messages.setBackground(BackgroundFactory.createSolidBackground(Color.WHEAT)); if((String) Conversations.messages.get(friend) != null) { displayChatMessage_received(friend, (String) Conversations.messages.get(friend) ); } Conversations.last_chat_received.put(friend, ""); //------------------ //-- Start Thread--- //------------------ Thread thread = new Thread(this); thread.start(); }// End PrivateChatScreen Constructor-------------- //---------------------------------------------------------- //-- Display my Chat Message ------------------------------- //---------------------------------------------------------- public void displayChatMessage_my(String milcer , String chat_text ){ if( chat_text.length() > 0 && Connect.connected && Friends.friends.contains(milcer) && (Conversations.friend_chat_connected.get(milcer) == "connected")) { if(chat_text.indexOf("`")>-1) //if contains "`" { StringTokenizer.replaceAll(chat_text,"`", "'"); } Messages.sendMessage("Chat",milcer,chat_text); Calendar time = Calendar.getInstance();

Page 122: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

112

chat_text = MILC.alias+" ("+time.get(Calendar.HOUR_OF_DAY)+":"+time.get(Calendar.MINUTE)+"): "+chat_text; RichTextField field = new RichTextField(chat_text, Field.FOCUSABLE); vfm_messages.add(field); field.setFocus(); // ------------ Add to conversations if(Conversations.messages.containsKey(milcer) ) //if is NOT the first chat message { chat_text = (String) Conversations.messages.get(milcer) +"\n"+ chat_text; } Conversations.messages.put(milcer, chat_text); } } //---------------------------------------------------------- //-- Display Received Chat Message ------------------------- //---------------------------------------------------------- public static void displayChatMessage_received(String milcer , String chat_text){ try{ RichTextField field = new RichTextField(chat_text, Field.FOCUSABLE); vfm_messages.add(field); field.setFocus(); }catch (Exception e) { //Dialog.alert("PrivateChate run Exeption:"+e); Messages.writeLog("DisplayChatExeption:"+e); } } //---------------------------------- //---------------------------------- //--------- Run ------------------ //---------------------------------- //run() function is running and listens //every time a new message is received

Page 123: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

113

public void run() { try { Thread.sleep(1000); while (true) { str_tmp= (String) Conversations.last_chat_received.get(milcer); if( str_tmp != "" ) { try{ UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { displayChatMessage_received(milcer, str_tmp ); } }); }catch (Exception e) { Dialog.alert("PrivateChate run Exeption:"+e); Messages.writeLog("PrivateChat run Exeption:"+e); } Conversations.last_chat_received.put(milcer,""); } Thread.sleep(500); } }catch (SecurityException ioe) { Dialog.alert("PrivateChate run SecurityExeption:"+ioe); Messages.writeLog("PrivateChate run SecurityExeption:"+ioe); } catch (Exception e) { Dialog.alert("PrivateChate run Exeption:"+e); Messages.writeLog("PrivateChate run Exeption:"+e); } }

Page 124: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

114

// -- OnSavePrompt ------------------------------- public boolean onSavePrompt() { return true; } // -- On Close ------------------------------- public void close() { // Display a farewell message before closing the application Dialog.alert("Chat will be closed"); super.close(); } }

Page 125: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

115

WhereAmI.java

package mypackage; public class WhereAmI { static int lat = 37793999; static int lng = 26701669; public static void sendSplash(){ if(MILC.splash && (lat!=0 & lng!=0) ){ Messages.sendMessage("SM`"+lat+"`"+lng+"`"); //---------------------------------------- } } }

Page 126: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

116

StringTokenizer.java

package mypackage; public class StringTokenizer { public static String[] split(String strString, String strDelimiter) { int iOccurrences = 0; int iIndexOfInnerString = 0; int iIndexOfDelimiter = 0; int iCounter = 0; // Check for null input strings. if (strString == null) { throw new NullPointerException("Input string cannot be null."); } // Check for null or empty delimiter // strings. if (strDelimiter.length() <= 0 || strDelimiter == null) { throw new NullPointerException("Delimeter cannot be null or empty."); } // If strString begins with delimiter // then remove it in // order // to comply with the desired format. if (strString.startsWith(strDelimiter)) { strString = strString.substring(strDelimiter.length()); } // If strString does not end with the // delimiter then add it // to the string in order to comply with // the desired format. if (!strString.endsWith(strDelimiter)) { strString += strDelimiter; } // Count occurrences of the delimiter in // the string. // Occurrences should be the same amount // of inner strings.

Page 127: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

117

while((iIndexOfDelimiter= strString.indexOf(strDelimiter,iIndexOfInnerString))!=-1) { iOccurrences += 1; iIndexOfInnerString = iIndexOfDelimiter + strDelimiter.length(); } // Declare the array with the correct // size. String[] strArray = new String[iOccurrences]; // Reset the indices. iIndexOfInnerString = 0; iIndexOfDelimiter = 0; // Walk across the string again and this // time add the // strings to the array. while((iIndexOfDelimiter= strString.indexOf(strDelimiter,iIndexOfInnerString))!=-1) { // Add string to // array. strArray[iCounter] = strString.substring(iIndexOfInnerString, iIndexOfDelimiter); // Increment the // index to the next // character after // the next // delimiter. iIndexOfInnerString = iIndexOfDelimiter + strDelimiter.length(); // Inc the counter. iCounter += 1; } return strArray; } public static String replaceAll(String source, String pattern, String replacement) { //If source is null then Stop //and retutn empty String. if (source == null) { return ""; } StringBuffer sb = new StringBuffer(); //Intialize Index to -1 //to check agaist it later int idx = 0; //Search source from 0 to first occurrence of pattern //Set Idx equal to index at which pattern is found.

Page 128: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

118

String workingSource = source; //Iterate for the Pattern till idx is not be -1. while ((idx = workingSource.indexOf(pattern, idx)) != -1) { //append all the string in source till the pattern starts. sb.append(workingSource.substring(0, idx)); //append replacement of the pattern. sb.append(replacement); //Append remaining string to the String Buffer. sb.append(workingSource.substring(idx + pattern.length())); //Store the updated String and check again. workingSource = sb.toString(); //Reset the StringBuffer. sb.delete(0, sb.length()); //Move the index ahead. idx += replacement.length(); } return workingSource; } }

Page 129: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

119

Base64.java

package mypackage; //package com.sun.org.apache.xerces.internal.impl.dv.util; /** * This class provides encode/decode for RFC 2045 Base64 as * defined by RFC 2045, N. Freed and N. Borenstein. * RFC 2045: Multipurpose Internet Mail Extensions (MIME) * Part One: Format of Internet Message Bodies. Reference * 1996 Available at: http://www.ietf.org/rfc/rfc2045.txt * This class is used by XML Schema binary format validation * * This implementation does not encode/decode streaming * data. You need the data that you will encode/decode * already on a byte arrray. * * @xerces.internal * * @author Jeffrey Rodriguez * @author Sandy Gao */ public final class Base64 { static private final int BASELENGTH = 128; static private final int LOOKUPLENGTH = 64; static private final int TWENTYFOURBITGROUP = 24; static private final int EIGHTBIT = 8; static private final int SIXTEENBIT = 16; //static private final int SIXBIT = 6; static private final int FOURBYTE = 4; static private final int SIGN = -128; static private final char PAD = '='; //static private final boolean fDebug = false; static final private byte [] base64Alphabet = new byte[BASELENGTH]; static final private char [] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; static { for (int i = 0; i < BASELENGTH; ++i) { base64Alphabet[i] = -1; } for (int i = 'Z'; i >= 'A'; i--) { base64Alphabet[i] = (byte) (i-'A'); } for (int i = 'z'; i>= 'a'; i--) { base64Alphabet[i] = (byte) ( i-'a' + 26); } for (int i = '9'; i >= '0'; i--) { base64Alphabet[i] = (byte) (i-'0' + 52);

Page 130: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

120

} base64Alphabet['+'] = 62; base64Alphabet['/'] = 63; for (int i = 0; i<=25; i++) lookUpBase64Alphabet[i] = (char)('A'+i); for (int i = 26, j = 0; i<=51; i++, j++) lookUpBase64Alphabet[i] = (char)('a'+ j); for (int i = 52, j = 0; i<=61; i++, j++) lookUpBase64Alphabet[i] = (char)('0' + j); lookUpBase64Alphabet[62] = (char)'+'; lookUpBase64Alphabet[63] = (char)'/'; } protected static boolean isWhiteSpace(char octect) { return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); } protected static boolean isPad(char octect) { return (octect == PAD); } protected static boolean isData(char octect) { return (octect < BASELENGTH && base64Alphabet[octect] != -1); } protected static boolean isBase64(char octect) { return (isWhiteSpace(octect) || isPad(octect) || isData(octect)); } /** * Encodes hex octects into Base64 * * @param binaryData Array containing binaryData * @return Encoded Base64 array */ public static String encode(byte[] binaryData) { if (binaryData == null) return null; int lengthDataBits = binaryData.length*EIGHTBIT; if (lengthDataBits == 0) { return ""; } int fewerThan24bits = lengthDataBits%TWENTYFOURBITGROUP; int numberTriplets = lengthDataBits/TWENTYFOURBITGROUP; int numberQuartet = fewerThan24bits != 0 ? numberTriplets+1 : numberTriplets; char encodedData[] = null; encodedData = new char[numberQuartet*4];

Page 131: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

121

byte k=0, l=0, b1=0,b2=0,b3=0; int encodedIndex = 0; int dataIndex = 0; //if (fDebug) { // System.out.println("number of triplets = " + numberTriplets ); //} for (int i=0; i<numberTriplets; i++) { b1 = binaryData[dataIndex++]; b2 = binaryData[dataIndex++]; b3 = binaryData[dataIndex++]; //if (fDebug) { // System.out.println( "b1= " + b1 +", b2= " + b2 + ", b3= " + b3 ); //} l = (byte)(b2 & 0x0f); k = (byte)(b1 & 0x03); byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0); byte val2 = ((b2 & SIGN)==0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0); byte val3 = ((b3 & SIGN)==0)?(byte)(b3>>6):(byte)((b3)>>6^0xfc); //if (fDebug) { // System.out.println( "val2 = " + val2 ); //System.out.println( "k4 = " + (k<<4)); //System.out.println( "vak = " + (val2 | (k<<4))); //} encodedData[encodedIndex++] = lookUpBase64Alphabet[ val1 ]; encodedData[encodedIndex++] = lookUpBase64Alphabet[ val2 | ( k<<4 )]; encodedData[encodedIndex++] = lookUpBase64Alphabet[ (l <<2 ) | val3 ]; encodedData[encodedIndex++] = lookUpBase64Alphabet[ b3 & 0x3f ]; } // form integral number of 6-bit groups if (fewerThan24bits == EIGHTBIT) { b1 = binaryData[dataIndex]; k = (byte) ( b1 &0x03 ); //if (fDebug) { // System.out.println("b1=" + b1); //System.out.println("b1<<2 = " + (b1>>2) ); //} byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0); encodedData[encodedIndex++] = lookUpBase64Alphabet[ val1 ]; encodedData[encodedIndex++] = lookUpBase64Alphabet[ k<<4 ]; encodedData[encodedIndex++] = PAD; encodedData[encodedIndex++] = PAD; } else if (fewerThan24bits == SIXTEENBIT) { b1 = binaryData[dataIndex]; b2 = binaryData[dataIndex +1 ]; l = ( byte ) ( b2 &0x0f ); k = ( byte ) ( b1 &0x03 );

Page 132: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

122

byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0); byte val2 = ((b2 & SIGN)==0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0); encodedData[encodedIndex++] = lookUpBase64Alphabet[ val1 ]; encodedData[encodedIndex++] = lookUpBase64Alphabet[ val2 | ( k<<4 )]; encodedData[encodedIndex++] = lookUpBase64Alphabet[ l<<2 ]; encodedData[encodedIndex++] = PAD; } return new String(encodedData); } /** * Decodes Base64 data into octects * * @param encoded string containing Base64 data * @return Array containind decoded data. */ public static byte[] decode(String encoded) { if (encoded == null) return null; char[] base64Data = encoded.toCharArray(); // remove white spaces int len = removeWhiteSpace(base64Data); if (len%FOURBYTE != 0) { return null;//should be divisible by four } int numberQuadruple = (len/FOURBYTE ); if (numberQuadruple == 0) return new byte[0]; byte decodedData[] = null; byte b1=0,b2=0,b3=0,b4=0; char d1=0,d2=0,d3=0,d4=0; int i = 0; int encodedIndex = 0; int dataIndex = 0; decodedData = new byte[ (numberQuadruple)*3]; for (; i<numberQuadruple-1; i++) { if (!isData( (d1 = base64Data[dataIndex++]) )|| !isData( (d2 = base64Data[dataIndex++]) )|| !isData( (d3 = base64Data[dataIndex++]) )|| !isData( (d4 = base64Data[dataIndex++]) )) return null;//if found "no data" just return null b1 = base64Alphabet[d1]; b2 = base64Alphabet[d2]; b3 = base64Alphabet[d3]; b4 = base64Alphabet[d4];

Page 133: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

123

decodedData[encodedIndex++] = (byte)( b1 <<2 | b2>>4 ) ; decodedData[encodedIndex++] = (byte)(((b2 & 0xf)<<4 ) |( (b3>>2) & 0xf) ); decodedData[encodedIndex++] = (byte)( b3<<6 | b4 ); } if (!isData( (d1 = base64Data[dataIndex++]) ) || !isData( (d2 = base64Data[dataIndex++]) )) { return null;//if found "no data" just return null } b1 = base64Alphabet[d1]; b2 = base64Alphabet[d2]; d3 = base64Data[dataIndex++]; d4 = base64Data[dataIndex++]; if (!isData( (d3 ) ) || !isData( (d4 ) )) {//Check if they are PAD characters if (isPad( d3 ) && isPad( d4)) { //Two PAD e.g. 3c[Pad][Pad] if ((b2 & 0xf) != 0)//last 4 bits should be zero return null; byte[] tmp = new byte[ i*3 + 1 ]; System.arraycopy( decodedData, 0, tmp, 0, i*3 ); tmp[encodedIndex] = (byte)( b1 <<2 | b2>>4 ) ; return tmp; } else if (!isPad( d3) && isPad(d4)) { //One PAD e.g. 3cQ[Pad] b3 = base64Alphabet[ d3 ]; if ((b3 & 0x3 ) != 0)//last 2 bits should be zero return null; byte[] tmp = new byte[ i*3 + 2 ]; System.arraycopy( decodedData, 0, tmp, 0, i*3 ); tmp[encodedIndex++] = (byte)( b1 <<2 | b2>>4 ); tmp[encodedIndex] = (byte)(((b2 & 0xf)<<4 ) |( (b3>>2) & 0xf) ); return tmp; } else { return null;//an error like "3c[Pad]r", "3cdX", "3cXd", "3cXX" where X is non data } } else { //No PAD e.g 3cQl b3 = base64Alphabet[ d3 ]; b4 = base64Alphabet[ d4 ]; decodedData[encodedIndex++] = (byte)( b1 <<2 | b2>>4 ) ; decodedData[encodedIndex++] = (byte)(((b2 & 0xf)<<4 ) |( (b3>>2) & 0xf) ); decodedData[encodedIndex++] = (byte)( b3<<6 | b4 ); } return decodedData; } /** * remove WhiteSpace from MIME containing encoded Base64 data. * * @param data the byte array of base64 data (with WS)

Page 134: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

124

* @return the new length */ protected static int removeWhiteSpace(char[] data) { if (data == null) return 0; // count characters that's not whitespace int newSize = 0; int len = data.length; for (int i = 0; i < len; i++) { if (!isWhiteSpace(data[i])) data[newSize++] = data[i]; } return newSize; } }

Page 135: MILC BlackBerry - University of the Aegean...MILC BlackBerry Η Διπλ &ματική Εργασία παρουσιάστηκε εν +πιον του Διδακτικο * Προσ

125

ΣΥΝΤΟΜΟ ΒΙΟΓΡΑΦΙΚΟ ΣΗΜΕΙΩΜΑ

Ο Δημήτρης Μηνάς γεννήθηκε στη Θεσσαλονίκη το 1987. Το 2005 αποφοίτησε από το λύκειο

«Ιδιωτικά Εκπαιδευτήρια Βέροιας» με άριστα. Το ίδιο έτος εισήχθη στο τμήμα Μηχανικών

Πληροφοριακών και Επικοινωνιακών Συστημάτων του Πανεπιστημίου Αιγαίου. Το 2011

εργάστηκε για ένα χρόνο ως μαθητευόμενος υπάλληλος στην εταιρία Eurovida - Popular Seguros

της πολυεθνικής τράπεζας Banco Popular, στη Λισσαβόνα της Πορτογαλίας, με το πρόγραμμα

πρακτικής εξάσκησης της AISEC. Ειδικεύεται σε θέματα βάσεων δεδομένων, προγραμματισμού,

ασφάλειας πληροφοριακών συστημάτων, κρυπτογραφίας και σε συστήματα υποστήριξης

αποφάσεων.