clickhouse-obfuscator
clickhouse-obfuscator
clickhouse-obfuscator는 테이블 데이터를 난독화(obfuscate)하는 간단한 도구예요. 입력 테이블을 읽어 입력의 일부 속성은 유지하지만 다른 데이터를 담은 출력 테이블을 만들어 냅니다.
출처: 문서
본문
테이블 데이터 난독화를 위한 간단한 도구입니다. 입력 테이블을 읽어 입력의 일부 속성은 유지하지만 다른 데이터를 담은 출력 테이블을 만듭니다. 거의 실제 운영 데이터에 가까운 데이터를 벤치마크에 사용할 수 있게 공개할 수 있도록 도와줍니다.
다음과 같은 데이터 속성을 유지하도록 설계되었습니다:
- 모든 컬럼과 모든 컬럼 쌍(tuple)에 대한 값의 카디널리티(고유 값 개수)
- 조건부 카디널리티: 다른 컬럼의 값 조건 하에서 한 컬럼의 고유 값 개수
- 정수 절대값의 확률 분포; 부호 있는 정수의 부호; 부동소수점의 지수와 부호
- 문자열 길이의 확률 분포
- 숫자 0 값, 빈 문자열, 빈 배열,
NULL의 확률 - LZ77 및 엔트로피 계열 코덱으로 압축할 때의 데이터 압축비
- 테이블 전체에 걸친 시간 값의 연속성(차이 크기); 부동소수점 값의 연속성
DateTime값의 날짜 구성요소- 문자열 값의 UTF-8 유효성
- 문자열 값이 자연스럽게 보임
위 속성 대부분은 성능 테스트에 유효합니다. 데이터 읽기, 필터링, 집계, 정렬은 유지된 카디널리티, 크기, 압축비 등 덕분에 원본 데이터와 거의 같은 속도로 동작합니다.
결정적(deterministic) 방식으로 동작합니다. 시드(seed) 값을 정의하면 변환은 입력 데이터와 시드에 의해 결정됩니다. 일부 변환은 일대일이라 역변환이 가능하므로, 큰 시드를 사용하고 비밀로 유지해야 합니다.
데이터 변환에 일부 암호화 프리미티브를 사용하지만, 암호학적 관점에서 볼 때 제대로 수행되지는 않습니다. 그래서 다른 이유가 없는 한 결과를 안전한 것으로 간주하면 안 됩니다. 결과물에는 공개하고 싶지 않은 데이터가 일부 남아 있을 수 있습니다.
항상 0, 1, -1 숫자, 날짜, 배열 길이, null 플래그는 원본 데이터와 정확히 동일하게 남겨 둡니다.
예를 들어 테이블에 값이 0과 1인 IsMobile 컬럼이 있다고 합시다. 변환된 데이터에서도 같은 값을 가집니다. 따라서 사용자는 모바일 트래픽의 정확한 비율을 셀 수 있게 됩니다.
또 다른 예를 들어 볼게요. 테이블에 사용자 이메일처럼 비공개 데이터가 있어 단 하나의 이메일 주소도 공개하고 싶지 않다고 합시다. 테이블이 충분히 크고 여러 다른 이메일이 들어 있으며 어떤 이메일도 다른 것보다 압도적으로 높은 빈도를 보이지 않는다면 모든 데이터가 익명화됩니다. 하지만 컬럼에 서로 다른 값이 적게 들어 있다면 그중 일부가 재현될 수 있습니다.
이 도구의 동작 알고리즘을 살펴보고 명령줄 파라미터를 세밀하게 조정해야 합니다.
이 도구는 최소한 어느 정도의 데이터 양(최소 수천 행)이 있어야 제대로 동작합니다.