แรงจูงใจ
ฉันทำงานกับชุดข้อมูลที่มีข้อมูลส่วนบุคคล (PII) และบางครั้งจำเป็นต้องแบ่งปันส่วนหนึ่งของชุดข้อมูลกับบุคคลที่สามในลักษณะที่ไม่เปิดเผยข้อมูล PII และบังคับให้นายจ้างรับผิดชอบ วิธีการตามปกติของเราที่นี่คือการระงับข้อมูลทั้งหมดหรือในบางกรณีเพื่อลดความละเอียด เช่นการแทนที่ที่อยู่ถนนที่แน่นอนด้วยเคาน์ตีหรือระบบการสำรวจสำมะโนประชากรที่เกี่ยวข้อง
ซึ่งหมายความว่าต้องทำการวิเคราะห์และประมวลผลบางประเภทภายใน บริษัท แม้ว่าบุคคลที่สามจะมีทรัพยากรและความเชี่ยวชาญที่เหมาะสมกับงานมากกว่า เนื่องจากไม่มีการเปิดเผยข้อมูลต้นฉบับวิธีที่เราดำเนินการเกี่ยวกับการวิเคราะห์และการประมวลผลนี้จึงไม่มีความโปร่งใส ดังนั้นความสามารถของบุคคลที่สามในการดำเนินการ QA / QC ปรับพารามิเตอร์หรือทำการปรับแต่งอาจมีข้อ จำกัด มาก
การเปิดเผยข้อมูลที่เป็นความลับ
งานหนึ่งเกี่ยวข้องกับการระบุบุคคลตามชื่อของพวกเขาในข้อมูลที่ผู้ใช้ส่งในขณะที่คำนึงถึงข้อผิดพลาดของบัญชีและความไม่สอดคล้องกัน บุคคลที่เป็นส่วนตัวอาจถูกบันทึกไว้ในที่เดียวว่า "เดฟ" และที่อื่น ๆ ในฐานะ "เดวิด" หน่วยงานการค้าสามารถมีตัวย่อต่าง ๆ ได้มากมาย ฉันได้พัฒนาสคริปต์ตามเกณฑ์จำนวนหนึ่งที่กำหนดว่าเมื่อใดที่ระเบียนสองรายการที่มีชื่อไม่เหมือนกันแสดงถึงบุคคลเดียวกันและกำหนดรหัสทั่วไปให้กับพวกเขา
ณ จุดนี้เราสามารถทำให้ชุดข้อมูลไม่ระบุชื่อโดยระงับชื่อและแทนที่ด้วยหมายเลข ID ส่วนบุคคลนี้ แต่นี่หมายความว่าผู้รับแทบจะไม่มีข้อมูลเกี่ยวกับเช่นความแข็งแกร่งของการแข่งขัน เราต้องการที่จะสามารถส่งผ่านข้อมูลให้ได้มากที่สุดโดยไม่เปิดเผยตัวตน
อะไรไม่ทำงาน
ตัวอย่างเช่นมันจะดีมากที่จะสามารถเข้ารหัสสตริงในขณะที่รักษาระยะแก้ไข ด้วยวิธีนี้บุคคลที่สามสามารถทำ 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 (เช่นระยะห่างระหว่างการจับคู่)
ข้อสรุป
เป้าหมายคือการแปลงสตริงในลักษณะที่คุณสมบัติที่มีประโยชน์มากมายของสตริงต้นฉบับจะถูกเก็บรักษาไว้ให้มากที่สุดเท่าที่จะเป็นไปได้ในขณะที่บดบังสตริงเดิม การถอดรหัสควรเป็นไปไม่ได้หรือทำไม่ได้ดังนั้นจะเป็นไปไม่ได้อย่างมีประสิทธิภาพไม่ว่าขนาดของชุดข้อมูลจะเป็นเท่าใดก็ตาม โดยเฉพาะอย่างยิ่งวิธีการที่รักษาระยะห่างการแก้ไขระหว่างสตริงโดยพลการจะมีประโยชน์มาก
ฉันพบเอกสารสองฉบับที่อาจมีความเกี่ยวข้อง แต่หัวของฉันก็เล็กน้อย: