Γιατί η λίστα εξαιρέσεων δεν αποθηκεύεται ως hash
Όποιος φτιάχνει έναν ιστότοπο τον ανοίγει είκοσι φορές την ημέρα. Σε έναν μετρητή με σαράντα επισκέπτες τον μήνα, τα μισά στατιστικά είναι ο ίδιος ο δημιουργός. Γι’ αυτό υπάρχει μια ρύθμιση: να μη μετρώνται οι επισκέψεις από τη δική μου διεύθυνση.
Παντού αλλού σε αυτή την υπηρεσία, οι διευθύνσεις μετατρέπονται σε hash με ένα μυστικό salt και την ημερομηνία, και η ίδια η διεύθυνση δεν φτάνει ποτέ στην αποθήκευση. Σε αυτό το ένα σημείο αποθηκεύεται ακριβώς όπως καταχωρίστηκε, σε απλό κείμενο. Πρόκειται για συνειδητή απόφαση και αξίζει να ειπωθεί ανοιχτά, αντί να αφεθεί να την ανακαλύψει κάποιος.
Η εκδοχή που δοκιμάστηκε πρώτα
Η πρώτη υλοποίηση αποθήκευε ένα άθροισμα ελέγχου της διεύθυνσης, σε συμφωνία με όλα τα υπόλοιπα. Λειτουργούσε, αποθήκευε λιγότερα και ήταν σχεδόν άχρηστη: οι περισσότερες οικιακές συνδέσεις παίρνουν νέα διεύθυνση κάθε μέρα. Η εξαίρεση ήταν σωστή τη στιγμή που οριζόταν και άχρηστη το επόμενο πρωί.
Αυτό που αντέχει σε μια καθημερινή αλλαγή είναι ένα εύρος διευθύνσεων — συνήθως το /24 ή το /16 του παρόχου, που μένει ίδιο ενώ το τελευταίο τμήμα αλλάζει. Και ένα εύρος δεν μπορεί να συγκριθεί ως άθροισμα ελέγχου. Το hashing καταστρέφει σκόπιμα τη σειρά, και το «βρίσκεται αυτή η διεύθυνση μέσα σε αυτό το εύρος;» είναι ερώτημα σειράς. Δεν υπάρχει κάποιος έξυπνος τρόπος να παρακαμφθεί αυτό· οι δύο απαιτήσεις δείχνουν σε αντίθετες κατευθύνσεις.
Έτσι το εύρος αποθηκεύεται όπως καταχωρίστηκε, κανονικοποιημένο, μαζί με τα δύο όριά του, δεκαέξι byte το καθένα, και ένα μόνο BETWEEN αρκεί για την απόφαση. Οι διευθύνσεις IPv4 γράφονται στη μορφή IPv6, ώστε και οι δύο οικογένειες να έχουν το ίδιο πλάτος και μία σύγκριση να καλύπτει και τις δύο.
Γιατί αυτός ο συμβιβασμός είναι αποδεκτός εδώ
Αυτό που αποθηκεύεται είναι το δίκτυο του ίδιου του διαχειριστή του ιστότοπου: το πληκτρολογεί ο ίδιος, εμφανίζεται μόνο σε αυτόν και μπορεί να το διαγράψει οποιαδήποτε στιγμή. Δεν είναι η διεύθυνση κάποιου επισκέπτη. Η πολιτική απορρήτου λέει το ίδιο με τα ίδια λόγια, γιατί η εναλλακτική — να περιγράφεται η υπηρεσία ως κάτι που τα μετατρέπει όλα σε hash και να εξαιρείται σιωπηλά αυτό το σημείο — θα ήταν ένας ισχυρισμός αληθής μόνο σε γενικές γραμμές, που αξίζει λιγότερο από το να μην υπάρχει καθόλου ισχυρισμός.
Το όριο είναι δέκα καταχωρίσεις ανά μετρητή: αρκετές για το σπίτι, το γραφείο και το κινητό, και αρκετά λίγες ώστε η λίστα να μην μπορεί να γίνει αποθήκη διευθύνσεων γενικής χρήσης.
Το δεύτερο είδος, για ό,τι μετακινείται
Κάποια κίνηση έχει σταθερή ταυτότητα και ασταθή διεύθυνση: ένα εργαλείο παρακολούθησης διαθεσιμότητας, ένας μηχανισμός προεπισκόπησης συνδέσμων ενός προγράμματος συνομιλίας, μια υπηρεσία ελέγχου. Κανένα εύρος δεν τα πιάνει αυτά.
Γι’ αυτά η εξαίρεση συγκρίνεται αντίθετα με ένα τμήμα της αναγνώρισης του προγράμματος περιήγησης. Η καταχώριση uptimerobot πιάνει ολόκληρη τη συμβολοσειρά που στέλνει. Το ελάχιστο είναι τέσσερις χαρακτήρες, επειδή ένα τμήμα δύο γραμμάτων θα εμφανιζόταν σχεδόν σε κάθε συμβολοσειρά αναγνώρισης και θα απενεργοποιούσε εντελώς τον μετρητή.
Το γενικό συμπέρασμα
Ο σχεδιασμός για την ιδιωτικότητα είναι ένα σύνολο συμβιβασμών, και τα ενδιαφέροντα σημεία είναι εκεί όπου ένας κανόνας χρειάστηκε να λυγίσει. Κανόνες που δεν λυγίζουν ποτέ συνήθως σημαίνουν ότι κανείς δεν τους έχει δοκιμάσει ακόμη απέναντι σε μια πραγματική απαίτηση.
Αυτό που πρέπει να αποφεύγεται είναι να λυγίζει ένας κανόνας σιωπηλά. Ένα πεδίο σε hash που στην πραγματικότητα δεν είναι hash, και περιγράφεται στην τεκμηρίωση σαν να ήταν, είναι χειρότερο από ένα απλό πεδίο που περιγράφεται απλά — ξοδεύει εμπιστοσύνη που δεν έχει κερδίσει, και κάποια στιγμή θα το ανακαλύψει κάποιος που δεν περίμενε ότι θα χρειαστεί να το ελέγξει.