기밀 데이터 세트의 이름을 익명으로 변환하지만 이름의 일부 특성을 유지하려면 어떻게해야합니까?


42

동기

개인 식별 정보 (PII)가 포함 된 데이터 세트로 작업하며 때로는 PII를 노출시키지 않고 고용주에게 책임을 부과하지 않는 방식으로 제 3 자와 데이터 세트의 일부를 공유해야합니다. 우리의 일반적인 접근 방식은 데이터를 완전히 보류하거나 경우에 따라 해상도를 낮추는 것입니다. 예를 들어, 정확한 거리 주소를 해당 카운티 또는 인구 조사로 교체하십시오.

이는 특정 유형의 분석 및 처리가 제 3 자에게 해당 작업에 더 적합한 리소스와 전문 지식이있는 경우에도 사내에서 수행되어야 함을 의미합니다. 소스 데이터는 공개되지 않았으므로이 분석 및 처리 방법은 투명성이 부족합니다. 결과적으로, QA / QC를 수행하거나, 매개 변수를 조정하거나, 개선하는 제 3 자의 능력은 매우 제한 될 수 있습니다.

기밀 데이터 익명 처리

한 가지 과제는 오류와 불일치를 고려하면서 사용자가 제출 한 데이터에서 이름으로 개인을 식별하는 것입니다. 개인은 한 곳에서 "Dave"로, 다른 곳에서 "David"로 기록 될 수 있으며, 상업 기관은 여러 가지 약어를 가질 수 있으며 항상 오타가 있습니다. 동일하지 않은 이름을 가진 두 개의 레코드가 동일한 개인을 나타내는시기를 결정하고 공통 ID를 지정하는 여러 기준을 기반으로 스크립트를 개발했습니다.

이 시점에서 이름을 보류하고이 개인 ID 번호로 바꿔서 데이터 세트를 익명으로 만들 수 있습니다. 그러나 이것은 수신자가 경기의 강도에 대한 정보가 거의 없음을 의미합니다. 우리는 정체성을 밝히지 않고 가능한 한 많은 정보를 전달할 수 있기를 원합니다.

작동하지 않는 것

예를 들어, 편집 거리를 유지하면서 문자열을 암호화 할 수 있으면 좋을 것입니다. 이러한 방식으로, 제 3자는 자체 QA / QC를 수행하거나 PII에 액세스하거나 역 엔지니어링 할 수있는 능력없이 자체적으로 추가 처리를 수행 할 수 있습니다. 아마도 우리는 편집 거리 <= 2와 사내 문자열을 일치시키고 수신자는 편집 거리 <= 1에 대한 공차를 강화하는 의미를보고 싶어합니다.

그러나 내가 알고있는 유일한 방법은 ROT13 (보다 일반적으로 모든 시프트 암호 )이며 암호화로 계산되지 않습니다. 이름을 거꾸로 쓰고 "종이를 뒤집지 않겠다"고 말하는 것과 같습니다.

또 다른 나쁜 해결책은 모든 것을 축약하는 것입니다. "Ellen Roberts"는 "ER"등이됩니다. 어떤 경우에는 공개 데이터와 관련하여 이니셜이 개인의 신원을 드러내고 다른 경우에는 너무 모호하기 때문에 이것은 좋지 않은 해결책입니다. "Benjamin Othello Ames"와 "Bank of America"는 동일한 이니셜을 갖지만 이름이 다르면 다릅니다. 그래서 우리가 원하는 일을하지 않습니다.

부적절한 대안은 이름의 특정 속성을 추적하기 위해 추가 필드를 도입하는 것입니다. 예 :

+-----+----+-------------------+-----------+--------+
| Row | ID | Name              | WordChars | Origin |
+-----+----+-------------------+-----------+--------+
| 1   | 17 | "AMELIA BEDELIA"  | (6, 7)    | Eng    |
+-----+----+-------------------+-----------+--------+
| 2   | 18 | "CHRISTOPH BAUER" | (9, 5)    | Ger    |
+-----+----+-------------------+-----------+--------+
| 3   | 18 | "C J BAUER"       | (1, 1, 5) | Ger    |
+-----+----+-------------------+-----------+--------+
| 4   | 19 | "FRANZ HELLER"    | (5, 6)    | Ger    |
+-----+----+-------------------+-----------+--------+

