![]() |
Το λήμμα παραθέτει τις πηγές του αόριστα, χωρίς παραπομπές. |
![]() |
Αυτό το λήμμα χρειάζεται επιμέλεια ώστε να ανταποκρίνεται σε υψηλότερες προδιαγραφές ορθογραφικής και συντακτικής ποιότητας ή μορφοποίησης. Αίτιο: σύνταξη, ξένα ονόματα Για περαιτέρω βοήθεια, δείτε τα λήμματα πώς να επεξεργαστείτε μια σελίδα και τον οδηγό μορφοποίησης λημμάτων. |
Ο Blowfish προτάθηκε από τον Bruce Schneier στο εργαστήριο ασφαλείας του Κέιμπριτζ το 1993 και είχε ως στόχο να ξεκινήσει την προσπάθεια για τη δημιουργία ενός καλού κρυπτογραφικού συστήματος το οποίο θα άντεχε στους υπολογιστές του 21ου αιώνα, καθώς οι αλγόριθμοι εκείνης της περιόδου είδη είχαν αρχίσει να γίνονται ευάλωτοι σε επιθέσεις. Είναι ένας αλγόριθμος κρυπτογράφησης τμήματος τύπου Feistel στον οποίο χρησιμοποιείται μια συνάρτηση κρυπτογραφίας σε δεκαέξι επαναλήψεις. Σε κάθε επανάληψη κρυπτογραφούνται 64 bits. Το μήκος του κλειδιού μπορεί να έχει μήκος μέχρι και 448 bits. Παρόλα αυτά υπάρχει μια περίπλοκη διαδικασία η οποία πρέπει να γίνει πριν από κάθε κρυπτογράφηση. Ο blowfish είναι ένας αλγόριθμος που χρησιμοποιείται μόνο όταν το κλειδί δεν πρέπει να αλλάζει συχνά (το κλειδί σε ένα πραγματικά ασφαλές σύστημα κρυπτογραφίας πρέπει να αλλάζει ανάλογα με την πολιτική ασφαλείας).
Ο αλγόριθμος είναι αποδοτικός όταν κρυπτογραφεί αρχεία.
Γεννήτρια τυχαίων αριθμών. Ο αλγόριθμος πρέπει να μπορεί να δημιουργεί μοναδικά τυχαία bits.
Κρυπτογράφηση πακέτων. Ο αλγόριθμος είναι αποδοτικός στην κρυπτογράφηση δεδομένων σε μέγεθος πακέτων. Επίσης θα πρέπει να μπορεί να υλοποίηση κρυπτογράφηση και αποκρυπτογράφηση συνεχόμενων πακέτων με διαφορετικό κλειδί.
Κατακερματισμός. Ο αλγόριθμος λειτουργεί και ως μίας φοράς (one way) συνάρτηση κατακερματισμού (hash function).
Κάθε αλγόριθμος κρυπτογράφησης θα πρέπει να λειτουργεί αποτελεσματικά, ανεξάρτητα σε τι συσκευή υλοποιείται.
Ειδικό hardware. Ο αλγόριθμος θα πρέπει να είναι αποτελεσματικός σε ειδικά επεξεργασμένα VLSI hardware.
Ο αλγόριθμος θα πρέπει να είναι απλός στην υλοποίηση του για να αποφευχθούν λάθη που θα τον καταστρέψουν από την δημιουργία του. Δεν πρέπει να έχει αδύναμα κλειδιά, πρέπει να έχει εύκολη διακύμανση για διαφορετικά επίπεδα δυσκολίας. Τέλοςλ όλες οι διαχειρίσεις των δεδομένων θα πρέπει να γίνεται σε τμήματα (blocks).
S-boxes. Τα S-boxes έχουν μεγαλύτερη αντοχή σε μια διαφορική κρυπτοανάλυση, ένας αλγόριθμος με 32 bit μήκος, μπορεί να κάνει χρήση ενός 32 bit S-boxes. Ακόμη για μεγαλύτερη ασφάλεια μπορούν να χρησιμοποιηθούν S-boxes εξαρτημένα από το κλειδί καθώς αυτά έχουν μεγαλύτερες αντοχές σε διαφορικές και γραμμικές αναλύσεις.
Ο blowfish είναι ένας αλγόριθμος κρυπτογραφησης τμήματος (block cipher) που κρυπτογραφεί τμήματα μήκους 64 bit. Αποτελείται από δύο μέρη: το πρώτο είναι η επέκταση του κλειδιού (γίνεται η παραγωγή των session keys) στο το δεύτερο το σχήμα Feistel, όπου γίνεται η κρυπτογράφηση (σε κάθε επανάληψη γίνεται η χρηση ενός session key). Η επέκταση του κλειδιού (expansion key algorithm) μετατρέπει το κλειδί σε υποκλειδιά συνολικού μεγέθους 4168 bytes. Η κρυπτογράφηση ενός κειμένου γίνεται μέσα από ένα σύστημα Feistel το οποίο τρέχει για 16 επαναλήψεις. Κάθε γύρος αποτελείται από ένα κλειδί όπου είναι εξαρτημένο από μια μετάθεση του επιτεταμένου κλειδιού και από ένα πακέτο δεδομένων για κρυπτογράφηση.
Όλες οι πράξεις είναι τύπου XOR και προσθέσεις σε 32 bit λέξεων. Οι μοναδικές επιπρόσθετες πράξεις είναι τέσσερις πίνακες όπου κρατάνε δεδομένα και αλλάζουν σε κάθε επενάληψη.
Ο blowfish επειδή χρειάζεται πολλά υποκλειδιά (όσες είναι οι επαναλήψεις) θα πρέπει όλα να υπολογιστούν πριν ξεκινήσει μια κρυπτογράφηση ή αποκρυπτογράφηση.
P1,P2,…,P18
S1,0,S1,1,…,S1,255
S2,0,S2,1,…,S2,255
S3,0,S3,1,…,S3,255
S4,0,S4,1,…,S4,255
Συνολικά χρειάζονται 521 επαναλήψεις για να δημιουργηθούν όλα τα κλειδιά.
ΕΙΣΟΔΟΣ: 64 bit δεδομένων x Χώρισε το x στην μέση δηλαδή σε XL και XR Για i=1 μέχρι 16 επανέλαβε: XL = XL XOR Pi XR = F(XL) XOR XR Αντιμετάθεσε XL και XR Αντιμετάθεσε XL και XR (ακυρώνει την τελευταία αντιμετάθεση) XR = XR XOR P17 XL = XL XOR P18 Ξαναένωσε τα XL και XR
Η συνάρτηση F χωρίζει το XL, όπου δέχεται σαν είσοδο σε τέσσερα τμήματα των οχτώ-bit τα a,b,c,d. Δηλαδή γίνεται αυτή η ακόλουθη πράξη: F(XL)=(S(1,a)+S(2,b) mod 232 XOR S(3,c))+ S(4,d) mod 232
Η αποκρυπτογράφηση είναι η ίδια ακριβώς με την διαφορά πως τα χρησιμοποιούνται με την αντίστροφη σειρά.
Οι mini blowfish χρησιμοποιούνται για εκπαιδευτικούς σκοπούς και για κρυπτοάναλυση. Η διαδικασία υλοποίησης είναι ίδια με την διάφορα στις τιμές Ο blowfish-32 έχει 32 bit μεγέθους μπλοκ και υποκλειδιά μεγέθους 16 bit κάθε S-box έχει 16 bit εισόδους. Ο blowfish-16 έχει 16 bit μεγέθους μπλοκ και υποκλειδιά μεγέθους 8 bit κάθε S-box έχει 4 bit εισόδους.
Ακολουθούν πληροφορίες σχετικά με τις αποφάσεις όπου πάρθηκαν για σχεδίαση