De ce lista de excluderi nu este stocată ca hash
Construirea unui site înseamnă să îl deschideți de douăzeci de ori pe zi. La un contor cu patruzeci de vizitatori pe lună, jumătate din statistici sunt autorul însuși. De aceea există o setare: nu număra vizitele de la propria mea adresă.
În tot restul acestui serviciu, adresele sunt transformate în hash cu o sare secretă și o dată, iar adresa în sine nu ajunge niciodată să fie stocată. În acest singur loc, ea este stocată exact așa cum a fost introdusă, în clar. Este o decizie intenționată și merită spusă deschis, în loc să fie lăsată să fie descoperită.
Varianta încercată prima dată
Prima implementare stoca o sumă de control a adresei, în acord cu tot restul. Funcționa, stoca mai puțin și era aproape inutilă: majoritatea conexiunilor casnice primesc o adresă nouă în fiecare zi. Excluderea era corectă în momentul setării și fără valoare în dimineața următoare.
Ceea ce supraviețuiește unei schimbări zilnice este un interval — de obicei blocul /24 sau /16 al furnizorului, care rămâne același în timp ce ultima parte se schimbă. Iar un interval nu poate fi comparat sub formă de sumă de control. Hash-ul distruge intenționat ordinea, iar „se află această adresă în acest interval” este o întrebare despre ordine. Nu există o cale ingenioasă de ocolire; cele două cerințe merg în direcții opuse.
Așa că intervalul este stocat așa cum a fost introdus, normalizat, împreună cu cele două limite ale sale, de câte șaisprezece octeți fiecare, iar un singur BETWEEN decide. IPv4 este scris în forma sa IPv6, astfel încât ambele familii să aibă aceeași lățime și o singură comparație să le acopere pe amândouă.
De ce acest compromis este acceptabil aici
Ceea ce se stochează este rețeaua proprie a operatorului site-ului, introdusă de el, afișată lui și care poate fi ștearsă de el oricând. Nu este adresa unui vizitator. Politica de confidențialitate spune același lucru cu aceleași cuvinte, pentru că alternativa — a descrie serviciul ca stocând totul sub formă de hash și a face discret o excepție pentru acest caz — ar fi genul de afirmație adevărată doar în linii mari, care valorează mai puțin decât lipsa oricărei afirmații.
Limita este de zece intrări per contor: suficiente pentru acasă, birou și mobil, destul de puține încât lista să nu poată deveni un depozit de adrese de uz general.
Al doilea tip, pentru ceea ce se mută
Unele tipuri de trafic au o identitate stabilă și o adresă instabilă: un monitor de disponibilitate, un serviciu care generează previzualizări de linkuri pentru un program de chat, un serviciu de verificare. Pe acestea nu le prinde niciun interval.
Pentru ele, excluderea se potrivește în schimb cu un fragment din identificarea browserului. Introducând uptimerobot se prinde întregul șir pe care îl trimite. Minimul este de patru caractere, pentru că un fragment de două litere ar apărea în aproape orice șir de identificare și ar dezactiva complet contorul.
Ideea generală
Un design orientat spre confidențialitate este un set de compromisuri, iar părțile interesante sunt cele în care o regulă a trebuit să cedeze. Regulile care nu cedează niciodată înseamnă de obicei că nimeni nu le-a testat încă în fața unei cerințe reale.
Ce trebuie evitat este ca o regulă să cedeze pe tăcute. Un câmp prezentat ca hash care de fapt nu este hash, descris în documentație ca și cum ar fi, este mai rău decât un câmp simplu descris simplu — consumă o încredere pe care nu a câștigat-o și va fi descoperit până la urmă de cineva care nu se aștepta să fie nevoit să verifice.