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:
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).
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.
Respostas:
Dê uma olhada em:
( 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.
fonte
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.
fonte
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.
fonte
OK, então o algoritmo que estamos considerando é o seguinte:
fonte