名前

uuid_generate, uuid_generate_random, uuid_generate_time, uuid_generate_time_safe - 新規に一意の UUID を生成する

書式

#include <uuid.h>

void uuid_generate(uuid_t out);
void uuid_generate_random(uuid_t out);
void uuid_generate_time(uuid_t out);
int uuid_generate_time_safe(uuid_t out);
void uuid_generate_md5(uuid_t out, const uuid_t ns, const char *name, size_t len);
void uuid_generate_sha1(uuid_t out, const uuid_t ns, const char *name, size_t len);

説明

uuid_generate() 関数は、 新たな UUID (universally unique identifier) を生成する。 UUID の生成にあたっては、 getrandom(2)、 /dev/urandom/dev/random の中の利用可能なものが用いられ、 高品質な乱数が生成される。 これが利用できない場合、 uuid_generate() は、 これに代わるアルゴリズムを採用する。 そこでは、 現在時刻、 ローカルイーサネットの MAC アドレス (利用できる場合)、 疑似乱数ジェネレーターを使って生成される乱数データを利用する。

uuid_generate_random() 関数は、 高品質の乱数ジェネレーターが利用できない場合であっても、完全なランダム UUID フォーマットを強制的に利用する。 この場合は、 疑似乱数ジェネレーターが代わりに用いられる。 ただし疑似乱数ジェネレーターを用いると、 生成される UUID の一意性は損なわれる場合があることに注意すること。

uuid_generate_time() 関数は、 現在時刻と (利用可能であれば) ローカルのイーサネット MAC アドレスを用いた、 別のアルゴリズムを強制的に利用する。 このアルゴリズムは、 かつては UUID を生成するデフォルトであった。 ただしイーサネット MAC アドレスを利用することから、 いつどこで UUID が生成されたものであるかの情報が漏れてしまう。 アプリケーションによっては、 プライバシーの問題を引き起こす場合がある。 そこで uuid_generate() 関数は、 高品質の乱数発生の仕組みが利用できない場合に限って、 このアルゴリズムを利用している。 並列実行されているプロセスから生成される UUID であっても、 その一意性を保証するために、 uuid ライブラリでは、 グローバルクロックの状態カウンター (status counter) を利用する (プロセスが、 このファイルへの排他的アクセス権限を取得できる場合)。 または uuidd(8) デーモンを利用する (これがインストールされていて、 プロセスがその実行権限を持っている場合)。 この 2 つの同期のメカニズムがともに利用できない場合、 2 つの同時実行されたプロセスが、 同一の UUID を取得することは、 理論的には可能になる。 UUID が安全な方法で生成されたことを確認するには、 uuid_generate_time_safe を用いること。

uuid_generate_time_safe() 関数は uuid_generate_time() と同様である。 ただし関数の返り値として、 どの同期メカニズム (前述参照) を用いたのかを表す値を返す。

UUID は 16 バイト長 (128 ビット) であり、 およそ 3.4x10^38 個の一意な値を提供する (Carl Sagan の Cosmos によると、宇宙には 10^38 個の素粒子があるとのこと)。 新たに生成された UUID は、 ローカルシステム内に生成されている UUID に対して一意であり、 また過去から未来に向けて、 他のシステム上において生成される UUID に対しても一意となる、 と考えてかまわない。

uuid_generate_md5() 関数および uuid_generate_sha1() 関数は、 名前空間および任意のバイナリ文字列を提供する既知の UUID に基づいた、 MD5 ハッシュ、 SHA1 ハッシュの (予測可能な) UUID を提供する。 UUID は、 以下の V3 および V5 に準拠している。 RFC-4122 <https://tools.ietf.org/html/rfc4122>.

返り値

新たに生成された UUID は、 out によって示されるメモリ上の場所に返される。 UUID が安全な方法で生成されたら 0 を返す。 そうでない場合は -1 を返す。

準拠

本ライブラリは OSF DCE 1.1 と互換の UUID を生成する。 またハッシュベース UUID V3 と V5 は、 以下と互換である: RFC-4122 <https://tools.ietf.org/html/rfc4122>.

著者

Theodore Y. Ts’o

関連項目

uuidgen(1), uuid(3), uuid_clear(3), uuid_compare(3), uuid_copy(3), uuid_is_null(3), uuid_parse(3), uuid_time(3), uuid_unparse(3), uuidd(8)

バグ報告

バグ報告は、 以下にある issue トラッカーを利用すること。 <https://github.com/util-linux/util-linux/issues>.

入手方法

libuuid ライブラリは、 util-linux 2.15.1 以降、 このパッケージの一部であり、 以下からダウンロードできる。 Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.