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を見ただけで、どのバージョン、バリアントなのかを判断できる。
この連載の記事
-
第424回
PC
Windowsの基本機能であるクリップボードについてあらためて整理 -
第423回
PC
PowerShellの今を見る 2つあるPowerShellはどっち使えばいい? -
第422回
PC
Windows 11の目玉機能が早くも終了、Windows Subsystem for Android(WSA)を振り返る -
第421回
PC
進化しているPowerToys LANで接続したマシンでキーボード/マウス共有機能などが追加 -
第420回
PC
Windowsプレビュー版に搭載されたsudoを試す -
第419回
PC
Windows Insider Previewが変わって、今秋登場のWindows 11 Ver.24H2の新機能が見えてきた? -
第418回
PC
Windows 11のスマートフォン連携は新機能が追加されるなど、いまだ進化している -
第417回
PC
Windows 11のスマートフォン連携機能をあらためて使ってみる -
第416回
PC
Windowsセキュリティ(Defender)をコマンドラインで扱う -
第415回
PC
ConvertFrom-Stringを使って、テキストデータをテンプレートで読み込む -
第414回
スマホ
Windows Subsytem for Linux(WSL)が昨年9月のアップデートでファイアウォール対応になった - この連載の一覧へ