Skip to main content

Обфускатор ClickHouse

Простой инструмент для обфускации табличных данных.

Он считывает данные входной таблицы и создает выходную таблицу, которая сохраняет некоторые свойства входных данных, но при этом содержит другие данные.

Это позволяет публиковать практически реальные данные и использовать их в тестах на производительность.

Обфускатор предназначен для сохранения следующих свойств данных:

  • кардинальность (количество уникальных данных) для каждого столбца и каждого кортежа столбцов;

  • условная кардинальность: количество уникальных данных одного столбца в соответствии со значением другого столбца;

  • вероятностные распределения абсолютного значения целых чисел; знак числа типа Int; показатель степени и знак для чисел с плавающей запятой;

  • вероятностное распределение длины строк;

  • вероятность нулевых значений чисел; пустые строки и массивы, NULL;

  • степень сжатия данных алгоритмом LZ77 и семейством энтропийных кодеков;

  • непрерывность (величина разницы) значений времени в таблице; непрерывность значений с плавающей запятой;

  • дату из значений DateTime;

  • кодировка UTF-8 значений строки;

  • строковые значения выглядят естественным образом.

Большинство перечисленных выше свойств пригодны для тестирования производительности. Чтение данных, фильтрация, агрегирование и сортировка будут работать почти с той же скоростью, что и исходные данные, благодаря сохраненной кардинальности, величине, степени сжатия и т. д.

Он работает детерминированно. Вы задаёте значение инициализатора, а преобразование полностью определяется входными данными и инициализатором.

Некоторые преобразования выполняются один к одному, и их можно отменить. Поэтому нужно использовать большое значение инициализатора и хранить его в секрете.

Обфускатор использует некоторые криптографические примитивы для преобразования данных, но, с криптографической точки зрения, результат будет небезопасным. В нем могут сохраниться данные, которые не следует публиковать.

Он всегда оставляет без изменений числа 0, 1, -1, даты, длины массивов и нулевые флаги. Например, если у вас есть столбец IsMobile в таблице со значениями 0 и 1, то в преобразованных данных он будет иметь то же значение.

Таким образом, пользователь сможет посчитать точное соотношение мобильного трафика.

Давайте рассмотрим случай, когда у вас есть какие-то личные данные в таблице (например, электронная почта пользователя), и вы не хотите их публиковать. Если ваша таблица достаточно большая и содержит несколько разных электронных почтовых адресов, и ни один из них не встречается часто, то обфускатор полностью анонимизирует все данные. Но, если у вас есть небольшое количество разных значений в столбце, он может скопировать некоторые из них. В этом случае вам следует посмотреть на алгоритм работы инструмента и настроить параметры командной строки.

Обфускатор полезен в работе со средним объемом данных (не менее 1000 строк).