Μόλις χθες βγήκαν οι υποψήφιες εκδόσεις της Python 2.6.8, 2.7.3, 3.1.5, και 3.2.3. Ο κύριος λόγος για αυτές τις εκδόσεις είναι ένα θέμα ασφάλεια στους τύπους που βαζίσονται σε hash (κατακερματισμό) όπως τα λεξικά και τα σύνολα.
Μέχρι τώρα, μπορούσε κάποιος να σχεδιάσει ειδικά μια είσοδο σε ένα πρόγραμμα ώστε η δημιουργία ενός λεξικού ή συνόλου να παίρνει παραπάνω χρόνο από το ιδεατό. Υπό κανονικές συνθήκες, αυτά μπορούν να δημιουργηθούν σε γραμμικό χρόνο ως προς το μέγεθος της εισόδου. Ο επιτιθέμενος μπορούσε όμως να δημιουργήσει στιγμιότυπα εισόδου που ο χρόνος που απαιτείται είναι τετραγωνικός ως προς το μέγεθος της εισόδου.
Για να καταλάβουμε αυτή τη διαφορά, ας σκεφτούμε το εξής. Αν 10 στοιχεία παίρνουν τρέχοντας σε γραμμικό χρόνο 10 δευτερόλεπτα για να κατασκευαστεί ο αντίστοιχος τύπος, τότε σε τετραγωνικό παίρνουν 100 δευτερόλεπτα. Αν ήταν 100 στοιχεία, τότε για γραμμικό χρόνο μιλάμε για τάξη 100 δευτερολέπτων ενώ για τετραγωνικό περίπου 2 ώρες.
Για να λυθεί αυτό το πρόβλημα, το hash πια γίνεται με τυχαίο τρόπο. Έτσι, κάποιος δε μπορεί (τουλάχιστον εύκολα) να δημιουργήθει παθογενή στιγμιότυπα εισόδου. Επειδή όμως μέχρι τώρα μπορεί να υπήρχαν προγράμματα που μπορεί να βασίζονται σε συγκεκριμένη σειρά στοιχείων μέσα στο σύνολο, αυτό δεν είναι ενεργοποιημένο από προεπιλογή.
Το να βασίζεται ένα πρόγραμμα στη σειρά των στοιχείων που έχει ένα σύνολο ή ένα λεξικό είναι λάθος. Δεν υπάρχει καμία εγγύηση για αυτή και το πρόγραμμα θα πρέπει να διορθωθεί. Επειδή όμως οι συγκεκριμένες εκδόσεις αποτελούν ενημέρωση ασφάλειας, πάρθηκε η απόφαση να μην αλλάξει κάτι που θα μπορούσε να κάνει προγράμμα να μη δουλεύουν, ακόμα και αν αυτά είναι ήδη γραμμένα λάθος.
Για να ενεργοποιήση κάποιος την τυχαιοποίηση στο hashing, στις καινούργιες εκδόσεις της Python, υπάρχουν δυο τρόποι:
Η χρήση της σημαίας (flag) -R στο εκτελέσιμο της python ή οτ να θέσει κάποιος τη μεταβλητή περιβάλλοντος PYTHONHASHSEED σε "random".