Motivação
Trabalho com conjuntos de dados que contêm informações de identificação pessoal (PII) e às vezes preciso compartilhar parte de um conjunto de dados com terceiros, de uma maneira que não exponha as PII e sujeite meu empregador a responsabilidades. Nossa abordagem usual aqui é reter os dados inteiramente ou, em alguns casos, reduzir sua resolução; por exemplo, substituindo um endereço exato da rua pelo município ou setor censitário correspondente.
Isso significa que certos tipos de análise e processamento devem ser feitos internamente, mesmo quando um terceiro tiver recursos e conhecimentos mais adequados à tarefa. Como os dados de origem não são divulgados, o modo como processamos essa análise e processamento carece de transparência. Como resultado, a capacidade de terceiros de executar controle de qualidade / controle de qualidade, ajustar parâmetros ou fazer refinamentos pode ser muito limitada.
Anonimizando dados confidenciais
Uma tarefa envolve a identificação de indivíduos por seus nomes, nos dados enviados pelo usuário, levando em consideração erros e inconsistências. Um indivíduo particular pode ser gravado em um local como "Dave" e em outro como "David", as entidades comerciais podem ter muitas abreviações diferentes e sempre há alguns erros de digitação. Desenvolvi scripts com base em vários critérios que determinam quando dois registros com nomes não idênticos representam o mesmo indivíduo e atribuem a eles um ID comum.
Nesse ponto, podemos tornar o conjunto de dados anônimo, retendo os nomes e substituindo-os por esse número de identificação pessoal. Mas isso significa que o destinatário quase não tem informações sobre, por exemplo, a força da partida. Preferimos poder transmitir o máximo de informação possível sem divulgar a identidade.
O que não funciona
Por exemplo, seria ótimo poder criptografar seqüências de caracteres, preservando a distância de edição. Dessa forma, terceiros podem fazer parte de seu próprio controle de qualidade / controle de qualidade, ou optar por fazer um processamento adicional por conta própria, sem nunca acessar (ou poderem potencialmente fazer engenharia reversa) as IIP. Talvez combinemos as strings internamente com a distância de edição <= 2, e o destinatário deseja examinar as implicações de aumentar essa tolerância para editar a distância <= 1.
Mas o único método que eu conheço que faz isso é o ROT13 (mais geralmente, qualquer cifra de deslocamento ), que dificilmente conta como criptografia; é como escrever os nomes de cabeça para baixo e dizer: "Promete que não vai virar o papel?"
Outra solução ruim seria abreviar tudo. "Ellen Roberts" se torna "ER" e assim por diante. Essa é uma solução ruim porque, em alguns casos, as iniciais, em associação com dados públicos, revelam a identidade de uma pessoa e, em outros casos, é ambíguo demais; "Benjamin Othello Ames" e "Bank of America" terão as mesmas iniciais, mas seus nomes são diferentes. Portanto, ele não faz nenhuma das coisas que queremos.
Uma alternativa deselegante é a introdução de campos adicionais para rastrear certos atributos do nome, por exemplo:
+-----+----+-------------------+-----------+--------+
| Row | ID | Name | WordChars | Origin |
+-----+----+-------------------+-----------+--------+
| 1 | 17 | "AMELIA BEDELIA" | (6, 7) | Eng |
+-----+----+-------------------+-----------+--------+
| 2 | 18 | "CHRISTOPH BAUER" | (9, 5) | Ger |
+-----+----+-------------------+-----------+--------+
| 3 | 18 | "C J BAUER" | (1, 1, 5) | Ger |
+-----+----+-------------------+-----------+--------+
| 4 | 19 | "FRANZ HELLER" | (5, 6) | Ger |
+-----+----+-------------------+-----------+--------+
Eu chamo isso de "deselegante" porque requer antecipar quais qualidades podem ser interessantes e é relativamente grossa. Se os nomes forem removidos, não há muito que você possa concluir razoavelmente sobre a força da correspondência entre as linhas 2 e 3 ou sobre a distância entre as linhas 2 e 4 (ou seja, quão próximas elas estão da correspondência).
Conclusão
O objetivo é transformar cadeias de caracteres de maneira que o máximo possível de qualidades úteis da cadeia original seja preservado, enquanto oculta a cadeia original. A descriptografia deve ser impossível, ou tão impraticável que seja efetivamente impossível, independentemente do tamanho do conjunto de dados. Em particular, um método que preserva a distância de edição entre cadeias arbitrárias seria muito útil.
Encontrei alguns documentos que podem ser relevantes, mas estão um pouco exagerados: