computeras13 Δημοσ. 2 Μαρτίου 2012 Δημοσ. 2 Μαρτίου 2012 (επεξεργασμένο) Καλησπέρα, προσπαθώ να γράψω ένα κομμάτι κώδικα σε python το οποίο καλεί και επικοινωνεί με ένα εξωτερικό πρόγραμμα αρκετές φορές μέσω ενός loop. Μετά από κάποιον αριθμό όμως επαναλήψεων παίρνω το παρακάτω σφάλμα: Traceback (most recent call last): File "./code.py", line 132, in <module> main() File "./code.py", line 18, in main time() File "./code.py", line 61, in time c1,m1 = attack_time(c + step) File "./code.py", line 113, in attack_time process = subprocess.Popen([ORACLE], stdin=subprocess.PIPE, stdout=subprocess.PIPE); File "/usr/lib64/python2.6/subprocess.py", line 633, in __init__ errread, errwrite) File "/usr/lib64/python2.6/subprocess.py", line 1039, in _execute_child errpipe_read, errpipe_write = os.pipe() OSError: [Errno 24] Too many open files Ο κώδικας που τρέχει μέσα στο loop είναι ο παρακάτω: ># [Time attack] Given a cyphertext c pass it to the oracle and return the execution time and the message def attack_time(c): process = subprocess.Popen([ORACLE], stdin=subprocess.PIPE, stdout=subprocess.PIPE); process.stdin.write('{0}\n'.format(c)) cycles = int(process.stdout.readline().strip('\n')) m = process.stdout.readline().strip('\n') try: process.kill() except OSError: pass return cycles, m Λογικά η kill δεν θα έπρεπε να καλείται καθόλου (πιστεύω) μιας και μόλις επιστρέψει αυτές τις μεταβλητές η εξωτερική διεργασία τερματίζει. Πέραν αυτού έψαξα για το πρόβλημα και είδα οτι υπάρχει κάποιο bug που προκαλεί κάτι τέτοιες παρενέργειες στις εκδόσεις 2.* της python. Δυστυχώς όμως δεν έχω πρόσβαση σαν admin στο σύστημα (cent os) που τρέχει ο κώδικας για να μπορέσω να κάνω εγκατάσταση μια νεότερη έκδοση. Έχει κανείς καμία ιδέα πως μπορώ να απαλλαγώ από αυτό το πρόβλημα ή να μου πει αν κάνω κάτι εγώ λάθος (πρώτη μου επαφή με την γλώσσα και λογικά έχω κενά);! EDIT Άκυρο το βρήκα. Δεν έχει να κάνει καν με αυτό το κομμάτι του κώδικα. Υπήρχε ένας ατέρμον βρόγχος κάπου αλλού και γι' αυτό έβγαζε σφάλμα. ΥΓ: Δεν θα ξαναπιώ μπύρα όταν κάθομαι να γράψω κώδικα EDIT NEW Τελικά δεν ήταν (μόνο) εκεί το πρόβλημα. Συνεχίζει να υπάρχει το πρόβλημα όταν περνάει έναν αριθμό επαναλήψεων. Μιλάμε για αρκετά μεγάλο αριθμό όμως. Επεξ/σία 2 Μαρτίου 2012 από computeras13
prekageo Δημοσ. 2 Μαρτίου 2012 Δημοσ. 2 Μαρτίου 2012 Δοκίμασε να κλείνεις τα process.stdin, process.stdout, process.stderr όταν δε τα χρειάζεσαι. Υ.Γ. Αλήθεια, τι φτιάχνεις; time attack σε oracle;
computeras13 Δημοσ. 2 Μαρτίου 2012 Μέλος Δημοσ. 2 Μαρτίου 2012 Δοκίμαζω τώρα να το κλείσω (στο eclipse δεν μου έβγαζε καν σαν επιλογή το close οπότε δεν ήξερα αν υπήρχε... ). Ναι φτιάχνω στα πλαίσια μιας εργασίας κώδικα που να κάνει timing attack σε RSA (ένα κομμάτι της εργασίας). Μετά έχει και άλλα κομμάτια όπως επίθεση με power analysis σε AES 128 και error analysis attack σε RSA ξανά.
prekageo Δημοσ. 4 Μαρτίου 2012 Δημοσ. 4 Μαρτίου 2012 Πολύ ενδιαφέρον ακούγεται. Χρησιμοποιείς ως πρόγραμμα-στόχο τον Oracle client; Νομίζω πώς δεν είναι και η πιο ιδανική λύση (υπάρχουν πολλά overheads). Θα ξέρεις, φαντάζομαι, ότι οι επίσημες υλοποιήσεις των αλγορίθμων κρυπτογράφησης είναι προστατευμένες από side channel attacks με διάφορους τρόπους. Τέλος παντών, καλή συνέχεια στην εργασία σου!
computeras13 Δημοσ. 4 Μαρτίου 2012 Μέλος Δημοσ. 4 Μαρτίου 2012 Ναι είναι αρκετά ενδιαφέρον η αλήθεια είναι αλλά και παράξενο ταυτόχρονα Όχι δεν χρησιμοποιώ τον Oracle client. Σαν oracle ορίζεται ένα πρόγραμμα το οποίο μπορεί να εκτελεί decryption ή encryption ή οτιδήποτε άλλο μπορεί να χρειαστεί ένας επιτιθέμενος. Στις τρέχουσες περιπτώσεις οι oracles που έχω κάνουν decryption για RSA 128 (οι δύο από αυτές) και encryption για aes (ή τρίτη) προσφέροντας αντίστοιχα τα αναμενόμενα αποτελέσματα (cyphertext ή message) καθώς και επιπλέον πληροφορίες (πχ χρόνο εκτέλεσης ή ενεργειακό διάγραμμα στον χρόνο) για να μπορέσει να προσωμοιωθεί επίθεση σε ένα συγκεκριμένο περιβάλλον. Όσο για τις προστασείες που αναφέρεις ναι το ξέρουν οτι υπάρχουν στα πραγματικά συστήματα αλλά πάντα υπαρχουν και κάποιες τρύπες (πχ στο ssl μπορούσες (λογικά πλέον έχουν κλήσει την τρύπα) να κάνεις time analysis attack).
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα