k-익명성을 사용한 재식별 위험 시각화

이 주제에서는 Cloud Data Loss Prevention(DLP)를 사용하여 데이터세트의 k-익명성을 측정하고 Google 데이터 스튜디오에서 이를 시각화하는 방법을 보여줍니다. 이렇게 하면 위험을 더 정확히 파악하고, 데이터를 수정 또는 익명화하는 경우 감수해야 하는 유용성 측면의 타협을 평가하는 데 도움이 됩니다. API에는 l-다양성과 같은 추가 측정항목도 있지만 이 주제에서는 k-익명성을 집중적으로 살펴봅니다.

소개

익명화 기법은 데이터를 처리 또는 사용하는 중에 대상의 개인정보를 보호하는 데 매우 유용할 수 있습니다. 그러나 데이터세트가 충분히 익명화되었는지 여부를 어떻게 알 수 있을까요? 또한 익명화가 사용 사례 측면에서 지나치게 많은 데이터 손실로 이어졌는지 여부는 어떻게 알 수 있을까요? 즉, 데이터 기반의 의사 결정을 내리려면 재식별성 위험과 데이터의 유용성을 어떻게 비교해야 할까요?

데이터세트의 k-익명성 값을 계산하면 데이터세트 레코드의 재식별성을 평가하여 이러한 질문에 대한 답을 찾는 데 도움이 됩니다. Cloud DLP에는 개발자가 지정한 유사 식별자를 기준으로 데이터세트의 k-익명성 값을 계산하는 기본 제공 기능이 포함되어 있습니다. 이 기능을 사용하면 특정 열 또는 열 조합의 익명화로 얻게 되는 데이터세트가 재식별될 가능성이 높은지 또는 낮은지 신속하게 평가할 수 있습니다.

데이터세트 예시

다음은 대용량 데이터세트 예시의 처음 몇 행입니다.

user_id zip_code age score
121317473 94043 25 52
121317474 92104 43 87
... ... ... ...

이 가이드에서는 유사 식별자에 중점을 두므로 user_id에 대해서는 다루지 않습니다. 실제 시나리오에서는 이 항목을 적절히 수정하거나 토큰화해야 합니다. score 열은 이 데이터세트에 독점적으로 사용되는 열이며, 공격자가 다른 수단을 통해 습득할 가능성이 낮으므로 분석에 포함하지 않습니다. 여기서는 남은 zip_codeage 열에 집중합니다. 공격자는 이 두 열을 사용하여 다른 데이터 소스를 통해 개인에 대해 알아낼 가능성이 있습니다. 이 데이터세트와 관련하여 답을 찾아야 하는 질문은 다음과 같습니다.

  • 두 개의 유사 식별자(zip_codeage)는 익명화된 데이터의 전체적인 재식별 위험에 어떤 영향을 미치나요?
  • 익명화 변환 적용은 이 위험에 어떤 영향을 미치나요?

zip_codeage의 조합이 소수의 사용자 그룹으로 연결되지 않도록 해야 합니다. 예를 들어 데이터세트에서 우편번호 94043에 거주하는 사람이 단 한 명이며 나이가 25세라고 가정해 보겠습니다. 공격자는 이 정보를 그 지역의 인구통계 또는 다른 가용 정보와 교차 참조하여 그 사람이 누구인지 알아내고 score의 가치를 확인할 수 있습니다. 이 현상에 대한 자세한 내용은 위험 분석 개념 주제의 '항목 ID 및 k-익명성 계산' 섹션을 참조하세요.

1단계 : 데이터세트의 k-익명성 계산

먼저 Cloud DLP를 사용하여 데이터세트의 k-익명성을 계산합니다. 다음 JSON을 리소스로 전송합니다. 이 JSON 내에서 DlpJob 항목 IDuser_id 열로 설정하고 두 개의 유사 식별자를 zip_codeage 열로 식별합니다. 또한 Cloud DLP가 결과를 BigQuery 테이블에 저장하도록 지정합니다.

JSON 입력:

POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/dlpJobs?key={YOUR_API_KEY}

{
  "riskJob":{
    "privacyMetric":{
      "kAnonymityConfig":{
        "entityId":{
          "field":{
            "name":"user_id"
          }
        },
        "quasiIds":[
          {
            "name":"zip_code"
          },
          {
            "name":"age"
          }
        ]
      }
    },
    "actions":[
      {
        "saveFindings":{
          "outputConfig":{
            "table":{
              "projectId":"dlp-demo-2",
              "datasetId":"risk",
              "tableId":"risk1"
            }
          }
        }
      }
    ],
    "sourceTable":{
      "projectId":"dlp-demo-2",
      "datasetId":"deid",
      "tableId":"source1"
    }
  }
}

k-익명성 작업이 완료되면 Cloud DLP가 작업 결과를 dlp-demo-2.risk.risk1이라는 BigQuery 테이블로 보냅니다.

2단계: 결과를 Google 데이터 스튜디오에 연결

다음으로, 1단계에서 생성한 BigQuery 테이블을 Google 데이터 스튜디오의 새 보고서에 연결합니다.

  1. Google 데이터 스튜디오를 연 다음 새 보고서 시작 아래의 비어 있음 옵션을 클릭합니다.
  2. 오른쪽 데이터 소스 추가 창에서 맨 아래의 새 데이터 소스 만들기를 클릭합니다.
  3. Google 커넥터 섹션에서 BigQuery를 가리킨 다음 선택을 클릭합니다.
  4. BigQuery 데이터 소스 창의 열 선택도구에서 프로젝트, 데이터세트, 테이블을 선택합니다. 이 예시에서는 프로젝트는 dlp-demo-2, 데이터세트는 risk, 테이블은 risk1을 선택합니다.
  5. 세 가지 열에서 모두 선택하면 파란색으로 변하는 연결 버튼을 클릭합니다. 연결되면 다음과 같은 색상이 지정된 필드 목록을 볼 수 있습니다.데이터 스튜디오의 필드 목록
  6. 필드 열에서 upper_endpoint 필드를 찾습니다. 집계 아래의 행에서 드롭다운 메뉴를 통해 합계를 선택합니다.
  7. 보고서에 추가를 클릭합니다.

이제 k-익명성 스캔 결과가 새 데이터 스튜디오 보고서에 추가되었습니다. 다음 단계에서는 차트를 만듭니다.

3단계: 차트 만들기

마지막으로, 가져온 필드를 기반으로 차트를 만듭니다. 다음을 수행하여 차트를 삽입합니다.

  1. 데이터 스튜디오의 삽입 메뉴에서 콤보 차트를 클릭합니다.
  2. 차트를 표시할 편집기 페이지에서 클릭해서 직사각형을 그립니다.

그 다음 차트 데이터를 구성하여 버킷의 다양한 크기 및 값 범위의 효과가 차트에 표시되도록 합니다.

  1. 오른쪽 데이터 탭 아래에서 다음 그림과 같이 타임스탬프를 가리킨 다음, 원 안에 X를 클릭하여 날짜 범위 측정기준을 삭제합니다.
    삭제 버튼이 사용 설정된 타임스탬프 필드의 세부정보
  2. upper_endpoint 필드를 오른쪽 열의 측정기준정렬 필드로 드래그한 다음 정렬 필드 아래의 드롭다운 메뉴에서 오름차순을 선택합니다.
  3. bucket_sizebucket_value_count 필드를 측정항목 필드로 드래그한 다음 오른쪽 열의 부가적인 측정항목 선택을 삭제합니다. 마치면 열은 다음과 같이 표시됩니다.
    필드 목록 스크린샷
  4. bucket_size 측정항목 왼쪽의 아이콘을 가리키면 편집(연필) 아이콘이 표시됩니다. 편집 아이콘을 클릭한 다음 해당 드롭다운 메뉴에서 다음 두 가지를 모두 선택합니다.

    • 다음으로 표시 > 전체 대비 비율
    • 누적 계산 적용 > 누적 합계
  5. bucket_value_count 측정항목으로 이전 단계를 반복합니다.

마지막으로, 차트를 구성하여 두 측정항목의 선 차트를 표시합니다.

  1. 창 오른쪽에서 스타일 탭을 클릭합니다.
  2. 두 계열(#1 및 #2, 각각 bucket_sizebucket_value_count를 나타냄)에서 모두 을 선택합니다.
  3. 최종 차트를 보려면 창 오른쪽 상단의 보기 버튼을 클릭합니다.

k- 익명성 = 10이 강조표시된 최종 차트

차트 해석

생성되는 차트의 x축에는 k-익명성 값이, y축에는 데이터 손실 비율이 있습니다. 예를 들어 위 스크린샷에서 강조표시된 데이터 포인트는 k-익명성 값 10입니다. 이는 다음과 같이 해석할 수 있습니다. 최대 10까지의 k-익명성 값을 가진 모든 행을 삭제할 경우 데이터세트에서 82%의 행이 손실됩니다. 또한 고유한 연령/우편번호 조합의 92%가 손실됩니다. 위 차트는 이 데이터세트에서 상당한 수의 행과 값을 버리지 않고는 2 또는 3 이상의 k-익명성 값을 달성하기가 어렵다는 것을 보여줍니다.

다행히 데이터 삭제 이외의 다른 선택안도 있습니다. 다른 익명화 기술로 손실과 유용성 간의 균형을 더 적절히 맞출 수 있습니다. 예를 들어 높은 k-익명성 값 및 이 데이터세트와 관련된 종류의 데이터 손실에 대처하려면 연령 또는 우편번호를 버케팅하여 연령/우편번호 조합의 고유성을 낮출 수 있습니다. 예를 들어 20-25, 25-30, 30-35 등의 범위로 연령 버케팅을 시도할 수 있습니다. 그 방법에 대한 자세한 내용은 일반화 및 버케팅텍스트 콘텐츠의 민감한 데이터 익명화를 참조하세요.