UUID v3 とは
UUID v3 は名前空間と名前を連結したものを MD5 でハッシュし、先頭 128 ビットを取って所定の位置にバージョン 3 を書き込みます。MD5 は決定的なので保存は不要で、いつでも計算し直せます。
RFC 9562 は互換性のために v3 を残していますが、MD5 は衝突耐性が破られているため新しい設計には勧めていません。選べるなら v5 を使ってください。
使い方
- 名前空間を選びます。DNS、URL、OID、X.500。
- ハッシュする名前を入力します。例: ドメイン名。
- 生成を押します。同じ入力からは常に同じ UUID が得られます。
用途
- ドメイン名やアカウント名から固定の識別子を導出する。
- テスト用に安定したサンプル値を生成する。
- すでに UUID v3 を保存しているシステムとの互換。
UUID v3 の位置づけ
| 選択肢 | 使う場面 |
|---|---|
v3 | MD5。互換性が必要なときだけ |
v5 | 同じ仕組みで SHA-1 を使う。こちらを推奨 |
v4 | 乱数で、名前から導出しません |
UUID の各バージョン早見表
| バージョン | 並べ替え可能 | 基になる情報 | 向いている用途 |
|---|---|---|---|
| v1 | 不可 | タイムスタンプ + MAC アドレス | v1 に依存したままの既存システム |
| v3 | 不可 | 名前の MD5 ハッシュ | MD5 を使わざるを得ない場面の決定的な識別子 |
| v4 | 不可 | 122 ビットの乱数 | 一般的な識別子のほとんど |
| v5 | 不可 | 名前の SHA-1 ハッシュ | 同じ名前から常に同じ識別子を得たいとき |
| v6 | 可 | 並べ替えたタイムスタンプ | 乱数性を保ったまま並べ替えたいとき |
| v7 | 可 | ミリ秒精度の Unix 時刻 | データベースの主キーやイベント識別子 |
| v8 | 不可 | 独自のビット配置 | 独自形式や実験的な用途 |
7 つのバージョンはいずれも 128 ビットで、同じ 8-4-4-4-12 の形式で表記します。違うのはビットの意味だけです。
よくある質問
なぜ v3 より v5 がよいのですか?
MD5 には衝突が発見されており、SHA-1 も古いものの衝突耐性ははるかに高いためです。どちらも決定的なので、互換性の制約がないなら v5 のほうが安全な選択です。
UUID v3 から元の名前を取り出せますか?
ハッシュを逆算する意味では取り出せません。ただし名前が推測しやすいものであれば、総当たりで見つけられる可能性があります。そのため v3 を秘密情報の隠蔽に使わないでください。
v3 はパスワード再設定用のトークン生成に使えますか?
使えません。再設定トークンには予測できない乱数が必要です。名前から導出する識別子ではなく、暗号学的乱数を使ってください。