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

clickhouse-obfuscator

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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