Life as Kamino Rui

MtFの私「神野留衣」と、私の現実世界での姿「僕」の二人の日常生活

RFC4122 日本語訳

RFC4122 日本語訳(非公式)
公式英語版: http://tools.ietf.org/html/rfc4122
[]内は巻末の注釈を示す。
(#)は訳注を表す。
未完成

汎用一意識別子(UUID)

Status of This Memo

(省略)

Copyright Notice

Copyright (C) The Internet Society (2005).

概要

この仕様は,GUID(Globally Unique IDentifier)としても知られる、UUIDのURN名前空間として定義されます。UUIDは128ビットの大きさをもち、空間及び時間において一意であることを保証することができます。
UUIDは元々、Apollo Network Computing Systemで使われており、その後はthe Open Software Foundation's(OSF) Distributed Computing Environment(DCE)で、 そして現在ではMicrosoft Windowsプラットフォームでも使われています。
この仕様はThe Open Groupとして知られているOSFの許諾のもと、DCEの仕様から得られたものです。DCEの仕様の初期のバージョンから得られた情報は、この文書の一部となっています。

目次

1. はじめに . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Namespace Registration Template . . . . . . . . . . . . . . . 3
4. Specification . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1. Format. . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1.1. Variant. . . . . . . . . . . . . . . . . . . . . . 6
4.1.2. Layout and Byte Order. . . . . . . . . . . . . . . 6
4.1.3. Version. . . . . . . . . . . . . . . . . . . . . . 7
4.1.4. Timestamp. . . . . . . . . . . . . . . . . . . . . 8
4.1.5. Clock Sequence . . . . . . . . . . . . . . . . . . 8
4.1.6. Node . . . . . . . . . . . . . . . . . . . . . . . 9
4.1.7. Nil UUID . . . . . . . . . . . . . . . . . . . . . 9
4.2. Algorithms for Creating a Time-Based UUID . . . . . . . . 9
4.2.1. Basic Algorithm. . . . . . . . . . . . . . . . . . 10
4.2.2. Generation Details . . . . . . . . . . . . . . . . 12
4.3. Algorithm for Creating a Name-Based UUID. . . . . . . . . 13
4.4. Algorithms for Creating a UUID from Truly Random or Pseudo-Random Numbers . . . . . . . . . . . . . . . . . . 14
4.5. Node IDs that Do Not Identify the Host. . . . . . . . . . 15
5. Community Considerations . . . . . . . . . . . . . . . . . . . 15
6. Security Considerations . . . . . . . . . . . . . . . . . . . 16
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 16
8. Normative References . . . . . . . . . . . . . . . . . . . . . 16
A. Appendix A - Sample Implementation . . . . . . . . . . . . . . 18
B. Appendix B - Sample Output of utest . . . . . . . . . . . . . 29
C. Appendix C - Some Name Space IDs . . . . . . . . . . . . . . . 30

1.はじめに

この仕様は,GUID(Globally Unique IDentifier)としても知られる、UUID(Universally Unique IDentifier)のURN名前空間として定義されます。
UUIDは128ビットの大きさをもち、(#重複を回避するための)中央登録処理を必要としません。
この文書にある情報は、URNとしてのUUIDを使用するサービスの実装のための、簡潔な説明を示しています。 この文書にある情報はどれも、UUIDを定義しているDCE標準をくつがえすものであるという意味にとるべきではありません。
この文書の初期のバージョンから定義された仕様として、ITU-T勧告とISO/IEC規格[3]があります。 これらの仕様は統一されており、技術的に完全に適合しています。
さらに、ITU-Tによる仕様制定も現在進行中です。 詳しくは、http://www.itu.int/ITU-T/asn1/uuid.htmlを参照してください。

2.仕様制定の動機

UUIDを使用する主な理由の一つは、(#UUIDの重複を)制御するために、どこかで統制をとる必要がないからです。 (IEEE 802端末識別子を使用しない場合はこの限りではありません。)
その結果として、要求に応じてUUIDを生成する作業は完全に自動化することができ、それによりさまざまな目的に使用することができます。 この文書で述べられているUUID生成アルゴリズムは、必要であれば毎秒1000万個以上の速度でUUIDを生成することができるので、UUIDをトランザクションIDとしてさえ利用することもできます。
UUIDは、代替となりうる他のIDよりもそれなりに小さい128ビット固定の大きさをもちます。 この特徴はUUIDに、並び替え・配置・並び替えのためのハッシュ化・データベースへの登録・アロケーション・そして一般におけるプログラミングの容易さを与えています。
UUIDが永続的かつ一意であることによって、UUIDはすぐれたURNをなします。 登録作業なしで新たな一意のUUIDを作成できることは、UUIDが最小の労力でURNのひとつになることを可能にしています。

3.名前空間登録テンプレート

  • 名前空間ID: UUID
  • 登録情報: 登録日付: 2003-10-01
  • 名前空間登録者の定義: JTC 1/SC6 (ASN.1 Rapporteur Group)
  • 構文構造の定義:
    UUIDはすべてのUUID空間で、空間及び時間において一意である識別子です。 UUIDが固定の大きさかつ時間フィールドを含んでいるために、値がロールオーバーする可能性があります。 (紀元3400年前後、使用されている具体的なアルゴリズムに依存します。)
    UUIDは、非常にに小さな生存期間のオブジェクトのタグ付けから、ネットワークを超えて永続的なオブジェクトの信頼できる識別まで、さまざまな用途に使用することができます。
    UUIDの内部表現は、第4章で述べるように、メモリ中の特定のビット列となります。 UUIDをURNとして正確に表すには、ビット列を文字列表現に変換する必要があります。 それぞれのフィールドは整数として扱われ、その値は、最上位の桁から始まるゼロ埋めされた16進文字列として表示されます。 16進数値の'a'から'f'は、小文字として出力し、入力時には大文字・小文字を区別しません。
    正式なUUIDの文字列表現の定義は、以下のABNF[7]によって規定されます。
    UUID = time-low "-" time-mid "-" time-high-and-version "-" clock-seq-and-reserved clock-seq-low "-" node
    time-low = 4hexOctet
    time-mid = 2hexOctet
    time-high-and-version = 2hexOctet
    clock-seq-and-reserved = hexOctet
    clock-seq-low = hexOctet node = 6hexOctet
    hexOctet = hexDigit hexDigit
    hexDigit = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / "a" / "b" / "c" / "d" / "e" / "f" / "A" / "B" / "C" / "D" / "E" / "F"
    以下は、UUIDをURNとして表した文字列表現の例です。
    urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
  • 関連する解説文書:
    [1][2]
  • 識別子の一意性に関する考察:
    この文書は3つのUUID生成アルゴリズムを定義しています。
    一つ目は802 MACアドレスの値を一意性の確保に利用しています。二つ目は疑似乱数生成器を利用し、 三つ目は暗号学的ハッシュ関数とアプリケーションが生成した文字列を利用しています。
    結果としては、ここに列挙した仕組みによって生成されたUUIDは、過去に割り当てられそして未来に割り当てられるであろう全てのUUIDの中で一意になるでしょう。
    識別子の永続性に関する考察: UUIDは本質的に求めるのが非常に困難です。 UUIDが現状、UUID空間において一意であるという事実から、UUIDは可能な限り永続であることは確実です。
  • 識別子を割り当てる処理:
    UUIDの生成には、登録機関への連絡は必要ありません。 ひとつのアルゴリズムには、世界中で一意な値がそれぞれの生成器に必要です。 この値は典型的に、大抵のネットワークに接続されているホストですでに利用可能な、IEEE 802 MACアドレスが利用されます。 このアドレスはIEEE登録機関によって与えられたアドレスブロックから割り当てられます。 もしもそのようなアドレスが利用可能ではなかったり、プライバシーの問題から使用するのが望ましくない場合は、第4章5節に2つの代替手段が定義されています。 もう一つの方法は、この後で定義されるバージョン3または4のUUIDを使う方法があります。
  • 識別子の解決処理:
    UUIDはグローバルに解決可能でないために、これは当てはまりません。
  • 等価性に関する規則:
    まず、UUIDの各フィールドを、4.1.2の図に示されているような、符号なし整数であるみなします。 そして、二つのUUIDを比較するには、上位のフィールドから順に、データ型にあわせて、対応するフィールドを数値比較します。 全ての対応するフィールドが等しい場合にのみ、二つのUUIDは等しくなります。 実装時の注意点としては、等価であることの比較は、それぞれのシステムで適したバイト順で行うことができ、 その後に二つのUUIDを128ビットの符号なし整数とみなすことができます。 また、この文書で定義されているUUIDは、辞書的に並び替えることができます。 二つのUUIDの順序について、最上位のフィールドを比較したとき、一つ目のUUIDのフィールドの方が大きかった場合に、一つ目のUUIDは二つ目のUUIDの後になります。 二つ目のUUIDのフィールドの方が大きかった場合には、二つ目のUUIDは一つ目のUUIDの後に続きます。(#Errata ID:1428参照。原文には矛盾した記述がある。)
  • URN構文との一致:
    UUIDの文字列表現は、URN構文と完全な互換性があります。 メモリ中のビットの配置によって表現されたUUIDをURNに変換するためには、文字列表現の項目で言及されている、バイト順の問題に忠実に従わなければなりません。
  • 有効性立証の仕組み:
    UUIDのタイムスタンプ部分が未来のものであると決定できる場合を除いて、それもはっきりしない場合には、UUIDが「有効である」と区別する手段はありません。
  • 範囲(スコープ)
    UUIDはグローバルな範囲を持ちます。

4.規格

4.1.形式

UUIDの形式は16オクテットです。 8番目のオクテットのいくつかのビットはvariant(異体)フィールドとして定義され、以下のように、構造体を規定するために利用されます。

4.1.1. Variant(異体)フィールド

variantフィールドはUUIDの構造を規定します。 UUIDにおけるこの他の全てのビットの実装は、このvariantフィールドに依存します。 そのため、もっと正確に言えば、typeフィールドとでも呼ぶことができるでしょうが、互換性のために、元々の名前で呼び続けることにします。 variantフィールドは、UUIDの8番目にあたるオクテットの最上位のいくつかのビットから構成されています。 以下の表は、variantフィールドの意味を表しています。 文字'X'は、値を「無視する」(#"don't-care")という意味です。

Msb0Msb1Msb2説明
0 x x NCS(#Apollo Network Computing System)の後方互換性のために予約されています。
1 0 x この文書で定義されるUUIDのvariantフィールドの値です。
1 1 0 Microsoft Corporationの後方互換性のために予約されています。
1 1 1 将来の定義のために予約されています。

相互運用性を確保するため、いかなる状況においても、variantフィールドの値がこの文書で定義されている値と異なる場合は、何も保証されませんが、実際としては問題にはなりません。

4.1.2. 構造とバイト順

オクテット中のビット割り当てに関する混乱を最小限にするために、UUIDのデータ構造は、フィールドがオクテットの中で欠けることがないように配置されています。 それぞれのフィールドは、最も上位のものから配置されています。

フィールド名データ型オクテット番号説明
time_low 符号なし 32ビット整数 0-3 タイムスタンプの下位32ビットを格納します。
time_mid 符号なし 16ビット整数 4-5 タイムスタンプの中位16ビットを格納します。
time_hi_and_version 符号なし 16ビット整数 6-7 タイムスタンプの上位部分とバージョン番号を格納します。
clock_seq_hi_and_reserved 符号なし 8ビット整数 8 クロックの上位部分とvariantフィールドを格納します。
clock_seq_low 符号なし 8ビット整数 9 クロックの下位8ビットを格納します。
node 符号なし 48ビット整数 10-15 空間において一意になる端末識別子を格納します。

UUIDは、以下に示されるような128ビットからなるオブジェクトとしても符号化することができます。 そんな(#巨大なオブジェクトを)扱える、分かりやすいアプリケーションやプロトコルの定義は存在しませんが…。 それぞれのフィールドは上記で定義されたような大きさと順番で、あわせて16オクテットとして符号化されており、それぞれのフィールドは最上位のバイトが最初に来るように符号化されています。 (この並べ方はネットワークバイトオーダー(#ビッグエンディアン:IntelのCPU等で使われているリトルエンディアンとはバイト順が逆)として知られています。) それぞれのフィールド名、特に、多重化されたフィールドの名前については、歴史的経緯に依っています。

bit0123
01234567890123456789012345678901
0 time_low
32 time_mid time_hi_and_version
64 clk_seq_hi_res clk_seq_low node (0-1)
96 node (2-5)

4.1.3. バージョン

バージョン番号は、タイムスタンプフィールドの最上位4ビットを占めます。 (これは、time_hi_and_versionフィールドのビット4から7にあたります。)(#Errata ID: 3546参照。ビット表記にゆれがある。) 以下の表は、UUIDのvariantフィールドが、この文書で定義されるものである場合に適用される、現在定義されているUUIDのバージョンを表します。

Msb0Msb1Msb2Msb3バージョン説明
0 0 0 1 1 この文書で定義される、時刻を基にして生成されるバージョンです。
0 0 1 0 2 POSIX UIDに利用される、DCE(#Distributed Computing Environment) Securityによるバージョンです。
0 0 1 1 3 この文書で定義される、名前を基にしてMD5ハッシュ関数により生成されるバージョンです。
0 1 0 0 4 この文書で定義される、(疑似)乱数を基にして生成されるバージョンです。
0 1 0 1 5 この文書で定義される、名前を基にしてSHA-1ハッシュ関数により生成されるバージョンです。

バージョンは間違いなく(#ここで定義されているよりも)多くの亜種があります。 私たちはそれらの亜種の項目についても、互換性のために確保しておく必要があるでしょう。

続く…(まだ訳してないです)

8. Normative References(注釈)

  1. Zahn, L., Dineen, T., and P. Leach, "Network Computing Architecture", ISBN 0-13-611674-4, January 1990.
  2. "DCE: Remote Procedure Call", Open Group CAE Specification C309, ISBN 1-85912-041-5, August 1994.
  3. ISO/IEC 9834-8:2004 Information Technology, "Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components" ITU-T Rec. X.667, 2004.
  4. Rivest, R., "The MD5 Message-Digest Algorithm ", RFC 1321, April 1992. Leach, et al. Standards Track [Page 16] RFC 4122 A UUID URN Namespace July 2005
  5. Eastlake, D., 3rd, Schiller, J., and S. Crocker, "Randomness Requirements for Security", BCP 106, RFC 4086, June 2005.
  6. Moats, R., "URN Syntax", RFC 2141, May 1997.
  7. Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", RFC 2234, November 1997.
  8. National Institute of Standards and Technology, "Secure Hash Standard", FIPS PUB 180-1, April 1995, <http://www.itl.nist.gov/fipspubs/fip180-1.htm>.