🆔 UUID v5(名前空間)生成

名前空間UUIDと名前(文字列)から、決定的なUUID v5(SHA-1ベース)を生成します。同じ名前空間・同じ名前からは、いつ・誰が実行しても常に同じUUIDになるのが特徴です。DNS・URL・OID・X.500の標準名前空間をプリセット、任意の名前空間UUIDも入力できます。すべての処理はブラウザ内で完結し、入力内容は送信されません。

入力

名前空間プリセット

プリセットを選ぶと自動で入ります。「カスタム」を選ぶと任意の名前空間UUID(8-4-4-4-12形式)を入力できます。

UUIDを割り当てたい対象の名前。ドメイン名・URL・任意の識別子など。UTF-8バイト列としてハッシュされます(大文字小文字・末尾の空白も区別されます)。

生成された UUID v5

標準名前空間UUID(RFC 4122)

RFC 4122 附録Cで定義された定義済み名前空間。名前がDNS名なら DNS、URLなら URL、というように対象の種類で使い分けます。特定の種類に当てはまらない場合は、自分のプロジェクト用にランダムなUUIDを1つ決めて名前空間として使うのが一般的です。

解説

UUID v5 は、「名前空間UUID」と「名前(文字列)」の組み合わせから、SHA-1ハッシュを使って決定的に作られるUUIDです。最大の特徴は、同じ名前空間・同じ名前からは、いつ・どの端末で・誰が実行しても必ず同じUUIDになること(再現可能・冪等)。ランダムに生成する v4 とは正反対の性質で、「同じ入力には同じID」を保証したい場面に向きます。たとえば、あるドメイン名やURL、外部システムのキーに対して安定したUUIDを割り当てたいとき、事前に採番テーブルを用意しなくても、名前から一意なIDをその場で導出できます。本ツールは、名前空間UUIDと名前を入れるだけで、この計算をブラウザ内で完結して行います。

生成の仕組みは RFC 4122 §4.3 に沿っています。まず名前空間UUIDを16バイトのバイト列に変換し、その後ろに名前のUTF-8バイト列を連結します。この連結データ全体を SHA-1 でハッシュ化(Web CryptoのSHA-1)し、得られた20バイトのうち先頭16バイトを取り出します。最後に、6番目のバイトの上位4ビットを 0101(=バージョン5)に、8番目のバイトの上位2ビットを 10(=RFC 4122のvariant)に書き換え、8-4-4-4-12 の形に整形します。この2箇所のビット固定があるため、UUID v5は3桁目が必ず 5 で始まり、variant部分(4つ目のブロックの先頭)が 8・9・a・b のいずれかになります。

名前空間には、RFC 4122で定義済みの4種類(DNS・URL・OID・X.500 DN)が用意されています。名前がドメイン名なら DNS(6ba7b810-…)、URLなら URL(6ba7b811-…)というように、対象の種類に合わせて選びます。どれにも当てはまらない独自の識別子なら、自分のプロジェクト用にランダムなUUIDを1つ決めて名前空間として使い回すのが定石です。名前空間を分けておくと、たとえ同じ名前文字列でも名前空間が違えば別のUUIDになるため、用途ごとにID空間を衝突なく分離できます。

UUID v3 と v5 はどちらも「名前空間+名前」から決定的にUUIDを作る点は同じで、違いはハッシュ関数だけです。v3 は MD5、v5 は SHA-1 を使います。現在は、より新しく設計上も推奨される SHA-1 ベースの v5 を使うのが一般的です(本ツールは v5 のみ対応で、v3/MD5には対応していません)。なお、決定的である以上「秘密の名前から推測されないID」を作る用途には向かず、また SHA-1・MD5 とも暗号学的な強度を期待する処理には使えません。UUID v5 はあくまで、名前から安定した識別子を導出するための仕組みとして使ってください。すべての計算は端末内(ブラウザ内)で行われ、入力した名前空間や名前はどこにも送信されません。

よくある質問

UUID v5とは何ですか?

「名前空間UUID」と「名前(文字列)」からSHA-1を使って決定的に作るUUIDです。同じ名前空間・同じ名前からは必ず同じUUIDになるため、ランダムなv4とは違い『同じ入力には同じID』を保証したいときに使います。

なぜ同じ入力から同じUUIDになるのですか?

生成にランダム性を一切使わず、名前空間の16バイトと名前のUTF-8バイト列を連結してSHA-1でハッシュ化した結果だけからUUIDを組み立てるためです。入力が同じならハッシュも同じになり、結果のUUIDも常に一致します。

v4(ランダム)とはどう使い分けますか?

とにかく一意なIDが欲しいだけなら手軽なv4で十分です。一方で、あるドメイン名や外部キーに対して『毎回同じ安定したID』を割り当てたい、採番テーブルなしで名前からIDを導出したい、という場合はv5が向きます。

UUID v3との違いは何ですか?

アルゴリズムはほぼ同じで、ハッシュ関数だけが異なります。v3はMD5、v5はSHA-1を使います。一般には新しいv5が推奨されます。本ツールはv5のみ対応で、v3(MD5)には対応していません。

名前空間UUIDは何を入れればよいですか?

名前がドメイン名ならDNS、URLならURL、というように定義済みプリセットから選べます。どれにも当てはまらない独自の識別子なら、自分のプロジェクト用にランダムなUUIDを1つ決めて『カスタム』に入れ、それを使い回すのが一般的です。

名前の大文字小文字や空白は区別されますか?

区別されます。名前はUTF-8のバイト列としてそのままハッシュされるため、『Example』と『example』、末尾に空白があるかどうかでも別のUUIDになります。入力の表記ゆれには注意してください。

生成したUUIDや名前はサーバーに送られますか?

送られません。名前空間の変換・連結・SHA-1ハッシュ・整形はすべてブラウザ内(Web Crypto)で行われ、入力内容はどこにも送信されません。オフラインでも利用できます。

セキュリティ用途(パスワード等)に使えますか?

使えません。UUID v5は決定的なので秘密の名前から推測されないIDを作る用途には不向きで、SHA-1自体も暗号強度を期待する処理には使えません。あくまで名前から安定した識別子を導出する仕組みとしてお使いください。