clickhouse-obfuscator
A simple tool for table data obfuscation.
入力テーブルを読み込み、いくつかのプロパティを保持しながら異なるデータを含む出力テーブルを生成します。 これは、ベンチマークで使用するためにほぼ実際のプロダクションデータを公開することを可能にします。
データの以下のプロパティを保持するように設計されています:
-
各カラムおよびカラムの組み合わせに対する値の基数(異なる値の数);
-
条件付き基数:別のカラムの値に対する条件下での1つのカラムの異なる値の数;
-
整数の絶対値の確率分布; 符号付き整数の符号; 浮動小数点数の指数と符号;
-
文字列の長さの確率分布;
-
数値のゼロ値の確率; 空の文字列および配列、
NULL
の確率; -
LZ77およびエントロピー系コーデックで圧縮した際のデータ圧縮比;
-
テーブル全体にわたる時刻値の連続性(差の大きさ); 浮動小数点数の連続性;
-
DateTime
値の日時コンポーネント; -
文字列値のUTF-8の有効性;
-
文字列値が自然に見えること。
上記のほとんどのプロパティは、パフォーマンステストに適しています:
データの読み取り、フィルタリング、集約、およびソートは、基数、差の大きさ、圧縮比などが保持されるため、元のデータとほぼ同じ速度で動作します。
これは決定論的に動作します:シード値を定義し、変換は入力データおよびシードによって決まります。いくつかの変換は1対1で逆にできるため、大きなシードを持ち、それを秘密にしておく必要があります。
データを変換するためにいくつかの暗号技術を使用しますが、暗号的な観点からは適切に実行されていません。そのため、他に理由がない限り、結果を安全なものとして考慮すべきではありません。結果には、公開したくないデータが含まれている可能性があります。
常に、0、1、-1の数値、日付、配列の長さ、およびNULLフラグは、ソースデータとまったく同じように保持されます。
例えば、テーブルに IsMobile
というカラムがあり、その値が0または1の場合、変換されたデータでも同じ値を持ちます。
したがって、ユーザーはモバイルトラフィックの正確な比率を数えることができるようになります。
別の例を挙げましょう。テーブルにユーザーのメールアドレスなどのプライベートデータがあり、個々のメールアドレスを公開したくない場合。 テーブルが十分に大きく、複数の異なるメールアドレスを含み、どのメールも他のメールに対して非常に高頻度でない場合、それはすべてのデータを匿名化します。しかし、カラムに異なる値が少数しかない場合、いくつかの値を再現することができます。 このツールの動作アルゴリズムを確認し、コマンドラインパラメータを微調整する必要があります。
このツールは、少なくとも適度な量のデータ(少なくとも1000行以上)でのみ正常に機能します。