1. ホーム
  2. uuid

[解決済み] v5のUUIDを生成しています。名前と名前空間とは何ですか?

2022-04-23 01:30:35

質問

を読みました。 man のページがありますが namenamespace が対象です。

バージョン3およびバージョン5のUUIDの場合、追加のコマンドライン namespaceとnameの2つの引数を与える必要があります。namespaceは 文字列表現のUUID、または 内部であらかじめ定義された名前空間UUID(現在知られているのは、"ns:DNS", "ns:URL", "ns:OID", "ns:X500")に対する識別子です。このうち は任意の長さの文字列である。

名前空間です。

名前空間は、文字列表現のUUID、または

生成されたUUID v5に対して、それ(UUID v4)をどこかに保存する必要があるということでしょうか。どちらにしても、なぜ自動で行われないのでしょうか?

名前は任意の長さの文字列です。

name 完全にランダムな文字列?では、何のためにあるのでしょうか?UUID v5からデコードできるのでしょうか?

解決方法は?

名前と名前空間は、(非常におそらく)ユニークなUUIDの階層を作成するために使用することができます。

大まかに言えば、タイプ3またはタイプ5のUUIDは、名前空間識別子と名前をハッシュ化することで生成される。タイプ3のUUIDはMD5を使用し、タイプ5のUUIDはSHA1を使用する。128ビットしか使用できず、5ビットがタイプ指定に使用されるため、すべてのハッシュビットがUUIDに入るわけではありません。(また、MD5は暗号的に壊れていると考えられており、SHA1はその最後の足場にあるため、"非常に安全"である必要があるデータの検証には使用しないでください). とはいえ、これは再現性/検証可能なquot;hash;関数を作成する方法であり、階層的な名前を確率的にユニークな128ビット値にマッピングし、階層的ハッシュまたはMACのように動作する可能性があります。

例えば、(key,value)ストアがあるが、1つの名前空間しかサポートしていないとする。タイプ3またはタイプ5のUUIDを使用して、多数の異なる論理的な名前空間を生成することができます。まず、各ネームスペースのルート UUID を作成します。これは、どこかに隠しておけば、タイプ1(ホスト+タイムスタンプ)またはタイプ4(ランダム)UUIDにすることができる。あるいは 一つ ルート用のランダムなUUID (あるいは null UUIDです。 00000000-0000-0000-0000-000000000000 をルートとして使用し)、次に " を使用して各ネームスペースに再現可能な UUID を作成します。 uuid -v5 $ROOTUUID $NAMESPACENAME となります。これで、名前空間内のキーに対して一意なUUIDを作成することができます(" uuid -v5 $NAMESPACEUUID $KEY "。これらのUUIDは、高い確率で衝突を避けながら、単一のキー-バリューストアに投げ込むことができます。 このプロセスは再帰的に繰り返すことができ、たとえばUUIDキーに関連付けられたquot;value"が、バケット、コンテナ、ディレクトリなどのある種の論理的なquot;namespace"を表す場合、そのUUIDを使ってより階層的なUUIDを順番に生成できるのです。

生成されたタイプ3またはタイプ5のUUIDは、名前空間IDと名前空間内の名前(キー)の(部分的な)ハッシュを保持する。メッセージMACがエンコード元のメッセージの内容を保持するのと同じように,名前空間UUIDを保持することはない。名前は、uuidアルゴリズムの観点から、quot;arbitrary"(オクテット)文字列である。しかし、その意味はアプリケーションに依存する。論理ディレクトリ内のファイル名、オブジェクトストア内のオブジェクトIDなどである。

この方法は、適度に多くの名前空間とキーを持つ場合には有効ですが、非常に多くのキーを非常に高い確率で一意にすることを目指す場合には、最終的に力尽きます。Wikipediaの誕生日問題(Birthday Paradox)の項目には、様々な数のキーとテーブルサイズについて、少なくとも1つの衝突が起こる確率を示した表があります。128ビットの場合、この方法で260億の鍵をハッシュすると、衝突の確率は次のようになる。 p=10^-18 (無視できる)が、26兆個の鍵では、少なくとも1回の衝突の確率が p=10^-12 (1兆分の1)であり、ハッシュ化された 26*10^15 の鍵で、少なくとも1回の衝突が起こる確率は p=10^-6 (100万分の1)です。UUIDタイプをエンコードする5ビットを調整すると、多少早く使い切りますので、1兆個のキーが1回衝突する確率はおよそ1兆分の1となります。

参照 http://en.wikipedia.org/wiki/Birthday_problem#Probability_table は確率表です。

参照 http://www.ietf.org/rfc/rfc4122.txt は、UUIDエンコーディングの詳細についてです。