5.5. UUID Version 5
5.5. UUID Version 5
UUIDv5 は、セクション 6.5 に従って、いくつかの「名前空間」から引き出され、その名前空間内で一意である「名前」から UUID を生成するためのものです。
UUIDv5 値は、指定された名前空間 ID 値 (セクション 6.6) と希望する名前値を連結したものに対して SHA-1 ハッシュ [FIPS180-4] を計算することによって作成されます。両方がその名前空間の標準または規則によって定義された正規のオクテットシーケンスに変換され、ネットワークバイト順で表されます。次に、SHA-1 値の最上位の左側の 128 ビットが UUID レイアウトのすべての 128 ビットを埋めるために使用され、SHA-1 出力の残りの 32 の最下位の右側のビットは破棄されます。次に、UUID バージョンとバリアントがセクション 4.2 および 4.1 で定義されているように、それぞれのビットを置き換えます。このビット置換と余分なビットの破棄の例は、付録 A.4 にあります。
指定された名前空間内で希望する名前の正規形式を選択することに関する情報は、セクション 6.5 の「名前に関する注意」という見出しの下にあります。
通常、組織のセキュリティポリシーに応じて、SHA-1 ライブラリが利用できない、または使用が安全でないと見なされる可能性があるシナリオがあります。そのため、SHA-256 または新しい SHA メソッドから派生した名前ベースの UUID を生成することが望ましい場合があります。これらの名前ベースの UUID は UUIDv5 を利用してはならず、セクション 5.8 で定義されている UUIDv8 スペース内にある必要があります。SHA-256 名前ベースの UUID 用の UUIDv8 の説明例は、付録 B.2 に記載されています。
SHA-1 セキュリティに関する考慮事項の詳細については、[RFC6194] を参照してください。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sha1_high |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sha1_high | ver | sha1_mid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var| sha1_low |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sha1_low |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
図 9: UUIDv5 フィールドとビットレイアウト
フィールド定義:
sha1_high: レイアウトの最初の 48 ビットは、計算された SHA-1 値から最上位の左側の 48 ビットで埋められます。ビット 0 から 47 (オクテット 0-5) を占有します。
ver: セクション 4.2 で定義されている 4 ビットのバージョンフィールドで、0b0101 (5) に設定されます。オクテット 6 のビット 48 から 51 を占有します。
sha1_mid: レイアウトのさらに 12 ビットで、計算された SHA-1 値から sha1_high の直後の 16 ビットの最下位の右側の 12 ビットで構成されます。ビット 52 から 63 (オクテット 6-7) を占有します。
var: セクション 4.1 で定義されている 2 ビットのバリアントフィールドで、0b10 に設定されます。オクテット 8 のビット 64 と 65 を占有します。
sha1_low: var フィールドの直後のレイアウトの最後の 62 ビットで、残りの SHA-1 ハッシュの最上位の左側の 2 ビットをスキップし、次の 62 の最上位の左側のビットを使用して埋められます。残りの SHA-1 ビットは破棄され、使用されません。ビット 66 から 127 (オクテット 8-15) を占有します。