Que técnicas simples e eficazes de pontos ofuscantes estão disponíveis?

14

Estamos criando um site que coletará informações de localização (pontos) dos usuários. Estamos explorando técnicas para preservar a privacidade da localização dos usuários (por exemplo, muitas vezes os usuários compartilham seu endereço residencial, o que é sensível). Uma opção que veio à mente é ofuscar ou "misturar" os pontos antes de armazená-los no banco de dados, eliminando a necessidade de armazenar esses dados confidenciais.

Nossos requisitos básicos são, acredito:

  1. Dado um único ponto ofuscado, não é possível derivar o ponto original dentro de (digamos) um quilômetro ou mais, mesmo considerando todos os metadados associados ao ponto (por exemplo, suponha que todo o banco de dados esteja comprometido).

  2. Dado um conjunto arbitrariamente grande de pontos ofuscados correspondentes ao mesmo ponto original, ainda não é possível derivar o ponto original. (Por exemplo, uma técnica fácil seria adicionar um vetor aleatório ao ponto original, mas se você fizer isso o suficiente, os pontos ofuscados se agruparão em torno do ponto original.)

Seria bom se várias propriedades estatísticas fossem preservadas, embora eu não saiba quais propriedades são importantes nesse estágio. Por exemplo, prefiro que os pontos ofuscados se espalhem de uma maneira "natural" em vez de se acumularem em uma grade. No entanto, a privacidade é mais importante que isso.

Reid
fonte
Seus requisitos não mencionam que tipo de precisão você deseja manter, você se concentra apenas no requisito de ofuscação. O algoritmo a seguir satisfaz trivialmente os requisitos listados, mas é inútil: mapeie cada ponto para 0 ° N, 0 ° leste. Presumivelmente, você também deseja satisfazer algum critério, como o ponto ofuscado está a x km do ponto real.
Llaves
Uma segunda pergunta: você menciona os metadados e pode reconstruir o ponto verdadeiro se todo o banco de dados estiver comprometido. Se os metadados não permitem identificar pontos ofuscados associados ao mesmo "ponto verdadeiro", como alguém pode reconstruir o "ponto verdadeiro" a partir de amostras aleatórias repetidas se você não pode associá-los um ao outro? Por outro lado, se os metadados permitem associar os pontos, quando você for solicitado a relatar novamente a localização de algum ponto já ofuscado, basta retornar o mesmo valor ofuscado retornado todas as vezes anteriores.
Llaves
Você precisa recriar a localização real a partir dos dados em hash ou será usado apenas para confirmar que uma pessoa está onde ela diz que está? Se for o último, um hash unidirecional, misturar um sal + o WKT da geometria seria suficiente. Se for o primeiro, você terá que ter alguma função em algum lugar para fazer a transformação inversa da sua função hash - um hash bidirecional.
MerseyViking
Os pontos serão comparados com os dados de outros usuários / outros conjuntos de dados como parte do serviço?
Matthew Snape
@ Llaves, na verdade: "dentro de um quilômetro ou mais". Mas eu espero que o nível de ofuscação seja um parâmetro para o algoritmo. Em relação ao seu segundo comentário, sim, os metadados permitem a associação de pontos (por exemplo, um usuário pode inserir o mesmo ponto várias vezes). E um algoritmo que resulta no mesmo ponto ofuscado, dado o mesmo ponto original, é bom; mas se o algoritmo não fizer isso, não posso recuperar o ponto original (esse é o motivo da pergunta) para testar se o mesmo ponto ofuscado deve ser usado.
Reid

Respostas:

6

Dê uma olhada em:

MP Armstrong, Rushton G, Zimmerman DL. Mascarar geograficamente dados de saúde para preservar a confidencialidade . Stat Med.1999; 18: 497-525.

( citação , texto completo )

Eles discutem diferentes 'máscaras geográficas' para dados pontuais, incluindo deslocamento, rotação, perturbação aleatória e agregação. Embora eles não discutam soluções técnicas específicas sobre como implementá-lo, existem indicadores úteis para informações sobre o que você ganha / perde com cada abordagem.

Para considerações mais teóricas, dê uma olhada na minha resposta à pergunta sobre tópico semelhante.

radek
fonte
2
Boa referência, é um campo ativo que muitos estão disponíveis. Eu recomendei um artigo de visão geral ( Mathews & Harel, 2011 ) em outra pergunta . Eu também acredito que o International Journal of Health Geographics tem artigos sobre ele de tempos em tempos (veja minha biblioteca citada com a tag geomask ). Eu não encontrei nenhuma ferramenta para fazer o trabalho, provavelmente um esforço útil.
Andy W
1
@ AndyW Obrigado por indicações Andy. De fato - com a quantidade crescente de dados geográficos de alta resolução usados ​​na saúde pública / epidemiologia espacial, o problema se torna cada vez mais relevante. Tive a mesma sensação de que as soluções práticas ainda estão muito atrás das teóricas - definitivamente um lugar onde alguns desenvolvimentos interessantes podem ser feitos!
Radek
1