나는 이것을 "무고한"이라고 부릅니다. 왜냐하면 어떤 자질이 흥미롭고 상대적으로 거칠기 때문입니다. 이름이 제거되면 행 2와 3 사이의 일치 강도 또는 행 2와 4 사이의 거리 (즉, 일치하는 거리)에 대해 합리적으로 결론을 내릴 수 없습니다.

결론

목표는 원래 문자열을 가리지 않으면 서 원래 문자열의 유용한 특성을 최대한 유지하는 방식으로 문자열을 변환하는 것입니다. 데이터 세트의 크기에 상관없이 암호 해독은 불가능하거나 사실상 불가능합니다. 특히 임의의 문자열 사이의 편집 거리를 유지하는 방법이 매우 유용합니다.

관련성이있는 몇 가지 논문을 찾았지만 제 머리 위에 약간 있습니다.

답변:


19

OP에서 언급 한 참고 문헌 중 하나는 "Bloom 필터를 사용하여 개인 정보 보호 기록 연결"( doi : 10.1186 / 1472-6947-9-41 )에 설명되어있는 매우 강력한 잠재적 솔루션으로 이끌었습니다 .

식별자에 오류를 허용하는 암호화 된 식별자로 개인 정보 보호 레코드 연결을위한 새로운 프로토콜이 개발되었습니다. 이 프로토콜은 q 그램의 식별자에 대한 블룸 필터를 기반으로합니다.

이 기사에서는 방법에 대해 자세히 설명합니다. 여기에서는 최선을 다해 요약하겠습니다.

블룸 필터는 고정 된 독립 해시 함수 세트의 결과를 저장하는 고정 길이의 일련의 비트로, 각각 동일한 입력 값에서 계산됩니다. 각 해시 함수의 출력은 필터에서 가능한 인덱스 중 인덱스 값이어야합니다. 즉, 인덱스가 0 인 일련의 10 비트가있는 경우 해시 함수는 0에서 9 사이의 값을 반환하거나 매핑해야합니다.

필터는 각 비트가 0으로 설정된 상태에서 시작합니다. 해시 함수 세트에서 각 함수로 입력 값을 해시 한 후 해시 함수가 리턴 한 인덱스 값에 해당하는 각 비트는 1로 설정됩니다. 하나의 해시 함수보다 해당 인덱스의 비트는 한 번만 설정됩니다. Bloom 필터를 고정 된 비트 범위에 대한 해시 세트의 중첩으로 간주 할 수 있습니다.

위에 링크 된 기사에 설명 된 프로토콜은 문자열을 n- 그램으로 나누는데,이 경우 문자 세트입니다. 예를 들어, "hello"다음 2 그램 세트를 산출 할 수 있습니다.

["_h", "he", "el", "ll", "lo", "o_"]

공백으로 앞뒤를 채우는 것은 일반적으로 n-gram을 만들 때 선택적인 것 같습니다. 이 방법을 제안하는 논문에 주어진 예는 그러한 패딩을 사용합니다.

각 n-gram을 해시하여 Bloom 필터를 생성 할 수 있으며,이 Bloom 필터 세트를 자체에 겹쳐서 (비트 OR 연산) 스트링에 대한 Bloom 필터를 생성 할 수 있습니다.

필터에 해시 함수 나 n- 그램보다 많은 비트가 포함되어 있으면 임의의 문자열이 비교적 동일한 필터를 생성 할 가능성이 상대적으로 낮습니다. 그러나 두 줄의 공통점이 더 많을수록 필터가 궁극적으로 더 많은 비트를 공유하게됩니다. 그런 다음 A, B주사위 계수를 사용 하여 두 필터를 비교할 수 있습니다 .

D A, B = 2 시간 / (a ​​+ b)

여기서 h필터 모두 1로 설정되는 비트의 수이며, a1로 설정된 비트의 개수 필터 A, 및 b1로 설정된 비트의 개수 스트링은 정확히 동일한 경우 필터 B., 주사위 계수는 1입니다. 차이가 클수록 계수가 더 가까워집니다 0.

해시 함수는 불확정 한 수의 고유 한 입력을 적은 수의 가능한 비트 인덱스에 매핑하기 때문에 다른 입력이 동일한 필터를 생성 할 수 있으므로 계수는 문자열이 동일하거나 유사 할 확률 만 나타냅니다 . 다른 해시 함수의 수와 필터의 비트 수는 오 탐지 가능성을 결정하는 데 중요한 매개 변수입니다.이 방법으로 생성 된 주사위 계수보다 훨씬 덜 유사한 입력 쌍입니다.

이 자습서 가 Bloom 필터를 이해하는 데 매우 유용한 것으로 나타났습니다 .

이 방법의 구현에는 약간의 유연성이 있습니다. 다른 방법과의 성능 및 다양한 매개 변수와 관련하여 얼마나 성능이 좋은지에 대한 내용은 이 2010 백서 (질문 끝에 링크 됨)를 참조하십시오 .


제안 된 접근 방식 중 가장 유망한 유스 케이스이므로 이것을 허용 된 답변으로 표시하십시오.
Air

이 모든 세부 사항과 배경에 감사드립니다. 이 접근법의 구현 (예 : Python)을 보셨습니까?
amball

@amball 나는하지 않았다.
Air

8

귀하의 질문을 읽는 동안 Levenshtein Distance가 귀하의 문제에 대한 훌륭한 해결책이 될 수 있음을 깨달았습니다. Levenshtein 솔루션이 어떻게 보이는지에 대해 설명해 드리겠습니다.

레 벤슈 테인 거리는 엔터티 확인을 위해 여러 산업에서 사용되며, 유용한 것은 두 시퀀스 간의 차이를 측정하는 것입니다. 문자열 비교의 경우 시퀀스 문자입니다.

이것은 다른 필드의 텍스트가 얼마나 비슷한 지 측정 할 수있는 하나의 숫자를 제공함으로써 문제를 해결하는 데 도움이 될 수 있습니다.

Levenshtein을 제공 한 데이터와 함께 사용하는 기본적인 방법의 예는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

이것은 괜찮은 해결책을 제공하고 거리는 8이며 관계를 나타냅니다. 그것은 매우 PII를 준수합니다. 그러나 여전히 유용하지는 않습니다. 이름의 첫 번째 이니셜과 중간에 무언가를 떨어 뜨릴 수있는 성만 취하기 위해 텍스트 마법을 사용하면 어떻게되는지 봅시다.

여기에 이미지 설명을 입력하십시오

보시다시피 Levenshtein 거리 0은 관계를 나타냅니다. 일반적으로 데이터 공급자는 이름과 성의 Levenshtein 순열을 1, 2 또는 모든 문자와 결합하여 데이터 내에서 익명 성을 유지하면서 엔터티가 어떻게 관련되어 있는지에 대한 차원을 제공합니다.


1
내가 링크 한 논문에 대해 관심이있는 것은 두 입력 문자열에 대한 지식 없이도 이런 종류의 계산을 수행하는 방법을 보여 준다는 것이다 . 논문에서 각 배우는 하나의 문자열에 대한 지식을 가지고 있으며 , 이것은 나의 목적에는 유용하지 않습니다. 문자열에 대한 지식없이 계산을 수행하려면 한 명의 액터가 필요 합니다. 미리 계산하는 것은 매우 작은 데이터 세트 또는 매우 제한된 제품에 대해서만 가능합니다. 내 데이터 세트에서 정수 거리의 전체 교차 곱은 ~ 10 PB의 스토리지를 사용합니다.
Air

그렇기 때문에 문자열 사이의 거리를 유지하기 때문에 대체 암호 (ROT13)에 대한 아이디어를 얻었습니다. 그러나 안전하지는 않으며 편집 거리를 유지하면서 문자열을 안전하게 암호화하는 것이 불가능할 수 있습니다. (잘못되고 싶어요!)
Air

