Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα,

 

προσπαθώ να γράψω ένα κομμάτι κώδικα σε 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

 

Άκυρο το βρήκα. Δεν έχει να κάνει καν με αυτό το κομμάτι του κώδικα. Υπήρχε ένας ατέρμον βρόγχος κάπου αλλού και γι' αυτό έβγαζε σφάλμα.

 

 

ΥΓ: Δεν θα ξαναπιώ μπύρα όταν κάθομαι να γράψω κώδικα :P

 

EDIT NEW

 

Τελικά δεν ήταν (μόνο) εκεί το πρόβλημα. Συνεχίζει να υπάρχει το πρόβλημα όταν περνάει έναν αριθμό επαναλήψεων. Μιλάμε για αρκετά μεγάλο αριθμό όμως.

Επεξ/σία από computeras13
Δημοσ.

Δοκίμασε να κλείνεις τα process.stdin, process.stdout, process.stderr όταν δε τα χρειάζεσαι.

 

Υ.Γ. Αλήθεια, τι φτιάχνεις; time attack σε oracle;

Δημοσ.

Δοκίμαζω τώρα να το κλείσω (στο eclipse δεν μου έβγαζε καν σαν επιλογή το close οπότε δεν ήξερα αν υπήρχε... :unsure: ).

 

Ναι φτιάχνω στα πλαίσια μιας εργασίας κώδικα που να κάνει timing attack σε RSA (ένα κομμάτι της εργασίας). Μετά έχει και άλλα κομμάτια όπως επίθεση με power analysis σε AES 128 και error analysis attack σε RSA ξανά.

Δημοσ.

Πολύ ενδιαφέρον ακούγεται. Χρησιμοποιείς ως πρόγραμμα-στόχο τον Oracle client; Νομίζω πώς δεν είναι και η πιο ιδανική λύση (υπάρχουν πολλά overheads). Θα ξέρεις, φαντάζομαι, ότι οι επίσημες υλοποιήσεις των αλγορίθμων κρυπτογράφησης είναι προστατευμένες από side channel attacks με διάφορους τρόπους.

 

Τέλος παντών, καλή συνέχεια στην εργασία σου!

Δημοσ.

Ναι είναι αρκετά ενδιαφέρον η αλήθεια είναι αλλά και παράξενο ταυτόχρονα :)

 

Όχι δεν χρησιμοποιώ τον Oracle client. Σαν oracle ορίζεται ένα πρόγραμμα το οποίο μπορεί να εκτελεί decryption ή encryption ή οτιδήποτε άλλο μπορεί να χρειαστεί ένας επιτιθέμενος. Στις τρέχουσες περιπτώσεις οι oracles που έχω κάνουν decryption για RSA 128 (οι δύο από αυτές) και encryption για aes (ή τρίτη) προσφέροντας αντίστοιχα τα αναμενόμενα αποτελέσματα (cyphertext ή message) καθώς και επιπλέον πληροφορίες (πχ χρόνο εκτέλεσης ή ενεργειακό διάγραμμα στον χρόνο) για να μπορέσει να προσωμοιωθεί επίθεση σε ένα συγκεκριμένο περιβάλλον.

 

Όσο για τις προστασείες που αναφέρεις ναι το ξέρουν οτι υπάρχουν στα πραγματικά συστήματα αλλά πάντα υπαρχουν και κάποιες τρύπες (πχ στο ssl μπορούσες (λογικά πλέον έχουν κλήσει την τρύπα) να κάνεις time analysis attack).

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

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

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

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...