晴耕雨読

working in the fields on fine days and reading books on rainy days

UUID (GUID) とは

GUIDとUUIDはどちらも一意な識別子を生成する方法ですが、 GUIDはMicrosoft社が定義・実装したもので、 UUIDはRFC4122で定義されているものです 1。 基本的にはどちらも同じですが、厳密には若干仕様に違いがあります。

GUIDとUUIDの違い

GUIDとUUIDの主な違いは、以下のものがあります 2

  1. GUIDは全ての桁が任意の16進数であるのに対して、 UUIDはバージョンとバリアントフィールドは指定されたビットを入れないといけない
  2. GUIDは出力が全て大文字でなければならない (MUST) に対して、 UUIDは出力は小文字にすべきで、入力は大文字小文字の両方を受け付けるべき (SHOULD)

UUID

UUIDの形式は「8-4-4-4-12桁」の次のような構成をしています。Xには16進数(0~9, A~F)が入ります。ハイフンを含めて合計32文字です。

{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} (X = 0, …, 9, A, …, F)

UUIDには5つのバージョンがあり、3つ目のグループの最上位桁で表現します(例えばバージョン4のときは、{XXXXXXXX-XXXX-4XXX-XXXX-XXXXXXXXXXXX})。

  • UUIDバージョン1では、UUIDを生成するコンピュータのMACアドレスとナノ秒単位の時刻を使って計算します。 このため、UUIDが作られたPCとその時刻がばれてしまいます。
  • UUIDバージョン2では、ローカルのPOSIXのユーザID(UID)を計算に利用するようになりました。
  • UUIDバージョン3では、URL、完全修飾ドメイン名(FQDN)、オブジェクト識別子(OIDs)、その他データから、MD5を使って導出します。 しかし現在MD5は暗号理論的に破られているため、非推奨となっています。
  • UUIDバージョン4では、疑似乱数を用いてUUIDを生成します。
  • UUIDバージョン5は、バージョン3のハッシュ関数MD5をSHA-1に変更しただけで、他の部分は同じです。

UUIDの値が重複する確率は、毎秒1億個のUUIDを生成することを100年間繰り返して、ようやく50%の確率で衝突するといわれています。 ただし、この理論はUUIDが正しく生成されていることが前提で、実装に不備などがあるとこの通りにはなりません。