Google+

Πέμπτη, 21 Ιουλίου 2011

Multi-factor Authentication System

Στα πλαίσια του workshop θα ήθελα να καταγράψω, σε βήματα, κάποια βασικά σχετικά με τη σχεδίαση και την κατασκευή του hw αλλά και του sw.

Καταρχήν, να αναφέρουμε ότι για true MFA χρειάζεται να υλοποιούμε περισσότερες από 2 μεθόδους αυθεντικοποίησης (πχ κωδικός+rfid+αποτύπωμα, κωδικός+μαγ. κάρτα+φωνή κοκ). Στην κατασκευή μας επιλέξαμε τις εξής 3 μεθόδους :

Βήμα 1: επιλογή μεθόδων αυθεντικοποίησης:

1. Κωδικός
2. Κάρτα RFID
3. Φωνή

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

Βήμα 2: επιλογή κατάλληλων arduino shields/modules

1. Keypad module (πληκτρολόγιο σε 4x3 διάταξη)
2. RFID sensor + breakout w/ usb reader (ο αισθ. RFID συνδέεται μέσω ενός breakout το οποίο εκτός του ότι παρέχει τη σύνδεση του αισθ. με το arduino rx/gnd/vcc, παρέχει επίσης και δυνατότητα σύνδεσης μέσω usb απευθείας σε η/υ γιατί περιλαμβάνει κι ένα ftdi chip)
3. Voice Module (αυτό είναι αρκετά δοκιμασμένο module με δυνατότητες voice recognition on-chip με δικό του πρωτόκολλο σειριακής επικοινωνίας με τον atmel)

Ειδικότερα για τις συνδεσμολογίες Arduino <-> shields

Βήμα 3: συνδεσμολογία

i. Keypad


7 arduino digital pins input only


ii. RFID

1 arduino digital pin input only (+2 power vcc/gnd)

iii. Voice

2 arduino digital pins rx/tx (+2 vcc/gnd , +2 mic)


Αρχικά, δε χρειάζεται να συνδεθούν όλα μαζί με το arduino. Μπορούμε να τα συνδέουμε και να τα δοκιμάζουμε ένα-ένα τη φορά και στο τέλος όλα μαζί. Σε αυτό μας βοηθάει και η ίδια μοντελοποίηση της βασικής λειτουργίας του συστήματος που γίνεται με χρήση FSM (Finite States Machine).

Βήμα 4: μοντελοποίηση

Κάθε μέθοδος αυθεντικοποίησης, αποτελεί State μέσα στον κώδικα. Συνολικά υπάρχουν 3 States τα οποία το καθένα σε βρόχο υλοποιεί την αυθεντικοποίηση, υπάρχει μέθοδος μετάβασης, όταν προκύπτει επιτυχής αυθεντικοποίηση, από ένα State στο επόμενο. Όταν ολοκληρωθούν 3 επιτυχή State τότε υπάρχει έξοδος από το FSM σε μια "εξουσιοδοτημένη λειτουργία" εν προκειμένω κάνουμε HIGH το Led_pin ;) Η παρακάτω απεικόνιση βοηθάσει καλύτερα στην κατανόηση του FSM :


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

Βήμα 5: βιβλιοθήκες

i. keypad.h -> Περιέχει αντιστοιχήσεις μεταξύ input voltage levels <-> πλήκτρα
ii. vrobot_protocol.h -> περιέχει την υλοποίηση των εντολών που ανταλλάσει το arduino με το voice module μέσω μιας custom κωδικοποίησης
iii. pitches.h -> Περιέχει αντιστοιχήσεις μεταξύ pwm levels <-> νότες
iv. NewSoftSerial.h -> Serial επικοινωνία σε χρήση για το RFID sensor
v. FiniteStateMachine.h -> Υλοποίηση των function state(), transitionTo(), update() που αναφέρονται στον ορισμό και τη μετάβαση των State αντίστοιχα

Βήμα 6: Δημιουργία, για το κάθε State, ενός ή περισσοτέρων string που θα ελέγχονται ανάλογα πχ. για το keypad ένα string με τον κωδικό, για το RFID ένα string με το επιτρεπτό tag και για το Voice module το command επιβεβαίωσης του σωστού.

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

Βήμα 8: υλοποίηση επί μέρους συναρτήσεων (βλ. git repository)

Μερικά σημεία που πρέπει να προσέξουμε:

Βήμα 9: προγραμματισμός voice module

Ειδικότερα για το voice module υπάρχει η διαδικασία προγραμματισμού του, κατά την οποία μέσω μιας εφαρμογής, μας δίνεται η δυνατότητα εγγραφής των ηχητικών μυνημάτων-εντολών (στην embedded flash) που θα αποτελούν τις εξουσιοδοτημένες τιμές πρόσβασης όταν γίνεται ο έλεγχος στο FSM στο arduino. Το voice module, σύμφωνα με το spec. datasheet, έχει 2 mode (normal, programming) όταν βραχυκυκλώνουμε 2 ποδαράκια στο arduino το voice module αλλάζει mode (σύμφωνα με τη library).

Βήμα 10: enter code and then press # on keypad

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

Βήμα 11: RFID buffer clear

Παρατηρήθηκε, επίσης, ότι θα πρέπει να γίνεται καθαρισμός του buffer της σειριακής στο RFID γιατί όταν βρισκόμαστε σε κάποιο State πέρα του RFID, δλδ Keypad ή Voice και καταλάθος "περάσουμε" ένα rfid tag στο sensor, ο κωδικός του tag που αναγνώριζεται, παραμένει στον buffer και όταν το FSM μπει στο RFID State τότε, ελέγχει τον κωδικό που υπάρχει ήδη στο buffer πριν εισάγει το δικό του rfid tag ο χρήστης.

Βήμα 12: δοκιμή συστήματος


Βήμα 13: Future enhancements/ideas ?

Καλη επιτυχία !