redlabel wrote:Παίδες, σε λίγο θα μας πουν ..."κατεστραμμένους" με την ασφάλεια, με αυτά που γράφουμε...
Δ. Γκρ.
Τώρα θα μας πουν σίγουρα:
AmmarkoV wrote:
Σκέψου να κλειδώσεις πχ τον Blowfish με RSA
Σκέψου να περάσεις Blowfish σε 4-15 στρώσεις με διαφορετικά κλειδιά σε κάθε μια ..
Πρέπει να λάβεις υπόψη σου ότι πολλαπλές "στρώσεις" αλγορίθμων πολλές φορές μειώνουν σημαντικά την ασφάλεια του αλγορίθμου. Χαρακτηριστική επίθεση meet-in-the-middle στο double DES.
http://en.wikipedia.org/wiki/Meet-in-the-middle_attack
Επίσης ορισμένες στατιστικές επιθέσεις γίνονται πολύ πιο αποτελεσματικές.
Θα μπορούσες όμως να κάνεις ένα πέρασμα πχ. με AES και ένα με Blowfish. Με αυτό τον τρόπο ακόμα και ένας από τους 2 αλγόριθμους να κρυπταναλυθεί, τα δεδομένα σου θα είναι ασφαλή.
AmmarkoV wrote:
Όσο για το ότι custom λύσεις είναι χειρότερες , επέτρεψε μου να διαφωνήσω ( πολύ ) τα custom πρωτόκολλα είναι το πιο ασφαλές πράμα , σκέψου απλά τα ασύρματα δίκτυα WEP , WPA κτλ.. Τα δημοφιλή πρωτοκολλά έχουν τόσο μεγάλο community που προσπαθεί να τα σπάσει που σχεδόν ακυρώνει την ύπαρξη τους , αντίστοιχα αν εγώ κατέβαινα και στην def-con με ένα δικό μου Wireless πρωτόκολλο για να παίζω Counterstrike τοπικά με άλλα παιδιά με laptop δεν υπάρχει περίπτωση να το σπάσει κανείς..
Είναι απλά πάαααααρα πολυ δύσκολο να φανταστείς τι σκ@τ@ μπορεί να έχει σκεφτεί ο άλλος σαν encryption scheme..
Σκέψου ότι θα μπορούσα πχ να στέλνω σκουπίδια και εσυ να προσπαθείς να βρείς κλειδιά.. Αν δεν έχεις κάπου τον κώδικα δημοσιευμένο αποκλείεται εγγυημένα να βγάλει κάποιος άκρη!
Από άποψη πολυπλοκότητας διαισθητικά είναι σαν όχι απλά να ψάχνεις για κλειδιά (άρα 2^X οπού X τα Bits του κλειδιού ) αλλά να ψάχνεις για αλγόριθμο ΚΑΙ για κλειδιά μαζί και αν τα πάρεις όλα στην τύχη και ο αλγόριθμος είναι 100 γραμμές με 20 πιθανές εντολές ανά γραμμή άρα 2^X * 20 ^ 100 ( you get the picture )
Ακριβώς την ίδια γνώμη είχα και εγώ στο παρελθόν. Θεωρούσα μάλιστα ένα πρόγραμμα κρυπτογράφησης που είχα φτιάξει αδύνατο να σπάσει διότι χρησιμοποιούσα δικό μου αλγόριθμο και χωρίς τον αλγόριθμο και το κλειδί δεν θα ήταν δυνατόν να το αποκρυπτογραφήσει κανείς.
Όταν ασχολήθηκα λίγο με κρυπτογραφία κατάλαβα ότι αυτό που είχα φτιάξει (simple substitution cipher) μπορούσε να κρυπταναλυθεί με απλή στατιστική ανάλυση. Το μόνο που χρειαζόταν κάποιος να μαντέψει ήταν η γλώσσα στην οποία ήταν γραμμένο (φυσική γλώσσα) ώστε να υπολογίσει την συχνότητα των γραμμάτων του αλφαβήτου.
Κατάφερα λοιπόν και έσπασα σε δευτερόλεπτα κείμενα που είχα κρυπτογραφήσει με το προγραμματάκι μου, που κάποτε θεωρούσα uncrackable.
Ακόμα και πιο ισχυρό αλγόριθμο να χρησιμοποιούσα το μόνο που θα χρειάζονταν κάποιος ήταν να πάρει μια κόπια από το πρόγραμματάκι μου και να κάνει reverse engineer το αλγόριθμο. Όταν αναλύουμε ένα κρυπτοσύστημα λαμβάνουμε πάντα υπ' όψιν το worst case scenario:
1) Ο επιτηθέμενος έχει στην διάθεση του μεγάλο μέγεθος κρυπτοκειμένου.
2) Γνωρίζει αρκετά ζεύγη plaintext-ciphertext, δηλαδή για γνωστό input τι output θα πάρει από τον αλγόριθμο.
3) Ο επιτηθέμενος γνωρίζει το αλγόριθμο κρυπτογράφησης.
Αυτός είναι και ο λόγους που ισχυρό κρυπτοσύστημα θεωρούμε αυτό που η ασφάλεια που προσφέρει στηρίζεται αποκλειστικά και μόνο στο κλειδί κρυπτογράφησης.
Φυσικά, αν είσαι σε θέση να αναπτύξεις αλγόριθμο/προτόκολλο χωρίς καμία σχεδιαστική αδυναμία που η ασφάλεια του να στηρίζεται αποκλειστικά και μόνο στο κλειδί, τότε σίγουρα ναι, η ασφάλεια που θα σου προσφέρει θα είναι ανώτερη από έναν γνωστό αλγόριθμο, αφού πριν ακόμα σκεφτεί κάποιος να δοκιμάσει επιθέσεις στον κρυπτοστύστημα σου, θα πρέπει πρώτα να μπει στον κόπο να βρει τον αλγόριθμο.
Μερικά παραδείγματα κακών υλοποιήσεων/σχεδιασμού αλγορίθμων (από ανθρώπους που υποτίθεται ότι ήξεραν τι έκαναν):
Διαγωνισμός του NIST το 1999 για την ανάδειξη του αλγορίθμου που θα οριζόταν ως Advanced Encryption Standard. Από τους 15 υποψήφιους αλγόριθμους οι 4 κρυπταναλύθηκαν και φυσικά βγήκαν άμεσα εκτός διαγωνισμού σε διάστημα λίγων ημερών...
Το WEP που ανέφερες είναι ένα άριστο παράδειγμα ισχυρού αλγορίθμου που λόγω της πολύ κακής υλοποίησης του πλέον κρυπταναλύεται σε δευτερόλεπτα. Οι άνθρωποι που υλοποίησαν το WEP δεν κατανόησαν την σημασία του Initialization Vector (IV) σε έναν stream cipher (RC4). Έτσι χρησιμοποίησαν IVs μεγέθους 24 bits με αποτέλεσμα τα IVs να επαναλαμβάνονται συχνά. Αυτό άνοιξε τον δρόμο για τις γνωστές στατιστικές επιθέσεις... Αν η υλοποίηση ήταν σωστή το πιο πιθανόν ήταν ότι θα είχα ακόμα wep με 64 bit κλειδί στο wifi μου...
Όσο αφορά το WPA δεν γνωρίζω κάποια αδυναμία του μέχρι στιγμής. Μάλιστα τα πάει ιδιαίτερα καλά και ενάντια στις bruteforce επιθέσεις λόγω της πολυπλοκότητας των υπολογισμών που χρειάζονται για την δημιουργία του PMK.
Τα openssl κλειδιά στο Debian πριν λίγους μήνες. Οι αλγόριθμοι ήταν ισχυροί. Οι άγνοια του προγραμματιστή που έκανε την ασήμαντη αλλά ταυτόχρονα δραματική από άποψη ασφάλειας αλλαγή στον κώδικα του pseudo-random generator ήταν που δημιούργησε όλα τα προβλήματα.
Oyster infrastructure στο Λονδίνο. Δεν θυμάμαι το όνομα του κυρίου που μας είχε κάνει την παρουσίαση του φανταστικού και απόλυτα ασφαλούς proprietary κρυπτοσυστήματος που είχαν αναπτύξει, θυμάμαι την ειρωνεία του όμως στο σχόλιo μου ότι security by obscurity δεν βγαίνει ποτέ σε καλό και αν είναι τόσο σίγουροι για το σύστημα που έχουν αναπτύξει, να το δημοσιεύσουν. Θα ήθελα όμως να του έκανα την ίδια ερώτηση πριν 4 μήνες, όπου η αδυναμίες στο random number generator του mifare classic chip επιτρέπουν την κλωνοποίηση καρτών στο “αδιάβλητο” κατά τα άλλα σύστημα.
Ουσιαστικά θέλω να καταλήξω στο εξής: Πολλά κρυπτοσυστήματα έχουν "σπάσει" με ιδιαίτερη ευκολία λόγω της κακής υλοποίησης των αλγορίθμων καθώς και λαθών διαχείριση των κλειδιών και πολύ λιγότερα επειδή κρυπταναλύθηκε ο ίδιος ο αλγόριθμος. Δεν γνωρίζω κάποιο που να "έσπασε" λόγω του ότι είχε 128bit κλειδί αντί 448 bit ή μεγαλύτερο.
Τέλος το να κλειδώσεις τον blowfish με rsa μάλλον εισάγει δραματικό overhead (γενικά η ασύμμετρη κρυπτογράφηση είναι της τάξης 1000 φορές πιο αργή από την συμμετρική) και η προσφερόμενη ασφάλεια αμφισβητούμενη (εκτός και αν χρησιμοποιήσεις κλειδιά > 4096 bits οπότε και το performance hit είναι δραματικό.
Γιατί να μην χρησιμοποιήσεις μεγάλα ασύμμετρα κλειδιά με τα οποία θα κρυπτογραφείς το συμμετρικό κλειδί? Έτσι ούτε performance hit θα έχεις ενώ θα μπορείς να δημοσιεύσεις τα public keys άφοβα χωρίς να χρειάζεσαι ένα ακόμα ασφαλές κανάλι επικοινωνίας.
Και όχι, δεν παίρνω ναρκωτικά