Timing Attack (Επίθεση Χρόνου)

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Μετάβαση σε: πλοήγηση, αναζήτηση


Εισαγωγικά πρέπει να πούµε τα εξής: Κατά τις διαδικασίες που εκτελούνται από τον αλγόριθµο ενός προγράµµατος για την εξαγωγή του προσωπικού κλειδιού (private key), αλλά και την κρυπτογράφηση ή αποκρυπτογράφηση ενός µηνύµατος, ο χρόνος υπολογισµού ποικίλει. Αυτό δεν οφείλεται αποκλειστικά και µόνον στον αλγόριθµο. Εν γένει υφίσταται κυρίως λόγω των βρόγχων ενός αλγορίθµου (conditional statements), της µνήµης RAM, του είδους του επεξεργαστή του υπολογιστή που χρησιµοποιούµε, αλλά και των εντολών που αυτός χρησιµοποιεί, όπως για παράδειγµα οι τρόποι και ευκολία πολλαπλασιασµού και διαίρεσης. Τέλος εύλογο είναι ότι το µέγεθος των κλειδιών του κρυπτοσυστήµατος περιπλέκει χρονικά τον αλγόριθµο. Τα χρονικά δεδομένα αυτά, τα οποία µπορούν εύκολα να παρατηρηθούν σε έναν τρίτο υπολογιστή, χρησιµοποιούνται στο timing attack.

Σύστημα RSA[Επεξεργασία | επεξεργασία κώδικα]

Το σύστημα RSA συνίσταται στον υπολογισµό τουR=y^x(modn) από τα οποία τα n,y καθώς είναι δηµόσιο κλειδί και υποκλεµµένη πληροφορία αντίστοιχα, αποτελούν τα γνωστά στοιχεία του κρυπταναλυτή. Στόχος του τελευταίου είναι να ανακτήσει την τιµή του x, του προσωπικού κλειδιού. Ο παραλήπτης του µηνύµατος (και στην περίπτωσή μας το θύµα του κρυπταναλυτή), οφείλει να υπολογίσει την τιµή R=y^x(modn) για διάφορες τιµές του y, ενώ οι χρόνοι υπολογισµού που θα χρειαστεί να κάνει τα παραπάνω και να αποκρυπτογραφήσει το κείµενο, θεωρούνται γνωστά για τον κρυπταναλυτή. Από τα δεδοµένα αυτά , δηλαδή τον χρόνο που χρειάστηκε το συγκεκριµένο computer για να αποκρυπτογραφήσει το κείµενο, καθίσταται γνωστό στον κρυπταναλυτή ποιο κρυπτοσύστηµα χρησιµοποιήθηκε.

Υπολογισμός[Επεξεργασία | επεξεργασία κώδικα]

Σε αυτό το σηµείο ας κατανοήσουµε τι συµβαίνει κατά τον υπολογισµό του R=y^x(modn) όπου το x είναι µεγέθους w δυαδικών ψηφίων (bits), από τον επεξεργαστή του υπολογιστή µας:

Το x παίρνει τιµές ακολουθίες ψηφίων 0 και 1 και ο υπολογιστής υπολογίζει την εκάστοτε αριθµητική παράσταση. Εποµένως αν το x παίρνει τιµές ακολουθίες ψηφίων 0 και 1 και ο υπολογιστής υπολογίζει την εκάστοτε αριθµητική παράσταση. Εποµένως αν το x ήταν 01001000100001000001000000010000, µεγέθους 32 bit δηλαδή, ο επεξεργαστής θα έκανε την πράξη y^0y^1y^0y^0y^1y^0...y^1y^0y^0y^0(modn)

Ουσιαστικά ο επεξεργαστής υπολογίζει την παραπάνω αριθµητική παράσταση έως ότου το επόµενο δυαδικό ψηφίο δεν υπάρχει όπου και σταµατά. Βάσει όλων αυτών ο κρυπταναλυτής πρέπει να εφαρµόσει κάποια µέθοδο για να µπορέσει να προσδιορίζει το εκάστοτε δυαδικό ψηφίο της παράστασης y^x(modn) και ο προσδιορισµός αυτός να µην είναι κάτι το εντελώς τυχαίο, όπως στην χρήση της ωµής επίθεσης όπου και θα δίναµε αυθαίρετες τιµές στο x έως ότου είχαµε κάποιο αποτέλεσµα που να έβγαζε νόηµα µετά την αποκρυπτογράφηση του κειµένου µε το υποτιθέµενο κλειδί x.

Βάσει των προαναφερθέντων αυτό που έχει να κάνει ο κρυπταναλυτής είναι κάτι απλό. Παρατηρεί τον υπολογιστή του παραλήπτη και καταγράφει τη χρήση του επεξεργαστή για τον υπολογισµό του y^x(modn). Αν ο χρόνος που απαιτείται από το σύστηµα του υπολογιστή να υπολογίσει τον αλγόριθµο, είναι γρήγορος, ενώ το R^b=y^b(modn) είναι πολύ γρήγορο, το εκθετικό ψηφίο b είναι µάλλον µηδέν (0). Προφανώς η χρήση της παραπάνω διαδικασίας γίνεται έως ότου βρεθούν - υποτεθούν και τα επόµενα εκθετικά ψηφία.

Επαλήθευση κρυπτοσυστήματος[Επεξεργασία | επεξεργασία κώδικα]

Ως είδος ωµής επίθεσης, έτσι και στην επίθεση χρόνου, µετά την εξαγωγή κάποιου αποτελέσµατος απευθείας γίνεται χρήση αυτού για να παρατηρηθεί αν επαληθεύεται το κρυπτοσύστηµα. Έτσι σε περίπτωση που υπάρχει λάθος στην εύρεση ενός εκθετικού ψηφίου, η επίθεση δεν θα έχει νόηµα αφού το κείµενο θα είναι µη αναγνώσιµο.

Για να γίνει η υπόθεση των δυαδικών ψηφίων πιο σίγουρη πρέπει να έχουµε έναν ελάχιστο αριθµό χρονικών δειγµάτων που θα χρησιµοποιήσουµε µε τον εξής τρόπο: Η όλη επίθεση προσεγγιστικά είναι σαν ένα πρόβληµα ανίχνευσης σήµατος. Ως επακόλουθο, για τα j διαφορετικά µηνύµατα y_0,y_1,...,y_{j-1} µε αντίστοιχες χρονικές µετρήσεις T_0,T_1,...,T_{j-1} η πιθανότητα ένα x_b για τα πρώτα b εκθετικά ψηφία να είναι το σωστό είναι ανάλογη µε :

P(x_b)\propto \prod_{i=0}^{j-1}F(T_i-t(x_i,y_b)).

Όπου t(x_i,y_b) είναι το µέγεθος της χρονικής διάρκειας που απαιτείται για τις πρώτες b επαναλήψεις του υπολογισµού του y^{x_i}(modn) και F η συνάρτηση κατανοµής του T-t(x_i,y_b) για τις διάφορες τιµές του y και σωστά x_b. Έτσι µε τον παραπάνω τύπο και τη χρήση των µετρήσεων µας έχουµε την ευχέρεια να βελτιώσουµε την προσέγγιση της F.