[解決済み] v5のUUIDを生成しています。名前と名前空間とは何ですか?
質問
を読みました。
man
のページがありますが
name
と
namespace
が対象です。
バージョン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エンコーディングの詳細についてです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン