Windowsのレジストリなどを見ると、波カッコ「{}」に囲まれた16進数の羅列を見ることがある。これをGUID(Globally Unique Identifier)という。GUIDは、Windowsでユニークな識別子として使われる128bit(16バイト)の数値である。GUIDは、WindowsのAPIで作成することができ、他のマシンで作られたGUIDであっても、衝突することが極めてまれで、事実上起こらないと考えてもよいレベルのものだ。
Windowsでは、オブジェクトやクラスの定義などに使われる。数値なので比較が容易で検索処理などを高速化できる。
このGUIDは、UUIDと呼ばれる識別子の一種だ。Windowsでは、UUIDの一部をGUIDと呼んで利用している。このため、Windows上ではGUIDとUUIDを混同することがある。しかし、あくまでGUIDはUUIDの一種なので、GUIDはUUIDであると言うことは必ずしも間違いではないが、UUIDをGUIDと言ってしまうと誤解が生じる可能性がある。そこで今回はGUIDとUUIDについて簡単に解説する。
まず、UUIDとはなんぞや?
GUIDを説明するには、まずUUIDを説明しておく必要がある。UUIDとは、RFC2144などで定義される128bit(16バイト)の数値で、インターネットやシステム内部などでさまざまなものの識別に使う。
UUIDには、個別に生成したときに衝突をできる限り小さくするために、生成のルールが定められている。逆に言えば、UUIDのルールに従わないものは同じ128bitの数値であってもUUIDではない。UUIDの定義は複数の文書でなされているが、互いに衝突しないように調整されている。UUIDの定義の1つであるRFC2144では、5つの生成ルールと4つの変種(バリアント)が定義されている。
RFC2144では、生成ルールを「バージョン」と呼ぶ。UUIDが歴史的な経緯をたどってきたため、過去との互換性を持ちながら、衝突しないルールを追加してきたため、バージョンという名称が使われる。
バリアントは、主に過去との互換性を維持するためのものだ。バージョンとは独立して指定できるものだが、どちらかと言えば、過去に使ってしまった範囲を除外するような使い方をする。UUIDとして任意のバージョンとバリアントの組み合わせが可能だが、これを受け付けるかどうかはソフトウェア側の問題である。ソフトウェアには他と区別できれば、どのような128bit数値でもかまわないというレベルから、特定のUUIDバージョン、バリアントでないと受け付けないものまで存在する可能性がある。
UUIDバージョンは5つ存在する
RFC2144で定義しているバージョンは、以下の表の5つである。バージョンは、4bitの数値なので、最大16種類あり、他の文書で6番目以降のバージョンが定義される可能性がある。
このうち、WindowsでGUIDと呼んでいるのは、バージョン1およびバージョン4。WindowsにはUUIDバージョン1およびバージョン4を生成するAPIが用意されているが、バージョン1では、ローカルマシンのMACアドレスを利用するため、セキュリティ上の懸念がある。このため、最近ではバージョン4を使うことが標準とされているようだ。
もちろん外部からのアクセスがなく、部外者が知り得ないという環境であれば、バージョン1を使うこともできる。Microsoftのドキュメントによると、こちらのほうが若干高速になり、大量に生成する場合にメリットがあるという。
バージョン4は、乱数を使って作るUUIDで値の範囲としてはバージョン4bit、バリアント2bitを除く122bitを使うため、2の122乗個のUUIDが存在する。ある程度妥当な乱数生成をするなら、これだけ大きな数値同士が一致する可能性は非常に低く、現実的には起こりえないと考えて問題ない。
UUIDの構造を見る
UUIDは、以下の図のような構造になっており、GUIDが前記のように5つのパートに別れているのには、この構造が関係している。つまり、ハイフンで区切られた5つの数値は、それぞれUUIDの「time_low」「time_mid」「time_hi_and_version」「clock_seq_hi_and_reservedとclock_seq_low」「node」に対応している。
このうち、3つめのパートの先頭がバージョンであり、4つめのパートの先頭がバリアント(以下の表)に相当する数値となる。最初の桁が8~Bまでの間ならRFC2144で定義されたUUIDである。これを覚えておくと、UUIDやGUIDを見ただけで、どのバージョン、バリアントなのかを判断できる。
この連載の記事
-
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 - この連載の一覧へ