Por qué la lista de exclusión no está cifrada con hash
Quien construye su sitio lo abre veinte veces al día. En un contador con cuarenta visitantes al mes, la mitad de las estadísticas eres tú. Por eso hay un ajuste: no cuentes las visitas desde mi propia dirección.
En todo lo demás de este servicio las direcciones se pasan por un hash con una sal secreta y la fecha, y la dirección en sí nunca llega al almacenamiento. En este único punto queda tal como la escribiste, en claro. Es una decisión deliberada y merece decirse en voz alta en lugar de dejarla para que se descubra.
La versión que se intentó primero
La primera implementación guardaba una suma de comprobación de la dirección, en coherencia con todo lo demás. Funcionaba, guardaba menos y era casi inútil: la mayoría de las conexiones domésticas reciben una dirección nueva cada día. La exclusión era correcta cuando la ponías y no valía nada a la mañana siguiente.
Lo que sobrevive a un cambio diario es un rango — normalmente el /24 o el /16 del proveedor, que sigue igual mientras la última parte rota. Y un rango no puede compararse como suma de comprobación. El hash destruye el orden a propósito, y «¿está esta dirección dentro de este rango?» es una pregunta sobre el orden. No hay atajo ingenioso; los dos requisitos apuntan en direcciones opuestas.
Así que el rango se guarda tal como se introdujo, normalizado, junto a sus dos límites de dieciséis bytes cada uno, y un único BETWEEN decide. IPv4 se escribe en su forma IPv6 para que ambas familias tengan el mismo ancho y una sola comparación cubra las dos.
Por qué este intercambio es aceptable aquí
Lo que se guarda es la propia red del operador, escrita por él, mostrada a él y borrable por él en cualquier momento. No es la dirección de un visitante. La política de privacidad dice lo mismo con las mismas palabras, porque la alternativa — describir el servicio como si aplicara hash a todo y exceptuar esto en silencio — sería esa clase de afirmación cierta a grandes rasgos que vale menos que ninguna afirmación.
El límite son diez entradas por contador: bastantes para casa, oficina y móvil, pocas para que la lista pueda convertirse en un almacén general de direcciones.
El segundo tipo, para lo que se mueve
Parte del tráfico tiene identidad estable y dirección inestable: tu propio monitor de disponibilidad, el buscador de vistas previas de un programa de chat, un servicio de comprobación. Ningún rango los atrapa.
Para ellos la exclusión compara un fragmento de la identificación del navegador. Escribir uptimerobot atrapa la cadena completa que envía. El mínimo son cuatro caracteres, porque un fragmento de dos letras aparecería en casi cualquier identificación y apagaría el contador por completo.
El punto general
Un diseño de privacidad es un conjunto de intercambios, y las partes interesantes son aquellas en las que una regla tuvo que doblarse. Las reglas que nunca se doblan suelen significar que nadie las ha puesto todavía frente a un requisito real.
Lo que hay que evitar es doblar una en silencio. Un campo con hash que en realidad no lo tiene, descrito en la documentación como si lo tuviera, es peor que un campo en claro descrito con claridad — gasta una confianza que no se ha ganado, y acabará encontrándolo alguien que no esperaba tener que comprobarlo.