拡張機能研究所

おすすめのブラウザ拡張機能をマンガ形式で紹介!

2025/09/19 17:00

「UUIDv7はデータベース用、外にはUUIDv4風を使う」って話。UUIDv47のちょっと面白いアイデア

データベースではソートしやすいUUIDv7を使いつつ、外向けにはランダムっぽいUUIDv4風を出す、UUIDv47の仕組みをざっくり解説。 性能もセキュリティも考えられてて、知ってると地味に役立つかも?
「UUIDv7はデータベース用、外にはUUIDv4風を使う」って話。UUIDv47のちょっと面白いアイデア

なんとなくUUIDって聞くと「全部ただのランダムな識別子」みたいに思ってたんだけど、実は違うんだなーって最近知ったんだよね💡

しかも、データベースのなかで使うUUIDと外に出すUUIDをわざわざ変えちゃう仕組みがあるって話を見つけて、ちょっとびっくり😳✨

UUIDv7とUUIDv4って何が違うの?

ざっくり言うと、

  • UUIDv7は「タイムスタンプ+ランダム」の組み合わせで、時間順に並べられるからデータベースの検索に便利
  • UUIDv4は完全にランダムなUUIDで、時間の情報は隠れてる感じ

だから普通は、データベースの中でも外でもどっちかを使うんだけど…

そこで登場!UUIDv47のアイデア

この人(作者さん)が考えたのは、データベース内ではちゃんと時系列でソートできるUUIDv7を使いつつ、外には「見た目はUUIDv4」だけど、内部のタイムスタンプは隠したものを出す方法なんだって💭

つまり、「外に見せるUUIDは時間の順番バレないようにマスクしてる」ってこと✨

使ってる魔法みたいなものは「SipHash(シップハッシュ)」という暗号関数を使ってて、
48ビットのタイムスタンプ部分をキー付きのSipHashでXORマスクすることで変身させてるんだって🧠🔧

これのおかげで、時間情報を隠しつつも、元に戻すのは超カンタンってわけ!

セキュリティとかパフォーマンスはどう?

SipHashって速いし秘密鍵がないとタイムスタンプは読み取れないから、
外に出すUUIDからタイミングパターンはバレにくいし、鍵が漏れなきゃ安全らしいよ👍

しかも処理はめちゃ軽いみたいで、実際にAppleのM1チップで計測したら、
encode+decodeで33ナノ秒くらいしかかからないっていう速さ。秒間3000万回以上の処理がサクッとできる感じ🥺🌸

まとめると…

  • データベースには時間順に並べられるUUIDv7をガッチリ使う
  • 外には見た目はランダムなUUIDv4をマスクしたものを出すから、時間情報バレない
  • SipHashという暗号処理で安全かつ高速に変換できる
  • 鍵は1つあればいいし、性能の負担もほぼゼロ

これって、「データベースの効率」と「外部に時間情報をリークしない工夫」のいいとこ取りみたいな感じで、なかなか賢いなあと思ったよ💭✨

なんかUUIDの世界も奥が深いなーって気づいたお話でした🥰💬

ひとことアニメーション表示ON
うわっ!こんな仕組みあるんだね😳✨

コメント

アバター

クリス

これは一対一の関数で、created_atを隠す必要があるかはわからないけど、それにはいい方法だと思います。 UUIDv7をDBに保存してホットパーティションを避けたい時にも使えるけど、単純にUUIDを逆にするだけでもいいかもね。

アバター

エイダン

これ好き! 否定的な意見も多いけど、こういうのは確実に役立つよ。 自分も似たように連番を難読化して8文字の英数字に変換する方法を考えたことがあるから共感できる。

アバター

ロバート

最初は半信半疑だったけど、読んでみて結構いいアイデアだと思った。 大規模システムでの実用性はわからないけどね。

アバター

グレース

実は大手も似たようなことやってるよ。 Googleみたいに見えるIDは本物じゃなくて外部用の偽IDだったりする。

アバター

ハンナ

じゃあミドルウェアでDBから出る全てのキーを変換し直す必要があるってこと? だったら素直にIDカラム使って、こういうの(https://sqids.org)で難読化したほうが楽かも。

アバター

キンバリー

こんな方法より、UUIDv4を別カラムで保存した方がいいのはどんな時? 作成時間がわかれば鍵を逆算できたりするのかな?

アバター

リリー

攻撃者がシステムにuuidv7の新規作成をさせられるなら鍵のほとんどを抜き取るのは簡単で、全部抜くのも可能っぽい。 面白いトリックだけど、性能アップが意味あるかもわからないし、セキュリティ向上も怪しい。

アバター

ロバート

すごくいいね。 UUIDv7が見えるとユーザーの取引時間がバレて追跡されるから、銀行取引とかなら他の出来事と紐づけられるリスクがあるよ。

アバター

サム

なんでスラッグの方がダメなの?

アバター

ベン

UUIDv7を公開するときはどんな点に気をつけるべき? 批判じゃなくて、使いどころを知りたいんだ。

アバター

ノーラン

DBインデックス最適化としては面白いけど、SipHash使ってるのがちょっと怖い。 暗号学的に安全とは言われてないからね。

アバター

ミア

このプロトコルはPRFに衝突耐性を求めてなくて、PRFはUUIDv4の下位ビットから作られてXORは高位ビットにだけかかる。 だからSipHashに衝突があっても変換自体は壊れないってのは良い点。

アバター

リリー

ただ、SipHashの事前画像耐性(逆算の難しさ)はわからない。 サーバーに特定時間のUUID作らせて推測し、正しい鍵を探せるかもしれない。

アバター

グレース

この話題で見つけた一番良い議論はここ(https://crypto.stackexchange.com/questions/17996/is-siphash-cryptographically-secure)だけど、これを見るとこの構成は弱いかもと思う。

アバター

クリス

セキュリティ面はわかるけど、自分ならわざわざこれを選ばずにクライアント用には別のユニークIDを作るかな。 鍵管理も面倒だし。

アバター

ワット

良いプロジェクトだけど、自分には合わないかな。

アバター

リリー

暗号化や鍵付きハッシュで公開IDを作るのは問題がある。 鍵を全サーバーで共有しなきゃいけないし、鍵が漏れたら使ったデータのセキュリティは永久に失われる。 再暗号化もできないしね。

アバター

レオ

パフォーマンスはほぼ影響なしと言われてるけど、ベンチマーク比較は見たいね。


PICKUP
関連記事