Anonimizator – Nowy Projekt!

Cel projektu

Sytuacja wygląda tak – potrzebuję dostarczyć do zespołu deweloperskiego bazę produkcyjną aby dokonali na niej pewnych testów i optymalizacji. Występują też jeden czy dwa błędy, których nie daje się zreprodukować w środowisku testowym.

Oczywiście baza zawiera masę danych wrażliwych, które absolutnie nie powinny opuścić serwerów produkcyjnych. Zamazanie danych przypadkowymi śmieciami nie wchodzi w rachubę – rozkład statystyczny indeksów ulegnie zmianie i spora część pracy optymalizacyjnej deweloperów będzie bez sensu. Oczywistym jest, że w takim razie należy dane wrażliwe zastąpić danymi „niewrażliwymi” ale sensownymi, o w miarę naturalnym rozkładzie.

Dodatkowe wymagania

  • Dane w bazie są międzynarodowe – mają różną postać i niektóre także formaty
  • Warto zachować statystyczny rozkład danych
  • Powinna być otwarta na przyszłe formaty bazy – nowe bazy jak i rozbudowę / zmiany w istniejącej. Oraz nowe formaty danych.

Zarys rozwiązania

Swego czasu, podczas jednego z projektów, przygotowałem trochę klas generatorów danych testowych, takich jak dane osobowe, adresy, adresy e-mail. Dane bazowe dla generatorów były wyłącznie polskie a ponadto moduł adresów był potraktowany bardzo po macoszemu. Niewątpliwie jest to jakiś punkt wyjścia, ale zdecydowanie zbyt prymitywny na potrzeby funkcjonalnej anonimizacji. Głównie dlatego, że generatory generowały dane zupełnie przypadkowe (Do pewnego stopnia – np. nr PESEL i imię czy nazwisko były dostosowane do płci osoby, podobnie jak PESEL uwzględniał datę urodzenia osoby – o ile została dostarczona w przeciążonej metodzie.) a w obecnym przypadku musimy mieć możliwość kontroli nad zakresem zmian – np. rok i miesiąc urodzenia pozostają oryginalne a randomizujemy wyłącznie dzień albo losujemy imię o identycznej długości (chociaż to, może już nie spełniać wszystkich wymagań…).
Warto też by aplikacja dostarczała na tyle wygodny interfejs, by mogła z niego korzystać uprawniona osoba (Administrator Danych Osobowych), która prawie na pewno nie będzie programistą… Już na wstępie wydaje się zasadnym taki sposób przygotowania konfiguracji procesu, by rozdzielić opracowanie reguł od ich wykonania, oraz w pełni zabezpieczyć dane w bazie produkcyjnej przed niepowołanym dostępem ale także uchronić je przed celowymi lub przypadkowymi zmianami.

Literatura przedmiotu

  1. Niewątpliwie w pierwszej kolejności warto sięgnąć Ustawa o Ochronie Danych Osobowych.
  2. Ciekawym źródłem przydatnych wskazówek i wytycznych jest stosowna ustawa amerykańska dotycząca między innymi anonimizacji i deidentyfikacji pacjentów (HIPAA) wskazana na stronie Wikipedii – De-identification, i w interesującym zakresie dokładniej omówiona tutaj: Protected health information. Zamierzam dokładniej omówić ten ostatni artykuł w kolejnym poście, gdyż te wytyczne są bardzo istotne dla projektowania architektury systemu.

Hello world!

To jest prawdziwy Hello World, godny strony o C# 🙂

// Hello1.cs
public class Hello1
{
   public static void Main()
   {
      System.Console.WriteLine("Hello, World!");
   }
}

Do diaska – tak na prawdę, to próbuję wyłącznie zmusić Syntax Highlighter do działania 🙁