UUID v1とは?
UUIDバージョン1 はRFC 4122に基づく時間ベースの128ビット識別子(36文字の文字列)です。以下を組み合わせています:
- Timestamp: 60ビット値(1582-10-15以降の100ナノ秒単位の精度)
- クロックシーケンス: クロック調整用の14ビットカウンター
- ノードID: 48ビット値(通常はMACアドレス)
フォーマット例: 2ed6657d-e927-11eb-9a03-0242ac130003
UUID v1の動作方法
- 現在のタイムスタンプを計算(1582-10-15以降の100ナノ秒間隔)
- 14ビットのクロックシーケンスを取得/インクリメント(クロックが戻った場合の一意性のため)
- 48ビットのノードIDを取得(通常はMACアドレスから)
- バージョンビット(0001)とバリアントビット(10)を設定
- 8-4-4-4-12形式のハイフン付き32桁の16進数として組み立てる
利点と考慮点
Advantages | Considerations |
---|---|
|
|
UUID v1の構造
Bits | Content |
---|---|
0-31 | タイムスタンプの下位32ビット |
32-47 | タイムスタンプの中間16ビット |
48-59 | タイムスタンプの上位12ビット |
60-63 | バージョン(v1の場合は0001) |
64-65 | バリアント(RFC4122の場合は10) |
66-79 | クロックシーケンス(14ビット) |
80-127 | ノードID(48ビット) |
UUID v1と他のバージョンの比較
Version | に基づく | ユースケース | Privacy |
---|---|---|---|
UUID v1 | 時間 + MAC | 時系列順ID | ⚠️ MACを公開する |
UUID v3 | 名前空間 + MD5 | 決定的ID | ✅ プライベート |
UUID v4 | Random | 安全なランダムID | ✅ プライベート |
UUID v5 | 名前空間 + SHA-1 | 決定的ID | ✅ プライベート |
UUID v6 | 時間(再配置) | ソート可能ID | ⚠️ MACを公開する |
UUID v7 | 時間 + ランダム | ソート可能ID | ✅ プライベート |
一般的な使用例
- データベースキー: 分散データベース
- 監査ログ: 時系列追跡
- トランザクションID: ビジネスプロセス
- セッショントラッキング: Webアプリケーション
- コンテンツアドレッシング: CMSシステム
- IoTメッセージ: デバイス通信
よくある質問
UUID v1は暗号的に安全ですか?
いいえ。UUID v1はタイムスタンプとMACアドレスが知られている場合、予測可能です。セキュリティのためにはランダムなUUID v4を使用してください。
UUID v1の値が衝突することはありますか?
タイムスタンプの精度、クロックシーケンスカウンター、ノード識別子により、実際には衝突は非常に起こりにくいです。
UUID v1から作成時間を抽出できますか?
はい。タイムスタンプの部分は、ほとんどのUUIDライブラリで利用可能な適切なアルゴリズムで抽出できます。
UUID v1は作成時間でソート可能ですか?
はい、ただし特別なソート関数が必要です。時間ビットが連続していないため、直接の文字列比較は機能しません。
UUID v1は私のMACアドレスを公開しますか?
デフォルトでは公開します。ほとんどの実装はノードIDにMACアドレスを使用します。プライバシー重視の実装ではランダムなノードIDを使用する場合があります。