Перейти к основному содержанию
Перейти к основному содержанию

clickhouse-obfuscator

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

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

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

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

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

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

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

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

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

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

  • компоненту даты в значениях DateTime;

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

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

Большинство свойств, перечисленных выше, подходят для тестирования производительности:

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

Работает детерминированно: вы задаете начальное значение (seed), и преобразование определяется входными данными и этим seed. Некоторые преобразования взаимно однозначны и могут быть обращены, поэтому вам нужно использовать большой seed и держать его в секрете.

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

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

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

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

Этот инструмент корректно работает только при хотя бы умеренном объеме данных (не менее тысяч строк).