Other Alias
uuid_generate, uuid_generate_time書式
#include <uuid/uuid.h>
void uuid_generate(uuid_t out);
void uuid_generate_random(uuid_t out);
void uuid_generate_time(uuid_t out);
説明
uuid_generate 関数は新しい UUID (universally unique identifier: 絶対に他とは重ならない識別子) を生成する。 UUID の生成には、 /dev/urandom のような質の良い乱数発生機構が利用できる場合はそれを利用する。 できない場合には、 uuid_generate は別のアルゴリズムを用いる。この場合は現在時刻、 ローカルなイーサネットの MAC アドレスが取得できればその値、 および擬似乱数発生機構から生成された乱数が用いられる。uuid_generate_random 関数は、質の良い乱数発生機構 (例えば /dev/urandom) が利用できない場合でも、完全にランダムベースの (つまり時刻や MAC アドレスを使わない) UUID フォーマットを作りたい場合に用いる。 この場合は擬似乱数発生機構が代わりに用いられる。 擬似乱数発生機構を利用すると、このように生成された UUID の 一意性は劣化するかもしれないことに注意すること。
uuid_generata_time 関数は、代替アルゴリズムを使いたい場合に用いる。 これは現在時刻と (あれば) イーサネットの MAC アドレスを用いる。 このアルゴリズムはかつて UUID 生成方法のデフォルトであったが、 イーサネットの MAC アドレスを用いるので、いつどこで UUID が生成 されたかの情報がリークしてしまう。これはアプリケーションによっては プライバシーの問題を起こすことがあるので、 uuid_generate 関数は質の高い乱数発生機構が利用できない場合に限って このアルゴリズムを用いるようになった。
UUID は 16 バイト (128 ビット) 長で、およそ 3.4x10^38 この ユニークな値を与える (Carl Segan の Cosmos によれば、全宇宙にある素粒子の個数は 10^80 だそうである)。 新たに作られた UUID は、ローカルなシステムや外部のシステムによって 過去または未来に生成された/される UUID のいずれとも異なると 考えることができる。