왜 제외 목록은 해시하지 않는가
이 글의 내용
사이트를 만든다는 것은 하루에 스무 번 그것을 연다는 뜻입니다. 한 달에 방문자가 마흔인 카운터라면 통계의 절반이 만든 사람입니다. 그래서 설정이 하나 있습니다. 내 주소에서 온 방문은 세지 마라.
이 서비스의 다른 모든 곳에서 주소는 비밀 소금과 날짜로 해시되고, 주소 자체는 결코 저장에 닿지 않습니다. 이 한 곳에서만 입력한 그대로, 읽을 수 있는 형태로 저장됩니다. 일부러 내린 결정이고, 누군가 발견하게 두기보다 소리 내어 말해 둘 값어치가 있습니다.
먼저 시도한 방식
첫 구현은 다른 모든 것과 맞추어 주소의 검사값을 저장했습니다. 작동했고, 저장은 더 적었으며, 거의 쓸모가 없었습니다. 대부분의 가정 회선은 날마다 새 주소를 받습니다. 제외는 설정한 순간에는 맞고 이튿날 아침이면 값어치가 없었습니다.
날마다 바뀌어도 살아남는 것은 대역입니다 — 보통 통신사의 /24나 /16이고, 끝자리가 도는 동안 그대로 있습니다. 그리고 대역은 검사값으로 견줄 수 없습니다. 해시는 일부러 순서를 무너뜨리고, "이 주소가 이 대역 안에 있는가"는 순서에 관한 물음입니다. 영리한 우회로는 없습니다. 두 요구가 반대 방향을 가리킵니다.
그래서 대역은 입력한 그대로 정규화되어, 각 16바이트인 두 경계와 함께 저장되고, BETWEEN 하나가 판가름합니다. IPv4는 IPv6 형태로 적어 두 계열의 너비를 같게 하고 비교 하나로 둘을 덮습니다.
왜 여기서 이 맞바꿈이 받아들일 만한가
저장되는 것은 운영자 자신의 네트워크이고, 그가 직접 입력했으며, 그에게 다시 보여지고, 그가 언제든 지울 수 있습니다. 방문자의 주소가 아닙니다. 개인정보 처리방침도 같은 말을 같은 낱말로 적습니다. 다른 길 — 서비스를 "모든 것을 해시한다"고 설명하고 이것만 조용히 예외로 두는 것 — 은 큰 틀에서는 참이지만 아예 없는 주장보다 값어치가 적은 종류일 테니까요.
한도는 카운터마다 열 개입니다. 집, 사무실, 이동 회선에 넉넉하고, 목록이 일반적인 주소 보관소가 될 만큼은 되지 않습니다.
움직이는 것들을 위한 두 번째 종류
어떤 통행량은 신원은 고정되어 있고 주소는 흔들립니다. 가동 상태 감시 도구, 대화 프로그램의 링크 미리보기 수집기, 점검 서비스 같은 것입니다. 어떤 대역도 그것들을 잡지 못합니다.
그들을 위해 제외는 대신 브라우저 식별 문자열의 조각과 맞춥니다. uptimerobot를 입력하면 그것이 보내는 문자열 전체를 잡습니다. 최소는 네 글자입니다. 두 글자 조각은 거의 모든 식별 문자열에 나타나 카운터를 통째로 꺼 버릴 테니까요.
일반론
개인정보 설계는 맞바꿈의 묶음이고, 흥미로운 대목은 규칙이 휘어야 했던 곳입니다. 한 번도 휘지 않는 규칙은 대개 아직 아무도 그것을 진짜 요구와 맞대어 보지 않았다는 뜻입니다.
피해야 할 것은 조용히 휘는 일입니다. 실제로는 해시되지 않은 항목을 문서에서 해시된 것처럼 설명하는 것은, 읽을 수 있는 항목을 읽을 수 있다고 설명하는 것보다 나쁩니다. 벌지 않은 신뢰를 쓰는 일이고, 확인해야 할 줄 몰랐던 누군가가 언젠가 찾아내게 됩니다.