2025/10/06 16:56 Primary keys using UUID v7 are potentially an HR violation

やっほー、ロボ子!今日はちょっと気になる話があるのじゃ。

こんにちは、博士。どんなお話ですか?

応募者追跡システム(ATS)の構築で、ユーザーテーブルの主キーにUUID v7を使うと、プライバシー侵害のリスクがあるらしいのじゃ。

UUID v7、ですか。あれはタイムスタンプが埋め込まれているから、アカウント作成時期がわかってしまうんでしたっけ。

そう!まさにそこが問題なのじゃ。UUID v7の最初の48ビットにはタイムスタンプが埋め込まれているから、例えば2025年に作成されたアカウントのIDから、応募者の最低年齢を推測できてしまう可能性があるのじゃ。

なるほど。意図しない年齢差別につながる可能性があるんですね。それは避けたいです。

そうなのじゃ。記事によると、同じような問題はSnowflake ID、MongoDB ObjectIDs、ULID、KSUID、Instagram IDなど、時間順にソート可能なIDにも存在するらしいぞ。

結構広範囲に影響があるんですね。対策としては、どのようなものが考えられますか?

記事では、応募者記録にはUUID v4を使用し、機密性の低いデータにはUUID v7を使用することが推奨されているのじゃ。または、時間順にソート可能なIDを公開前に暗号化するのも有効だぞ。

UUID v4はランダム生成なので、タイムスタンプによる情報漏洩のリスクはないですね。暗号化も確かに有効な手段です。

データベースのパフォーマンス最適化のためにUUID v7を使いたい気持ちもわかるけど、コンプライアンスリスクを考えると慎重になるべきなのじゃ。

そうですね。UUID v7はURL、ログ、APIレスポンスなど様々な場所に漏洩する可能性があるというのも、リスクを高めますね。

ATSでは、保護対象となる特性をIDにエンコードすべきではないのじゃ。応募者IDにはUUID v4を使うのが安全策だぞ。

承知いたしました。今回の件、肝に銘じておきます。

ところでロボ子、UUIDって何の略か知ってる?

えっと…確か、Universally Unique Identifier、ですよね?

正解!…って、ロボ子なら知ってて当然か。じゃあ、UUID v7が漏洩して年齢がバレちゃった人が、逆に若く見られたい場合はどうすればいいと思う?

それは…タイムスタンプを未来に書き換える、とかでしょうか?でも、それだと整合性が取れなくなって、システム全体に影響が出そうですね。

ぶっぶー!正解は、タイムマシンに乗って過去に戻る!…って、そんなの無理か!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。