맞습니다. 저는 특정 컷오프 아래에 레 벤슈 테인 만 포함하도록 행렬을 필터링하기 때문에 중첩 가능성이 높은 곳에서만 인구를 계산합니다. 또한 PII와 관련하여 데이터 집합의 서로 다른 엔터티 간 관계를 결정하기에 충분한 정보를 포함하면 고객의 익명 성을 유지할 가능성이 거의 없습니다. 데이터 익명화의 요점은 해당 PII 관련 규제 문제를 피할 수있게하는 것입니다 (표준은 항상 강화 될 수 있음). 따라서 개인적으로는 위험을 감수하지 않을 것입니다.
neone4373

7

가능한 경우 관련 레코드 (예 : Dave, David 등)를 연결하고 시퀀스 번호 (1,2,3 등) 또는 모든 관련 레코드를 나타내는 데 사용되는 문자열솔트 해시 ( 예를 들어, Dave 대신 David).

나는 제 3자가 실제 이름이 무엇인지 전혀 알 필요가 없다고 가정합니다. 그렇지 않으면 그들에게 줄 수도 있습니다.

편집 : 당신은 제 3자가 할 수있는 작업의 종류를 정의하고 정당화해야합니다. 예를 들어, Bank of America를 Benjamin Othello Ames와 명확히하기 위해 이니셜과 숫자 (예 : BOA-1, BOA-2 등)를 사용하면 어떤 문제가 있습니까? 그것이 너무 드러나면 글자 나 이름의 일부를 비울 수 있습니다. 예를 들어 [AE]-> 1, [FJ]-> 2 등입니다. 따라서 BOA는 10A가되거나 [ "은행", "배리", "Bruce"등]-> 1이므로 Bank of America는 다시 1OA.

자세한 내용은 k-anonymity를 참조하십시오 .


k-anonymity 참조와 빈 제안을 고맙게 생각하십시오.
Air

6

하나의 옵션 (데이터 세트 크기에 따라 다름)은 편집 거리 (또는 사용중인 다른 유사성 측정 값)를 추가 데이터 세트로 제공하는 것입니다.

예 :

  1. 데이터 세트에서 고유 한 이름 세트 생성
  2. 각 이름에 대해 서로 다른 이름까지의 편집 거리를 계산하십시오.
  3. 각 이름에 대해 ID 또는 돌이킬 수없는 해시 생성
  4. 원래 데이터 세트의 이름을이 ID로 바꿉니다.
  5. ID 번호 사이의 편집 거리 매트릭스를 새로운 데이터 세트로 제공

그럼에도 불구하고 이들의 데이터를 익명화하기 위해 할 수있는 일이 여전히 많이 있지만.

예를 들어, "Tim"이 소년에게 가장 인기있는 이름으로 알려진 경우, 인구 전체에서 알려진 Tim의 백분율과 거의 일치하는 ID의 빈도를 계산하면 그 사실을 알 수 있습니다. 그런 다음 편집 거리가 1 인 이름을 찾아 해당 ID가 "Tom"또는 "Jim"(다른 정보와 결합 된 경우)을 참조 할 수 있다고 결론을 내릴 수 있습니다.


5

확실하지는 않지만 지역에 민감한 해싱이 좋은 솔루션 일 수 있습니다. 입력 데이터 (귀하의 경우 이름)의 해시를 수행하므로 원래 문자열이 유지됩니다. 반면에 LSH의 주요 아이디어는 유사한 항목에 대한 해시 가능성을 최대화하는 것입니다. LSH 구현에는 여러 가지가 있습니다. 트윗 텍스트를 비교하기 위해 Nilsimsa-hash 를 시도했지만 꽤 잘 작동했습니다. 그러나 짧은 문자열 (이름)의 경우 얼마나 잘 작동하는지 잘 모르겠습니다.이 문제는 테스트가 필요합니다. 나는 당신의 예를 시도했으며 결과는 다음과 같습니다 (이름 A, 이름 B, "거리"-최대 120) :

