Blowfish

Περιοχές εφαρμογής

Ο αλγόριθμος είναι αποδοτικός όταν κρυπτογραφεί αρχεία.
Γεννήτρια τυχαίων αριθμών. Ο αλγόριθμος πρέπει να μπορεί να δημιουργεί μοναδικά τυχαία bits.
Κρυπτογράφηση πακέτων. Ο αλγόριθμος είναι αποδοτικός στην κρυπτογράφηση δεδομένων σε μέγεθος πακέτων. Επίσης θα πρέπει να μπορεί να υλοποίηση κρυπτογράφηση και αποκρυπτογράφηση συνεχόμενων πακέτων με διαφορετικό κλειδί.
Κατακερματισμός. Ο αλγόριθμος λειτουργεί και ως μίας φοράς (one way) συνάρτηση κατακερματισμού (hash function).

Συσκευές

Κάθε αλγόριθμος κρυπτογράφησης θα πρέπει να λειτουργεί αποτελεσματικά, ανεξάρτητα σε τι συσκευή υλοποιείται.
Ειδικό hardware. Ο αλγόριθμος θα πρέπει να είναι αποτελεσματικός σε ειδικά επεξεργασμένα VLSI hardware.

Περισσότερες απαιτήσεις

Ο αλγόριθμος θα πρέπει να είναι απλός στην υλοποίηση του για να αποφευχθούν λάθη που θα τον καταστρέψουν από την δημιουργία του. Δεν πρέπει να έχει αδύναμα κλειδιά, πρέπει να έχει εύκολη διακύμανση για διαφορετικά επίπεδα δυσκολίας. Τέλοςλ όλες οι διαχειρίσεις των δεδομένων θα πρέπει να γίνεται σε τμήματα (blocks).

Κατασκευασμένα τμήματα δεδομένων

S-boxes. Τα  S-boxes έχουν μεγαλύτερη αντοχή σε μια διαφορική κρυπτοανάλυση, ένας αλγόριθμος με 32 bit μήκος, μπορεί να κάνει χρήση ενός 32 bit S-boxes. Ακόμη για μεγαλύτερη ασφάλεια μπορούν να χρησιμοποιηθούν S-boxes εξαρτημένα από το κλειδί καθώς αυτά έχουν μεγαλύτερες αντοχές σε διαφορικές και γραμμικές αναλύσεις.

Περιγραφή κώδικα blowfish

O blowfish είναι ένας αλγόριθμος κρυπτογραφησης τμήματος (block cipher) που κρυπτογραφεί τμήματα μήκους 64 bit. Αποτελείται από δύο μέρη: 
το πρώτο είναι η επέκταση του κλειδιού (γίνεται η παραγωγή των session keys) στο το δεύτερο το σχήμα Feistel, όπου γίνεται η κρυπτογράφηση (σε κάθε επανάληψη γίνεται η χρηση ενός session key). Η επέκταση του κλειδιού (expansion key algorithm) μετατρέπει το κλειδί σε υποκλειδιά συνολικού μεγέθους 4168 bytes. Η κρυπτογράφηση ενός κειμένου γίνεται μέσα από ένα σύστημα Feistel το οποίο τρέχει για 16 επαναλήψεις. Κάθε γύρος αποτελείται από ένα κλειδί όπου είναι εξαρτημένο από μια μετάθεση του επιτεταμένου κλειδιού και από ένα πακέτο δεδομένων για κρυπτογράφηση. 
Όλες οι πράξεις είναι τύπου XOR και προσθέσεις σε 32 bit λέξεων. Οι μοναδικές επιπρόσθετες πράξεις είναι τέσσερις πίνακες όπου κρατάνε δεδομένα και αλλάζουν σε κάθε επενάληψη.

Ψευδοκώδικας

ΕΙΣΟΔΟΣ: 64 bit δεδομένων x
Χώρισε το x στην μέση δηλαδή σε XL και XR 
Για i=1 μέχρι 16 επανέλαβε:
XL = XL XOR Pᵢ 
XR = F(XL) XOR XR
Αντιμετάθεσε XL και XR
Αντιμετάθεσε XL και XR (ακυρώνει την τελευταία αντιμετάθεση)
XR = XR XOR P₁₇XL = XL XOR P₁₈
Ξαναένωσε τα XL και XR

Συνάρτηση F

Η συνάρτηση F χωρίζει το XL, όπου δέχεται σαν είσοδο σε τέσσερα τμήματα των οχτώ-bit τα a,b,c,d. Δηλαδή γίνεται αυτή η ακόλουθη πράξη:
F(XL)=(S(1,a)+S(2,b) mod 2³² XOR S(3,c))+ S(4,d) mod 2³²
Η αποκρυπτογράφηση είναι η ίδια ακριβώς με την διαφορά πως τα  χρησιμοποιούνται με την αντίστροφη σειρά.

Mini blowfish

Οι mini blowfish χρησιμοποιούνται για εκπαιδευτικούς σκοπούς και για κρυπτοάναλυση. Η διαδικασία υλοποίησης είναι ίδια με την διάφορα στις τιμές
Ο blowfish-32 έχει 32 bit μεγέθους μπλοκ και υποκλειδιά μεγέθους 16 bit κάθε S-box έχει 16 bit εισόδους. 
Ο blowfish-16 έχει 16 bit μεγέθους μπλοκ και υποκλειδιά μεγέθους 8 bit κάθε S-box έχει 4 bit εισόδους.