· ~4 λεπτά ανάγνωσης

Μια εφαρμογή αισθητήρων κίνησης και άνεσης, με προστασία από replay

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

Στόχος

Για το μάθημα Ασφαλείς Εφαρμογές για το Διαδίκτυο των Πραγμάτων του μεταπτυχιακού μου, ένας συμφοιτητής κι εγώ φτιάξαμε μια μικρή εφαρμογή αισθητήρων ως ομαδικό project δύο ατόμων. Ένας αισθητήρας στέλνει επιτάχυνση, θερμοκρασία και υγρασία, και η εφαρμογή μετατρέπει αυτούς τους αριθμούς σε δύο πράγματα που ενδιαφέρουν έναν άνθρωπο: τι κάνει αυτός που τον φοράει (κάθεται, περπατά, είναι ξαπλωμένος, πέφτει) και αν ο χώρος είναι άνετος. Επειδή είναι μάθημα ασφάλειας, τα μηνύματα έπρεπε επίσης να αντέχουν μια απλή επίθεση replay.

Τι δείχνει η εφαρμογή

ΠροβολήΑπό τι φτιάχνεται
ΆνεσηΓραφήματα θερμοκρασίας και υγρασίας σε πραγματικό χρόνο, μαζί με γράφημα του heat index
ΔραστηριότηταΚαθιστός, περπάτημα, ξαπλωμένος στο πλάι, μπρούμυτα, πτώση
ΣτατιστικάΧρόνος σε κάθε δραστηριότητα, μέση θερμοκρασία, υγρασία και heat index, και ένα διάγραμμα πίτας των δραστηριοτήτων

Άνεση: το heat index

Η θερμοκρασία μόνη της λέει λίγα για την άνεση· οι 30 °C σε ξηρό αέρα είναι πολύ διαφορετικοί από τους 30 °C με 80% υγρασία. Χρησιμοποιήσαμε το heat index, την τυπική παλινδρόμηση (Rothfusz) στη μορφή της σε Κελσίου, όπου T η θερμοκρασία σε °C και RH η σχετική υγρασία σε %:

HI = c1 + c2*T + c3*RH + c4*T*RH + c5*T^2 + c6*RH^2
     + c7*T^2*RH + c8*T*RH^2 + c9*T^2*RH^2

c1 = -8.78469475556   c2 = 1.61139411      c3 = 2.33854883889
c4 = -0.14611605      c5 = -0.012308094    c6 = -0.0164248277778
c7 = 0.002211732      c8 = 0.00072546      c9 = -0.000003582

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

Δραστηριότητα: διαβάζοντας το διάνυσμα της επιτάχυνσης

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

ΔραστηριότηταΚανόνας
ΚαθιστόςΗ συνιστώσα y της επιτάχυνσης είναι μεγαλύτερη από τις x και z
Ξαπλωμένος στο πλάιΗ συνιστώσα x είναι η μεγαλύτερη
ΜπρούμυταΗ συνιστώσα z είναι η μεγαλύτερη
ΠερπάτημαΤο μέτρο του διανύσματος είναι πάνω από ένα κατώφλι
ΠτώσηΜια μεγάλη, απότομη αλλαγή στην επιτάχυνση, ή μέτρο πάνω από ένα υψηλότερο κατώφλι

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

Προστασία από replay

Χωρίς προστασία, όποιος μπορεί να υποκλέψει ένα μήνυμα μπορεί να το ξαναστείλει αργότερα, και ο παραλήπτης δεν μπορεί να ξεχωρίσει το αντίγραφο από το πρωτότυπο. Μια ηχογραφημένη ένδειξη «όλα κανονικά» θα μπορούσε να ξανασταλεί για να κρύψει μια πραγματική πτώση. Η άμυνά μας ήταν να στέλνουμε με κάθε μήνυμα ένα nonce, μια τιμή που χρησιμοποιείται μόνο μία φορά.

Τι έμαθα

Κοιτώντας πίσω, θα άλλαζα τρία πράγματα.

Ομαδικό project μαθήματος για το MSc στην Κυβερνοασφάλεια & Επιστήμη Δεδομένων του Πανεπιστημίου Πειραιώς.

Θέλεις τα configs ή τον κώδικα από αυτό το lab, ή έχεις κάποια ερώτηση; Στείλε μου email στο kostaspapas1023@gmail.com

← όλα τα άρθρα