1. AMELIA BEDELIA  - CHRISTOPH BAUER - 107
2. AMELIA BEDELIA  - C J BAUER       - 82
3. AMELIA BEDELIA  - FRANZ HELLER    - 91
4. CHRISTOPH BAUER - C J BAUER       - 81
5. CHRISTOPH BAUER - FRANZ HELLER    - 98
6. C J BAUER       - FRANZ HELLER    - 83

보시다시피 CHRISTOPH BAUER와 CJ BAUER가 가장 가까운 페어였습니다. 그러나 차이는 중요하지 않습니다. 그리고 예를 들어-이 이름의 해시 표현 :

AMELIA BEDELIA  6b208299602b5000c3005a048122a43a828020889042240005011c1880864502
CHRISTOPH BAUER 22226448000ab10102e2860b52062487ff0000928e0822ee106028016cc01237
C J BAUER       2282204100961060048050004400240006032400148000802000a80130402002
FRANZ HELLER    58002002400880080b49172044020008030002442631e004009195020ad01158

3

여기에 언급되지 않은 접근법이 있습니다. 프로세스를 두 단계로 분리하십시오. 첫 번째 단계는 이름을 인코딩하는 데 중점을 두어 동일한 이름의 대체 버전이 동일하게 (또는 거의 동일한) 인코딩되고 두 번째 단계는 작성에 중점을 둡니다. 그들 익명.

첫 번째 단계에서는 이름, 성 및 이니셜에 다양한 순서로 적용되는 발음 알고리즘 (Soundex 및 variant) 중 하나를 사용할 수 있습니다 . ( 이 기사 도 참조하십시오 ). 이 단계에서는 이름과의 유사점과 차이점을 해결하여 오탐과 오탐의 균형을 맞 춥니 다.

두 번째 단계에서는 해당 방법이 이름 일치에 어떤 영향을 미치는지 걱정하지 않고 원하는 해싱 또는 암호화 방법을 선택할 수 있습니다. 따라서 성능, 견고성 및 익명 성 모두에 대해 최상의 특성을 가진 방법을 자유롭게 사용할 수 있습니다.


나는이 제안이 문제에서 제시된 문제를 다루지 않는다고 생각합니다. 암호화 후 유연성은 어디에 있습니까? 원본 데이터에 액세스하지 않고 분석을 구체화하려면 어떻게합니까?
Air

@AirThomas 죄송 합니다만 두 가지 질문을 이해하지 못합니다. "유연성 사후 암호화"란 무엇을 의미합니까? 나는 당신의 질문 / 설명에서 그런 것을 보지 못했습니다. "원래 데이터에 액세스하지 않고 분석을 구체화"한다는 것은 무엇을 의미합니까? "정제"에 대해 아무것도 보지 못했습니다.
MrMeritology

1
동기 부여 섹션 의 두 번째 단락에서 문제를 식별하려고했습니다 . 예를 들어, 모델링을 수행하려는 다양한 연구원들에게 데이터 세트를 공개한다고 가정 해보십시오. 적용 할 수있는 많은 영리하고 효과적인 방법론이 있으며 각 연구원은 조금 다르게 작동합니다. 데이터 세트에서 개인의 이름을 공개 할 수 없습니다. 데이터를 공개하기 전에 분석의 해당 부분을 수행하면 모든 사용자에게 방법론을 선택해야합니다.
Air

이름의 해시를 추가로 제공하면 제 3자가 정확한 신원을 구분할 수 있지만 더 이상 이점이 없다는 이점이 있습니다. 문제는 릴리스 할 수없는 데이터에 대한 추가 정보를 어떻게 제공 할 수 있습니까? 예를 들어, 해싱 / 암호화 출력에서 ​​임의의 입력 사이의 편집 거리를 유지하는 방법이 있습니까? 적어도 그 기능에 근사한 적어도 하나의 방법을 찾았습니다 (자세한 내용은 내 자신의 답변 참조). 그게 더 명확 해지기를 바랍니다.
Air
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.