Você pode tentar usar o ruído Perlin para mudar seus pontos de forma aleatória, mas com a vantagem de que os pontos próximos um do outro permanecerão próximos um do outro, mas essa semelhança diminui com a distância. Se a função de ruído estiver centrada em torno de 0, a análise estatística ainda deve retornar dados semelhantes aos da fonte, pois o ruído de Perlin (especialmente a versão de 2002) é uma distribuição aproximadamente gaussiana.

MerseyViking
fonte
Se eu trocar muitas cópias do mesmo ponto, o ponto original poderá ser recuperado analisando os pontos deslocados?
Reid
Do jeito que eu imaginei, você usaria as coordenadas do ponto como uma pesquisa na função de ruído. Portanto, dois pontos idênticos permaneceriam coincidentes. Você pode usar um terceiro valor, digamos a data em que o ponto foi criado como uma pesquisa em uma função de ruído 3D Perlin. Então (e eu não sou estatístico), seria impraticável reconstruir os dados de origem, a menos que a semente aleatória e a escala do ruído escolhido fossem conhecidas. Mesmo assim, não tenho certeza de que seria praticamente viável.
MerseyViking
Ah, então você está transformando-o em uma função hash. Pode não ser seguro supor que a semente e a escala aleatórias permaneçam secretas; Estou assumindo que o servidor foi totalmente comprometido.
Reid
Ufa! OK, então, eu gosto de um desafio :) Agora você está realmente falando sobre segurança física. Você tem uma máquina externa separada para gerar os hashes, enviá-los por uma conexão segura com algo como SSL. Você pode configurar um cão de guarda em um ou nos dois servidores, de modo que, se um deles cair, ou pressionar um grande botão vermelho, o outro seja desligado automaticamente. Se você usou instâncias de nuvem, então não haveria nenhuma maneira prática de obter qualquer coisa de outro exemplo, menos do que quebrar em datacenters da Amazon ...
MerseyViking
Como corolário, você só deve gastar tanto em segurança de dados quanto os dados valem. Há muitas camadas que você pode adicionar ao seu modelo de segurança, mas em algum momento você precisa dizer o suficiente. Talvez valha a pena colocar essa questão em um dos outros sites da SE.
MerseyViking
0

Talvez isso seja mais complicado e complicado do que o necessário, no entanto, pode ser um caminho a seguir:

Crie um script python simples que aceite seus pontos de entrada originais, armazene-os em buffer a uma certa distância ofuscante aceitável, crie n número de pontos aleatórios usando os buffers como uma restrição de recurso (100, por exemplo) e selecione um dos pontos usando um gerador de números pseudo-aleatórios para usar como o novo ponto ofuscado. Também seria necessário criar um novo número pseudo-aleatório para cada ofuscação.

Dependendo do seu cenário, isso pode ser empacotado em uma Caixa de Ferramentas e acessado como um serviço GPS com um ponto de extremidade REST, para que a ofuscação ocorra nos locais de memória e apenas o ponto ofuscado seja publicado no banco de dados físico.

Um alto
fonte
1
Isso pressupõe uma implementação do ArcGIS, mas nenhuma foi mencionada no OP. Ainda assim, uma solução interessante!
blah238
3
Essa solução natural apresenta algumas falhas em potencial no exame: (1) vários pontos distintos podem ser mapeados para o mesmo ponto. (2) É fácil desmascarar pontos, como mostra o OP. (3) Muitas vezes, os pontos precisam permanecer em alguma relação geográfica com características relacionadas: por exemplo , os locais das casas devem estar perto das ruas e não nos lagos ou nos pátios ferroviários. Questões como essas tornam o problema genuinamente difícil, interessante e digno da análise de GIS (pois, de outro modo, é possível tremer as coordenadas originais aleatoriamente quando elas são inseridas no banco de dados e terminadas).
whuber
0

OK, então o algoritmo que estamos considerando é o seguinte:

  1. Arredonde a ponta para uma grade de 200 metros (para compensar os caprichos na geocodificação).
  2. Hash do texto das coordenadas do ponto usando algum algoritmo de hash criptográfico (por exemplo, SHA2).
  3. Substitua os bits de ordem inferior das coordenadas do ponto (até o nível de ofuscação desejado de 1 km) pelos resultados da função hash.
Reid
fonte