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

clickhouse-obfuscator

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

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

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

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

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

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

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

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

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

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

  • компонент даты значений DateTime;

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

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

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

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

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

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

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

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

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

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