Universally unique identifier
バリアント1と2の両方について、標準では五つの”バージョン”が定義されており、各バージョンは特定のユースケースで他のバージョンよりも適 バージョンは、文字列表現のM
で示されます。
バージョン1のUuidは時刻とノードID(通常はMACアドレス)から生成され、バージョン2のUuidは識別子(通常はグループIDまたはユーザー ID)、時刻、およびノードIDから生成され、バージョン3および5は名前空間の識別子と名前をハッシュすることによって生成される確定的なUuidを生成する。; また、バージョン4のUuidは、ランダムまたは擬似乱数を使用して生成されます。
Nil UUIDEdit
特殊なケースである”nil”UUIDはUUID00000000-0000-0000-0000-000000000000
;つまり、すべてのビットがゼロに設定されています。
バージョン1(date-time and MAC address)Edit
バージョン1は、”ノード”(つまり、UUIDを生成するコンピュータ)の48ビットMACアドレスを60ビットのタイムスタンプで連結し、グレゴリオ暦が最初に採用された日付である1582年協定世界時(UTC)10月15日深夜以降の100ナノ秒間隔の数である。 RFC4122では、使用されているアルゴリズムに応じて、時間値が3400ADの周りにロールオーバーすると述べています。3これは、60ビットのタイムスタンプが符号付き数量であることを意味します。 ただし、libuuidライブラリなどの一部のソフトウェアでは、タイムスタンプを符号なしとして扱い、ロールオーバー時間を5236ADに設定します。 ITU-T Rec.によって定義されたロールオーバー時間。 X.667は3603ADです。:v
13ビットまたは14ビットの”一意化”クロックシーケンスは、プロセッサクロックが十分に速く進まない場合や、ノードごとに複数のプロセッサとUUIDジェネレータがある場合を処理するために、タイムスタンプを拡張します。 Uuidがシステムクロックよりも速く生成される場合、uuidが生成されるたびにタイムスタンプフィールドの下位ビットをインクリメントすることで、高解像のタイムスタンプをシミュレートすることができる。 各バージョン1のUUIDが空間内の1つのポイント(ノード)と時間(間隔とクロックシーケンス)に対応すると、適切に生成された2つのバージョン1のUuidが意図せずに同じになる可能性は事実上ゼロです。 時間とクロックシーケンスは合計74ビットなので、274(1.8×1022、または18sextillion)バージョン-1Uuidは、ノードIDごとに最大平均速度163億/秒で、ノードIDごとに生成することができます。
他のUUIDバージョンとは対照的に、ネットワークカードからのMACアドレスに基づくバージョン1および-2Uuidは、中央登録機関によって発行された識別子、すなわちIEEEによってネットワーク機器の製造業者に発行されるMACアドレスのOui(Organizationally Unique Identifier)部分に部分的に一意性に依存している。 ネットワークカードのMACアドレスに基づくバージョン1およびバージョン2のUuidの一意性は、ネットワークカードの製造元が固有のMACアドレスをカードに適切
ノードIDのためのノードのネットワークカードMACアドレスの使用法はバージョン1UUIDがそれを作成したコンピュータに戻って追跡することができることを 文書は、ワープロソフトウェアによって埋め込まれたUuidを介して作成または編集されたコンピュータにトレースされることがあります。 このプライバシーホールはメリッサウイルスの作成者を特定するときに使用されました。RFC4122では、バージョン1(または2)のUUIDのMACアドレスを、ノードにMACアドレスがないか、公開することが望ましくないため、ランダムな48ビットノードIDに置 その場合、RFCでは、ノードIDの最初のオクテットの最下位ビットを1に設定する必要があります。 これはMACアドレスのマルチキャストビットに対応しており、これを設定することで、通常ユニキャストMACアドレスを持つネットワークカードからのMACアドレスに基づいてノードIDがランダムにUuidから生成されるUuidを区別する役割を果たします。RFC4122では、バージョン2の「DCEセキュリティ」Uuidが予約されていますが、詳細は提供されていません。 このため、多くのUUID実装ではバージョン2が省略されています。 ただし、バージョン2のUuidの仕様は、DCE1.1Authentication and Security Services仕様によって提供されています。
バージョン2のUuidはバージョン1に似ていますが、クロックシーケンスの最下位8ビットが”ローカルドメイン”番号に置き換えられ、タイムスタンプの最下位32ビットが指定されたローカルドメイン内で意味のある整数識別子に置き換えられる点が異なります。 POSIXシステムでは、ローカルドメイン番号0と1はそれぞれユーザー id(Uid)とグループid(Gid)用であり、他のローカルドメイン番号はサイト定義です。 POSIX以外のシステムでは、すべてのローカルドメイン番号はサイト定義されています。
UUIDに40ビットのドメイン/識別子を含める機能にはトレードオフがあります。 一方で、40ビットは、ノードIDごとに約1兆ドメイン/識別子値を許可します。 一方、クロック値が28の最上位ビットに切り捨てられた場合、バージョン1の60ビットと比較して、バージョン2のuuidのクロックは、バージョン1の100ナノ秒ごとではなく、429.49秒ごとに7分を少し超えるだけで”ティック”されます。 また、バージョン1の14ビットと比較して、6ビットのクロックシーケンスでは、ノード/ドメイン/識別子あたり64個の一意のUuidのみが7分のクロックティックごとに生成でき、バージョン1の16,384個のクロックシーケンス値と比較して生成できます。 したがって、バージョン2は、ノード/ドメイン/識別子ごとに、約7秒ごとに1を超える速度でUuidが必要な場合には適していない可能性があります。
バージョン3および5(名前空間名ベース)Edit
バージョン3およびバージョン5Uuidは、名前空間識別子と名前をハッシュすることによって生成されます。 バージョン3ではハッシュアルゴリズムとしてMD5を使用し、バージョン5ではSHA-1を使用します。
名前空間識別子自体はUUIDです。 この仕様では、Url、完全修飾ドメイン名、オブジェクト識別子、およびX.500識別名の名前空間を表すUuidが提供されていますが、任意のUUIDを名前空間指
指定された名前空間と名前に対応するバージョン3のUUIDを決定するために、名前空間のUUIDはバイト文字列に変換され、入力名と連結され、MD5でハッ その後、6ビットまたは7ビットは固定値、4ビットバージョン(例えば、 バージョン3の場合は00112)、および2ビットまたは3ビットのUUID”variant”(例えば、RFC4122Uuidを示す102、またはレガシー Microsoft GUIDを示す1102)。 したがって、6ビットまたは7ビットが予め決定されているので、121ビットまたは122ビットのみがUUIDの一意性に寄与する。バージョン5のUuidは似ていますが、MD5の代わりにSHA-1が使用されます。 SHA-1は160ビットのダイジェストを生成するため、ダイジェストはバージョンビットとバリアントビットが置き換えられる前に128ビットに切りバージョン3とバージョン5のUuidは、同じ名前空間と名前が同じUUIDにマップされるというプロパティを持っています。 ただし、名前空間も名前も、いずれかが指定されていても、ブルートフォース検索を除いて、UUIDから決定することはできません。 RFC4122では、バージョン3(MD5)よりもバージョン5(SHA-1)を推奨しており、いずれかのバージョンのUuidをセキュリティ資格情報として使用することを警告しています。
バージョン4(ランダム)Edit
バージョン4のUUIDがランダムに生成されます。 他のUuidと同様に、バージョン4を示すために4ビットが使用され、バリアントを示すために2または3ビットが使用されます(それぞれバリアント1およ したがって、バリアント1(つまり、ほとんどのUuid)のランダムバージョン4UUIDは6つの所定のバリアントとバージョンビットを持ち、ランダムに生成された部分には122ビット、合計2122、または5.3×1036(5.3億undecillion)の可能なバージョン4バリアント1Uuidを残す。 利用可能なランダムビットが1つ少なく、バリアントで3ビットが消費されるため、可能なバージョン4バリアント2Uuid(レガシー Guid)の半分があります。
Leave a Reply