日付は、広く使用されているデータの種類です。日付がセンシティブ データや個人情報(PII)とみなされる場合は、一般化または難読化するか、削除する必要があります。
これを行うための 1 つの方法が一般化またはバケット化です。ただし、使用方法や構成によっては、バケット化によって日付から有用性が失われる場合があります。たとえば、すべての日付を 1 年に一般化すると、その年に発生したイベントの順序が失われます。日付を難読化してこの問題に対処する別の方法が日付シフトです。
日付シフト手法では、日付のセットがランダムにシフトされますが、期間の順序と持続時間は保持されます。通常、日付シフトは、個人またはエンティティのコンテキストで使用されます。つまり、各個人の日付は、その個人に固有の時間だけシフトされます。
日付シフトの例
次のようなデータがあるとします。
| user_id | date | action |
|---|---|---|
| 1 | 2009-06-09 | run |
| 1 | 2009-06-03 | walk |
| 1 | 2009-05-23 | crawl |
| 2 | 2010-11-03 | crawl |
| 2 | 2010-11-22 | walk |
| … | … | … |
この日付を年に一般化すると、次のようになります。
| user_id | date_year | action |
|---|---|---|
| 1 | 2009 | run |
| 1 | 2009 | walk |
| 1 | 2009 | crawl |
| 2 | 2010 | crawl |
| 2 | 2010 | walk |
| … | … | … |
しかし、これではユーザーごとの順序がわからなくなります。
代わりに、日付を変更してみましょう。
| user_id | date | action |
|---|---|---|
| 1 | 2009-07-17 | run |
| 1 | 2009-07-11 | walk |
| 1 | 2009-06-30 | crawl |
| 2 | 2011-01-26 | crawl |
| 2 | 2011-02-14 | walk |
| … | … | … |
日付は変わりましたが、順序と持続時間は保持されていることに注目してください。日付がシフトされた量は user_id 1 と 2 で異なります。
Sensitive Data Protection での日付のシフト
Sensitive Data Protection の content.deidentify メソッド用に構成する JSON オブジェクトは、次のとおりです。
deidentify_config {
record_transformations {
field_transformations {
fields {
name: "date"
}
primitive_transformation {
date_shift_config {
upper_bound_days: 100
lower_bound_days: -100
entity_field_id {
name: "user_id"
}
crypto_key {
unwrapped {
key: "123456789012345678901234567890ab"
}
}
}
}
}
}
}
シフトの上限と下限はそれぞれ upper_bound_days と lower_bound_days の値で指定されます。このシフトが適用されるコンテキストまたはスコープは、entity_id_field の値(この場合は "user_id")に基づきます。
crypto_key が使用されていることにも注意してください。これは、仮名化での使用方法に似ています。このキーを使用すると、これらの日付シフトの整合性を複数のリクエストまたはデータ実行間で保つことができます
関連情報
機密データの保護で日付シフトとその他のメソッドを使用してデータを匿名化する方法の詳細については、以下をご覧ください。
機密データの保護のプリミティブ変換に関する API リファレンス情報については、以下をご覧ください。
DeidentifyConfigオブジェクト: 匿名化オプションを構成するオブジェクト。PrimitiveTransformationsオブジェクト: 日付シフトは機密データの保護の「プリミティブ変換」です。DateShiftConfigオブジェクト:PrimitiveTransformationsオブジェクトを構成するオブジェクト。DateShiftConfigオブジェクトを指定することで、日付をランダムな日数だけシフトできます。