Η υπογραφή του γιατρού με παραξένεψε και άρχισα να ψάχνω πριν καμιά ώρα τον εν λόγω αλγόριθμο. Ωστόσο αυτό που μου φάνηκε περίεργο δεν είναι το προφανές: τίποτα => 128bit αλλά το γιατί αυτό το γεγονός είναι περίεργο.drcypher έγραψε:md5('') == d41d8cd98f00b204e9800998ecf8427e
Κατέληξα στον τίτλο του εν λόγω post ο οποίος είναι quote από το επίσημο rfc του md5 και (για φαντάσου!) ταυτόσημος της υπογραφής.
Οι hash αλγόριθμοι έχουν έναν και μόνο έναν σκοπό, να καταστήσουν ένα αλφαριθμητικό μη ανακτήσιμο. O αλγόριθμος md5 συγκεκριμένα το επιτυγχάνει αυτό ακολουθώντας κάποιες αυστηρά καθορισμένες αρχές, με βασικότερη όλων το γεγονός ότι στην έξοδο επιστρέφει αλφαριθμητικό σταθερού μήκους 128bit οποιαδήποτε και αν είναι η είσοδος.
Ο αλγόριθμος md5 επιτυγχάνει τα μέγιστα όταν στην είσοδο δώσουμε αλφαριθμητικό μήκους Ν >128bit αφού τότε επιβεβαιώνουμε την πιθανότητα ύπαρξης collision, δλδ την ύπαρξη ενός άλλου αλφαριθμητικού για το οποίο ο αλγόριθμος παράγει την ίδια έξοδο, οπότε και οι πιθανότητες να ανακτηθεί το δικό μας αλφαριθμητικό μικραίνουν.
Υπεραπλουστευμένα, το αλφαριθμητικό εισόδου (A) δεν λειτουργεί ως πηγή αντιθέτως χρησιμοποιείται για να μεταβάλλει την προκαθορισμένη πηγή (S), ένα αρχικό αλφαριθμητικό μήκους 128bit. To S χωρίζεται σε 4 ίσα κομμάτια των 32bit το κάθε ένα από τα οποία μεταβάλλεται (shift) κατά διακριτό αριθμό bits ανάλογα με την τιμή του επόμενου χαρακτήρα του A. Οι μετασχηματισμοί είναι mod 64.
ΥΓ: 32 χαρακτήρες => 128bit ? Να επισημάνω ότι σε κάθε κοινό character set κάθε χαρακτήρας αντιστοιχεί σε 2bit μνήμης, ωστόσο όλοι οι αλγόριθμοι αλφαριθμητικών μετασχηματισμών χρησιμοποιούν το καθολικό Unicode-8 (utf-8 ) στο οποίο κάθε χαρακτήρας αντιστοιχεί σε 4bit.