clickhouse-obfuscator
Простой инструмент для обфускации данных таблицы.
Он читает входную таблицу и создает выходную таблицу, которая сохраняет некоторые свойства входной, но содержит разные данные. Он позволяет публиковать почти реальные производственные данные для использования в бенчмарках.
Он предназначен для сохранения следующих свойств данных:
-
кардинальности значений (количество различных значений) для каждой колонки и каждой кортежа колонок;
-
условные кардинальности: количество различных значений одной колонки при условии на значение другой колонки;
-
вероятностные распределения абсолютных значений целых чисел; знак знаковых целых чисел; экспонента и знак для чисел с плавающей запятой;
-
вероятностные распределения длины строк;
-
вероятность нулевых значений чисел; пустых строк и массивов,
NULL
s; -
коэффициент сжатия данных при сжатии с LZ77 и семейства кодеков энтропии;
-
непрерывность (величина разности) временных значений по всей таблице; непрерывность значений с плавающей запятой;
-
дата-компонент значений
DateTime
; -
корректность UTF-8 строковых значений;
-
строковые значения выглядят естественно.
Большинство вышеуказанных свойств жизнеспособны для тестирования производительности:
чтение данных, фильтрация, агрегация и сортировка будут работать почти с такой же скоростью, как с оригинальными данными благодаря сохраненным кардинальностям, величинам, коэффициентам сжатия и т. д.
Он работает детерминированным образом: вы задаете значение семени, и преобразование определяется входными данными и семенем. Некоторые преобразования являются взаимно однозначными и могут быть обратно преобразованы, поэтому вам нужно иметь большое семя и хранить его в секрете.
Он использует некоторые криптографические примитивы для преобразования данных, но с криптографической точки зрения он делает это неправильно, поэтому не следует считать результат безопасным, если только у вас нет другой причины. Результат может содержать некоторые данные, которые вы не хотите публиковать.
Он всегда оставляет числа 0, 1, -1, даты, длины массивов и null-флаги именно такими, как в исходных данных.
Например, у вас есть колонка IsMobile
в вашей таблице со значениями 0 и 1. В преобразованных данных она будет иметь то же значение.
Таким образом, пользователь будет в состоянии подсчитать точное соотношение мобильного трафика.
Давайте приведем еще один пример. Когда у вас есть какие-то частные данные в вашей таблице, такие как электронная почта пользователя, и вы не хотите публиковать ни один адрес электронной почты. Если ваша таблица достаточно велика и содержит несколько различных адресов электронной почты, и ни один адрес не имеет очень высокой частоты по сравнению со всеми остальными, он анонимизирует все данные. Но если у вас небольшое количество различных значений в колонке, он может воспроизвести некоторые из них. Вы должны изучить работающий алгоритм этого инструмента и тонко настроить его параметры командной строки.
Этот инструмент работает хорошо только с как минимум умеренным количеством данных (по крайней мере 1000 строк).